我们的生产(Heroku)和开发(本地)实例在访问https
端点时一直在工作。但是,在过去的两天内,我们开始遇到可怕的OpenSSL错误:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
我已经在StackOverflow和http://railsapps.github.io/openssl-certificate-verify-failed.html上阅读了很多OpenSSL失败的帖子。
我已更新到最新的OpenSSL并通过运行以下内容确认:
ruby -ropenssl -e 'p OpenSSL::OPENSSL_VERSION'
"OpenSSL 1.0.1e 11 Feb 2013"
但是,我仍然收到此错误:
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
当我致电hash = JSON.parse(open(_url).read)
时,_url
指向https
个终点。
我似乎没有访问某些提供商的问题。例如,当我发出:curl -I https://d2chzxaqi4y7f8.cloudfront.net/gems/rake-0.9.2.2.gem
时,它似乎有效。
我也在irb
中尝试了这一点,它似乎有效:
require 'open-uri'
open 'https://google.com'
=> #<File:/var/folders/dv/s_2dq32n0ggcn65kn61jtmc80000gn/T/open-uri20130630-887-y2cg2q>
这是端点提供商需要解决的问题,还是我的本地和生产OpenSSL实现的东西?
答案 0 :(得分:0)
证书验证失败表示您的Ruby实例无法找到将端点证书链接到其知道的受信任根的方法。这可能是一些不同的事情:
要缩小范围,您可以尝试通过网络浏览器加载端点。你得到一个不受信任的错误吗?如果是,请与您的提供商联系。如果没有,您需要查看证书并查看它使用的根。然后,您需要将其添加到受信任证书的Ruby列表中(根据您编译它的方式以及在哪个平台上来源不同)。