OpenSSL对特定提供商失败了吗?

时间:2013-06-30 17:24:41

标签: ruby-on-rails-3 openssl

我们的生产(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实现的东西?

1 个答案:

答案 0 :(得分:0)

证书验证失败表示您的Ruby实例无法找到将端点证书链接到其知道的受信任根的方法。这可能是一些不同的事情:

  • 端点可能已更改证书提供程序,并且其新来源不在默认信任中。
  • 端点可能没有安装适当的中间体。
  • 端点上可能有不受信任的证书。

要缩小范围,您可以尝试通过网络浏览器加载端点。你得到一个不受信任的错误吗?如果是,请与您的提供商联系。如果没有,您需要查看证书并查看它使用的根。然后,您需要将其添加到受信任证书的Ruby列表中(根据您编译它的方式以及在哪个平台上来源不同)。