特定提供程序的 OpenSSL 失败



我们的生产(Heroku(和开发(本地(实例在访问https端点时一直在工作。但是,在过去的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)时,_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 实现的问题?

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

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

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

最新更新