【问题标题】:Ruby Enterprise Edition + OpenSSL -> "certificate verify failed"Ruby 企业版 + OpenSSL ->“证书验证失败”
【发布时间】:2011-08-29 13:51:41
【问题描述】:

试图让 REE 与 SSL 很好地配合使用,我有点做噩梦。

每当我连接到 SSL 站点时:

require 'open-uri'
open 'https://www.google.com'

我收到以下错误:

/Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/net/http.rb:586:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/net/http.rb:586:in `connect'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/net/http.rb:553:in `do_start'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/net/http.rb:542:in `start'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:242:in `open_http'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:616:in `buffer_open'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:162:in `catch'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:518:in `open'
from /Users/jon/.rvm/rubies/ree-1.8.7-2011.03/lib/ruby/1.8/open-uri.rb:30:in `open'

它在 Ruby 1.9.2 或常规 1.8.7 下运行良好。如on the RVM OpenSSL page 所述,我尝试重新打包 OpenSSL 并安装 ree 以链接它,但它没有效果。我在 OS X 10.6.7 上,但在安装 OpenSolaris REE 时遇到了同样的问题。

任何建议将不胜感激。

【问题讨论】:

    标签: ruby ssl openssl ruby-enterprise-edition


    【解决方案1】:

    听起来它没有正确获取受信任 CA 证书的位置 - REE 必须具有不同的编译默认位置,这对您的系统不正确。


    为了后代:

    通过下载http://curl.haxx.se/ca/cacert.pem复制到/opt/local/etc/openssl/cert.pem解决了OP的问题。

    【讨论】:

    • 是的,我一直在尝试将证书添加到 /opt/local/etc/openssl 目录,但无法说服 ruby​​ 看到它们。不太清楚我错过了什么。
    • @jdelStrother:您是否使用过该目录中的c_rehash 实用程序来创建哈希链接?这是必要的。
    • 是的。我应该能够从例如curl.haxx.se/ca/cacert.pem 获取 cacerts.pem,将其复制到 /opt/local/etc/openssl,运行 c_rehash 以创建符号链接,它应该开始工作......对吗?还是我需要以某种方式将 cacert.pem 分解为单独的证书?
    • @jdelStrother:OpenSSL 可以有一个默认的 CA path,和/或一个默认的 CA filecacert.pem 用于后者 - 您只需将其重命名(或创建指向它的符号链接)为 REE 用于默认 CAfile 的单个名称。 /opt/local/etc/openssl 可能是默认 CApath,在这种情况下,您需要拆分证书 - 您可以从 Debian ca-certificates package source file 获取这些证书。
    • 感谢有关 CAfile 与 CApath 的指针 - 我终于意识到它实际上并没有搜索该目录中的所有证书,因此它需要一个特定的名称。我认为将 cacert.pem 包移动到 /opt/local/etc/openssl/cert.pem 终于解决了问题。
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2012-05-26
    • 2012-09-26
    • 2023-03-31
    • 2011-12-27
    • 2020-09-18
    • 2014-03-28
    • 2016-01-14
    相关资源
    最近更新 更多