Mac OSのバージョンアップする度に出しているような気がするのが、RubyのHTTPS通信でのエラー。ルート証明書が見つからなくてエラーがでます。
/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/http.rb:918:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
そんな場合は、まずはRubyの慌てず騒がずNet::HTTPがどこに証明書を探しにいっているかを確認します。
$ ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" "/etc/openssl/cert.pem"
指し示された場所に、あるのでしょうか?
$ ls /etc/openssl/cert.pem ls: /etc/openssl/cert.pem: No such file or directory
ないですね。OSをバージョンアップすると、何故か消えるっぽいです。
フォルダ作って、証明書をダウンロードします。
$ sudo mkdir /etc/openssl Password: $ cd /etc/openssl/ $ sudo wget http://curl.haxx.se/ca/cacert.pem --2014-05-17 17:10:23-- http://curl.haxx.se/ca/cacert.pem Resolving curl.haxx.se... 80.67.6.50, 2a00:1a28:1200:9::2 Connecting to curl.haxx.se|80.67.6.50|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 250283 (244K) Saving to: 'cacert.pem' 100%[======================================>] 250,283 214KB/s in 1.1s 2014-05-17 17:10:25 (214 KB/s) - 'cacert.pem' saved [250283/250283] $ sudo mv cacert.pem cert.pem
解決!!
OpenSSL::SSL::SSLError
このエラーは、当然ながらWindowsでも起こりえます。Macの場合と同様に、デフォルトパスの場所にファイルを配置すれば、問題は解決します。それでは、Windows rubyの場合は、デフォルトの証明書のパスは、どこでしょう?RubyInstallerで入れた場合は、次のようになっていました。
>ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE" "C:/Users/Luis/Code/luislavena/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0l/ssl/cert.pem"
ダメだ。このフォルダは作れない。誰だよ、Luisって!!そういう場合は、環境変数でしています。
>set SSL_CERT_FILE=C:\Ruby200\cacert.pem
解決!!