エラー内容
Windowsでgem install
(bundle install
)すると、
Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
というSSLエラーが出て、Gemをインストールできない。
環境
Windows上のRuby 2.1.5(RubyInstaller版)
解決策
Ruby - bundle install がこけるようになった - Qiitaのコメントで紹介されている、以下のページの通りにやればOK。
Workaround RubyGems' SSL errors on Ruby for Windows (RubyInstaller)
手順
1. 新しい証明書ファイルをダウンロードする
Step 1: Obtain the new trust certificateから、「AddTrustExternalCARoot-2048.pem」を右クリックし名前を付けて保存でダウンロードする。
.pem
という拡張子でなければならないので、きちんとこの拡張子でダウンロードされているか確認する。
2. RubyGemsがあるフォルダに移動する
エクスプローラーを開き、上のパスが表示されているバーをクリックして、
C:\Ruby21\lib\ruby\2.1.0\rubygems
と入力しEnterを押して、RubyGemsがあるフォルダに移動する(Ruby 2.1の場合)。
Ruby 2.1以外や標準のフォルダ以外にインストールしている場合は、
'C:\Ruby21\lib\ruby\2.1.0\rubygems' は見つかりません。
と言われるので、
コマンドプロンプトからgem which rubygems
を実行してRubyGemsの場所を確認し、.rb
を抜いたフォルダに移動する
C:\>gem which rubygems
C:/Ruby21/lib/ruby/2.1.0/rubygems.rb
→C:/Ruby21/lib/ruby/2.1.0/rubygems
に移動する
(そのままコマンドでstart C:\Ruby21\lib\ruby\2.1.0\rubygems
とすればエクスプローラーが開くらしいが、自分の環境ではうまく動かなかった)
3. ダウンロードした証明書ファイルをコピーする
移動したフォルダにssl_certs
フォルダがあるので、ダウンロードした「AddTrustExternalCARoot-2048.pem」をそこにコピーする。
4. 確認
再度gem install
(bundle install
)を実行し、無事エラーが出なければ成功。
補足:なぜこの不具合が起きているのか
上のサイトにこの不具合の背景も載っていたので、軽く訳した。(英語弱いので超意訳注意)
最近、rubygems.orgで使用するSSL証明書の更新が行われた。これに対応した新しい証明書はRubyGemsの最新バージョンに付属しているが、困ったことにWindowsではこの最新バージョンにバグがある。
そのため、RubyInstallerに付属するRubyGemsが更新できず古いバージョンのままになっており、このSSLエラー問題が起きている。
修正バージョンがリリースされても、それをRubyGems経由でインストールするにはSSL接続が必要なので不可能、という鶏卵問題になってしまっている。
なので、WindowsでのRubyGemsのバグが修正され、さらにRubyInstallerに付属するRubyGemsが最新バージョンに更新されれば、この問題は解決すると思われる。
それまでは上の手順を行って凌ぐ必要がある。