memo.xight.org

日々のメモ

OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B:certificate verify failed

Summary

Net::HTTP で HTTPS 接続した際、エラーが発生

/path/to/net/http.rb:920:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

原因と対応

証明書が見つからないことが原因。
証明書をダウンロードして、証明書を明示的に指定すればよい

cert のディレクトリを確認

% ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_DIR'
/usr/local/etc/openssl/certs

cert のファイルを確認

% ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'
/usr/local/etc/openssl/cert.pem

証明書をダウンロードして、証明書を明示的に指定

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

https = Net::HTTP.new('example.com', 443)
https.open_timeout = SYSTEM_TIMEOUT_SEC
https.read_timeout = SYSTEM_TIMEOUT_SEC
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_PEER
https.verify_depth = 5
https.ca_file = "./cacert.pem" # <= 追加


ad hocな対応

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE


Reference

Stack Overflow - ruby on rails - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
https://stackoverflow.com/questions/4528101/ssl-connect-returned-1-errno-0-state-sslv3-read-server-certificate-b-certificat

via

komiyakの通り道 - 2013-05-08 - エラー:OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
http://d.hatena.ne.jp/komiyak/20130508/1367993536