rubygems.orgにSSL接続できなくなった(macos)
TL;DR
- rubygems.orgにSSL接続できず、ブラウザからのアクセス、
gem install
コマンドが通らない状態だった -
/private/etc/hosts
ファイルにrubygems.orgに対応するIPアドレスが記載されており、それをコメントアウトすることで解決
経緯や調査録
docker conpose build
の処理中でgem installを行うようにしており、その中でSSLエラーが発生していました。
(中略)
------
> [19/21] RUN gem install bundler -v="2.0.2":
#23 0.504 ERROR: SSL verification error at depth 0: ok (0)
#23 0.519 ERROR: SSL verification error at depth 0: ok (0)
#23 0.530 ERROR: SSL verification error at depth 0: ok (0)
#23 0.532 ERROR: Could not find a valid gem 'bundler' (= 2.0.2), here is why:
#23 0.532 Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (certificate rejected) (https://rubygems.org/specs.4.8.gz)
#23 0.546 ERROR: SSL verification error at depth 0: ok (0)
#23 0.561 ERROR: SSL verification error at depth 0: ok (0)
------
docker依存のエラーかもしれないと思い、ローカルでruby環境を作成し、同じようにgem install
コマンドを使ったが同様のエラーが出る。
こうなると、dockerじゃなくて自分のPCがおかしい可能性が高いかなと思いました。
この辺りでようやく気付きましたが、ブラウザからhttps://rubygems.org/ にアクセスすると、SSLエラーが出るようになってました。
chromeのエラーコードだけど、NET::ERR_CERT_COMMON_NAME_INVALID
というエラーらしい。
CNとアクセスするドメインの名前が一致していないっぽいということだけわかりましたが、原因不明。
次に証明書を見てみる
うーん、わからん。
該当する証明書をダウンロードしてキーチェーンに登録したりしても解決しませんでした。
ここで別端末からアクセスするとどうなるのか試してみると、正常にアクセスすることができて、さらにサーバー証明書も先程のものとは違うということが判明。
エラーが出ている端末の別ユーザーでもアクセスしてみても、正常にアクセスすることができて、サーバー証明書も別端末のものと同じものが用いられていました。
これらのことから自分の端末のエラーが出ているユーザーの証明書かネットワークの設定辺りがおかしいのかなと推測するも、これ以上の情報は見つからずでした...。
ちなみに公式のトラブルシューティングにSSL/TLS周りについてのページがあり、 そこに書いてあることを色々試してみたけど解決しませんでした。(すべては試せていない)
curl -Lks 'https://git.io/rg-ssl' | ruby
root@39278a4da6ff:/app# curl -Lks 'https://git.io/rg-ssl' | ruby
Here's your Ruby and OpenSSL environment:
Ruby: 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]
RubyGems: 3.0.3
Bundler: 1.17.2
Compiled with: OpenSSL 1.1.0j 20 Nov 2018
Loaded version: OpenSSL 1.1.0l 10 Sep 2019
SSL_CERT_FILE: /usr/lib/ssl/cert.pem
SSL_CERT_DIR: /usr/lib/ssl/certs
With that out of the way, let's see if you can connect to rubygems.org...
Bundler connection to rubygems.org: failed ❌ (certificate verification)
ERROR: SSL verification error at depth 0: ok (0)
RubyGems connection to rubygems.org: failed ❌ (certificate verification)
Ruby net/http connection to rubygems.org: failed ❌
Unfortunately, this Ruby can't connect to rubygems.org. 😡
Your Ruby can't connect to rubygems.org because you are missing the certificate files OpenSSL needs to verify you are connecting to the genuine rubygems.org servers.
そうこうしてググるのもそろそろ限界が見えてきたなあというところで、ふとtwitterで同じケースの人がいないか調べてみると、それっぽいのが見つかりました!
(ツイートは公開されているとはいえ、迷惑かもしれないので該当のツイートは伏せておきます)
ツイートによると、hostsファイルの設定がおかしくなっているとかなんとか。
僕も/private/etc/hosts
ファイルを見てみると、身に覚えがないrubygems.org
の設定が...!
こちらをコメントアウトすることで、無事すべてのSSLアクセスができるようになりました。
どうしてこのような設定になったのか全く身に覚えがないですが、これですべて解決したのでした。めでたしめでたし。
Discussion