【发布时间】:2014-02-05 06:36:50
【问题描述】:
考虑以下代码:
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)上,它都会引发以下异常:
OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=unknown state
在最后一行。
将 verify_mode 更改为 OpenSSL::SSL::VERIFY_PEER 会给出错误提示,尽管进行了设置,但它仍在尝试验证证书。
如何说服 ruby 忽略无效证书并进行连接?
【问题讨论】: