Ruby企业版&x2B;OpenSSL->&引用;“证书验证失败”;

Ruby企业版&x2B;OpenSSL->&引用;“证书验证失败”;,ruby,ssl,openssl,ruby-enterprise-edition,Ruby,Ssl,Openssl,Ruby Enterprise Edition,我正在做一个噩梦,试图让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:

我正在做一个噩梦,试图让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下运行良好。如前所述,我尝试重新打包OpenSSL并安装ree来链接,但没有效果。我使用的是OS X 10.6.7,但我发现我们的OpenSolaris REE安装也存在同样的问题


如果您有任何建议,我们将不胜感激。

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


为子孙后代:


OP的问题通过下载并复制到
/opt/local/etc/openssl/cert.pem

解决了。是的,我一直试图将证书添加到/opt/local/etc/openssl目录,但无法说服ruby看到它们。不太确定我缺少了什么。@jdelStrother:您是否使用该目录中的
c_rehash
实用程序来创建哈希链接?那是必要的。我应该能够从中获取cacerts.pem,例如,将它复制到/opt/local/etc/openssl,运行c_rehash来创建符号链接,它应该开始工作……对吗?或者我是否需要以某种方式将cacert.pem拆分为单独的证书?@jdelStrother:OpenSSL可以有一个默认的CA路径和/或一个默认的CA文件
cacert.pem
将用于后者-您只需将其重命名(或创建指向它的符号链接)为REE用于默认CAfile的单个名称
/opt/local/etc/openssl
可能是默认的CApath,在这种情况下,您需要断开的证书-您可以从中获取这些证书。感谢关于CAfile vs CApath的指针-我终于意识到它实际上并没有搜索该目录中的所有证书,因此它需要一个特定的名称。我认为,将cacert.pem包移动到/opt/local/etc/openssl/cert.pem最终解决了问题。