如何使用最新版本的Ruby连接到具有无效证书的https服务器

请考虑以下代码:

require 'net/https' uri = URI.parse("https://host/index.html") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(uri.path) response = http.request(request) 

其中https://host/index.html是服务器上的证书无效的有效地址。

在旧版本的ruby(特别是1.8.7-p334和1.9.2-p180)上,这段代码运行正常。 在所有最新版本(1.8.7-p352,1.9.2-p290和1.9.3-p0)中,它抛出以下exception:

 OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=unknown state 

在最后一行。

将verify_mode更改为OpenSSL::SSL::VERIFY_PEER确实提供了错误,表明它正在尝试validation证书,而不管设置如何。

如何说服ruby忽略无效证书并连接?

 uri = URI("https://host/index.html") req = Net::HTTP::Get.new(uri.path) res = Net::HTTP.start( uri.host, uri.port, :use_ssl => uri.scheme == 'https', :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |https| https.request(req) end 
 require 'nokogiri' require 'open-uri' require 'net/https' @doc = Nokogiri::HTML(open(my_url, :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE))