[Server & Network] さくらのレンタルサーバーから Net:HTTP で HTTPS(SSL) 通信する Ruby のコード

memo.

症状

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

こちらを参考にさせて頂きました。ありがとうございます。

調査

参照している証明書はどこにあるのか。

% irb
irb(main):001:0> require 'openssl'
=> true
irb(main):002:0> OpenSSL::X509::DEFAULT_CERT_FILE
=> "/etc/ssl/cert.pem"

実体はない模様。

% cat /etc/ssl/cert.pem
cat: /etc/ssl/cert.pem: No such file or directory

対応

証明書あたりを突っ込んで調べるとハマりそうなので、OpenSSL::SSL::VERIFY_NONE で対応。

require 'openssl'
require 'net/http'
https = Net::HTTP.new('www.google.co.jp', 443) # address, port
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
# https.verify_mode = OpenSSL::SSL::VERIFY_PEER
# https.ca_file = '/etc/ssl/cert.pem'
https.start do
  response = https.get('/') # path
  puts response.body
end

Using Net::HTTP to the HTTPS url

補遺