SSL で自己証明書を使用している URL には open-uri でアクセスできない
Ruby の open-uri
って、SSL で自己証明書を使用している URL には使えないのね。あっさり、certificate verify failed (OpenSSL::SSL::SSLError)
とか OpenSSL
で弾かれる。
「なんかオプションとかないのかね?」とリファレンスマニュアルを探してみるが、どうにもそれらしいものが見つからない。
ソースコードを読んでみると、やはり、検証方法は OpenSSL::SSL::VERIFY_PEER
固定のようだ。
open-uri.rb
の 228 行目。
def OpenURI.open_http(buf, target, proxy, options) # :nodoc:
...
http = klass.new(target_host, target_port)
if target.class == URI::HTTPS
require 'net/https'
http.use_ssl = true
http.verify_mode = **OpenSSL::SSL::VERIFY_PEER**
store = OpenSSL::X509::Store.new
store.set_default_paths
http.cert_store = store
end
...
end
そういえば、Java でも、Commons の HttpClient で同様の問題にぶち当たったことがある。あのときも、contrib
の EasySSLProtocolSocketFactory
を使う必要があったっけ。
もう、net/https を使うしかないのかな …