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)
とエラーがでて接続できない場合の対処について書いておきます。
- 証明書をダウンロードする。
http://curl.haxx.se/ca/cacert.pem - 環境変数 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 コマンドは自分自身で証明書を持っていて、それを更新する方法のため)