具体来说,这个(非代理)代码有效:
uri = URI.parse('https://www.ibm.com') http = Net::http.new(uri.host,uri.port,nil) http.use_ssl = true http.start { |agent| agent.get(uri.path) }
并且此(代理)代码因“证书验证失败”错误而失败:
uri = URI.parse('https://www.ibm.com') http = Net::http.new(uri.host,"localhost",8888) http.use_ssl = true http.start { |agent| agent.get(uri.path) }
这个谜题
在当前版本的Ruby / OpenSSL中通过代理时,仅出现错误.特别是:
>不通过代理时没有错误,这使我认为本地证书是有效的.
>使用firefox或curl -v https://www.ibm.com/进行代理时没有错误,这使我认为Charles证书有效.
>早期版本的Ruby / OpenSSL上的代理没有错误(请参阅下面的两个环境).
所有这些让我怀疑一个真正的Ruby BUG,而不是我的证书的问题,但我很乐意以其他方式显示.
当前的环境
我正在观察这个环境的错误:
$system_profiler SPSoftwareDataType | grep "System Version" System Version: OS X 10.8.5 (12F45)$ruby --version ; openssl version ; gem List | grep httpruby 2.0.0p247 (2013-06-27) [x86_64-darwin12.4.0]OpenSSL 1.0.1e 11 Feb 2013http-cookie (1.0.2)http_router (0.10.2)net-http-digest_auth (1.4)net-http-persistent (2.9)ntlm-http (0.1.1)
以前的环境
稍微旧版本的ruby / OpenSSL不会出现该错误:
$ruby --version ; openssl version ; gem List | grep httpruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin10.8.0]OpenSSL 0.9.8y 5 Feb 2013http_router (0.11.0,0.10.2)httpauth (0.2.0)net-http-digest_auth (1.2.1)net-http-persistent (2.8)ntlm-http (0.1.1)解决方法 这里发生的事情是Charles无法为您提供“ https://www.ibm.com”的有效证书,因为您设置Charles的证书(或者如果Charles创建自己的证书),它不能用于“www.ibm.com”名称并由受信任的证书颁发机构认证.这就是如果客户端验证证书,连接失败的原因,如果您跳过验证,则连接失败
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
它可能适用于旧版本的ruby,因为“net / https”已经过调整以验证默认情况下,证书仅在最近
总结以上是内存溢出为你收集整理的ruby – SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证仅在代理时失败全部内容,希望文章能够帮你解决ruby – SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证仅在代理时失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)