Ruby の OpenSSL ライブラリで証明書のエラー
タイトルの通り rvm でインストールした Ruby 1.9.3 で OpenSSL ライブラリを用いた時にエラーになりました。テストに使ったスクリプトは以下の通り。
require 'net/https' https = Net::HTTP.new('encrypted.google.com', 443) https.use_ssl = true https.verify_mode = OpenSSL::SSL::VERIFY_PEER https.request_get('/')
返ってくるエラーは次のような内容。
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
回避策として ruby が参照しているルート証明書のデフォルトのパスをチェック。
ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE'
手元のマシンの場合、以下のパスに証明書があれば問題ない様子。
/Users/hoge/.rvm/usr/ssl/cert.pem
とりあえず、デフォルトの証明書をコピーします。
sudo cp /opt/local/share/curl/curl-ca-bundle.crt /Users/hoge/.rvm/usr/ssl/cert.pem
改めて実行するとエラーは出なくなるはず。
ちなみに一般的な Linux 系 OS の場合、デフォルトの証明書は
/etc/ssl/certs
にある事が多いようなので、それらの環境ではそこからコピーしてくれば動く可能性が高いと思われます。
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
なんて書いたらダメ、絶対。