SSL で自己証明書を使用している URL には open-uri でアクセスできない

2006/12/29 11:38am

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 で同様の問題にぶち当たったことがある。あのときも、contribEasySSLProtocolSocketFactory を使う必要があったっけ。

もう、net/https を使うしかないのかな …