Edited at

Windows上のRubyでSSL接続時にcertificate verify failedが出る場合の対処


Ruby をアップデートしろ!

……ができない場合。

Windows上のRubyにおいて、

require "open-uri"

open("https://www.google.com").read

などとやった場合に

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate

verify failed (OpenSSL::SSL::SSLError)

とエラーがでて接続できない場合の対処について書いておきます。


  1. 証明書をダウンロードする。

    http://curl.haxx.se/ca/cacert.pem

  2. 環境変数 SSL_CERT_FILE に cacert.pem のパスを設定する

    set SSL_CERT_FILE=./cacert.pem

    もしくはスクリプトの先頭付近に

    ENV["SSL_CERT_FILE"] = "./cacert.pem"

    (Windows のシステム設定から環境変数を設定する場合などは証明書ファイルのフルパスを設定する必要があるでしょう)

終わり。

試験環境


  • RubyInstaller

  • ruby 2.2.3p173 (2015-08-18 revision 51636) [i386-mingw32]

Windows以外の環境でも証明書が古くなれば出ることがある(macOS で確認)。

その場合でも同様に環境変数 SSL_CERT_FILE に証明書へパスを通してやれば良い。


2016/12/06 追記

https://rubygems.org/ の証明書が更新された影響で、Gemのインストール関連でSSLのエラーが出る場合は、

gem install rubygems-update --source http://rubygems.org/

update_rubygems

とコマンドを発行することでも解決する。

(この記事の本題ではないが。gem コマンドは自分自身で証明書を持っていて、それを更新する方法のため)