Edited at

Windowsでgem installするとSSLエラーが出る場合の解決策

More than 3 years have passed since last update.


エラー内容

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が最新バージョンに更新されれば、この問題は解決すると思われる。

それまでは上の手順を行って凌ぐ必要がある。


参考