OpenURIがhttpsのオレオレ証明書でOpenSSLエラーを出す場合
RubyのOpenURIを使用していて、httpsのオレオレ証明書を使っているサイトを開く場合。
何も考えないと、sslのエラーが出て止まってしまう。
~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/net/http.rb:785:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError) from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/net/http.rb:785:in `block in connect' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/timeout.rb:44:in `timeout' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/timeout.rb:87:in `timeout' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/net/http.rb:785:in `connect' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/net/http.rb:742:in `do_start' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/net/http.rb:731:in `start' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:307:in `open_http' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:770:in `buffer_open' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:201:in `catch' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:672:in `open' from ~/.rvm/rubies/ruby-head/lib/ruby/1.9.1/open-uri.rb:33:in `open'
そこで
require 'open-uri' open(url) do |f| ...
ではなくて
require 'open-uri' open(url,"r",{:ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE}) do |f| ...
とすればsslの証明書エラーを無視するようになる。
:ssl_verify_modeのオプションは1.9(1.9.1?)から追加された様子。