0

https我们的生产(Heroku)和开发(本地)实例在访问端点时一直在工作。但是,在过去 2 天内,我们开始收到可怕的 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)的位置时。_urlhttps

我似乎在访问某些提供商时没有问题。例如,当我发出: 时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 的问题?

4

1 回答 1

0

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

  • 端点可能已更改证书提供者,并且它们的新来源不在默认信任中。
  • 端点可能没有安装正确的中间体。
  • 端点上可能有一个不受信任的证书。

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

于 2013-06-30T22:21:18.730 回答