1. Qiita
  2. 投稿
  3. Windows

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

  • 221
    いいね
  • 11
    コメント
この記事は最終更新日から1年以上が経過しています。

エラー内容

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が最新バージョンに更新されれば、この問題は解決すると思われる。
それまでは上の手順を行って凌ぐ必要がある。

参考