我使用RVM在Ubuntu 12.04上安装Ruby 1.9.3,方法是
rvm pkg install openssl
rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr
然后,当我尝试运行类似以下内容的东西时:
require 'open-uri'
open('https://www.google.com/')
我得到了错误:OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
我该如何解决这个问题?我有很多类似的线程,人们在OSX中遇到了这个问题,但是我如何在Ubuntu中解决它呢?
谢谢你的帮助。
发布于 2012-05-24 08:27:53
如果未使用本机OpenSSL库正确设置默认的“OpenSSL目录”,则有时会发生这种情况。open-uri使用OpenSSL::X509::Store#set_default_paths
告诉OpenSSL在OpenSSL目录中查找包含OpenSSL默认信任的受信任根证书的文件。
在您的示例中,此查找将失败。您可以通过设置一个环境变量来使其成功,该环境变量覆盖默认设置,并告诉OpenSSL查看该目录:
export SSL_CERT_FILE=/etc/pki/tls/cert.pem
这是我的Fedora1664位上的根CA包的默认位置,其他常用的位置是/ etc /ssl/ CA -bundle.crt等。在您的示例中,RVM使用的OpenSSL库位于$rvm_path/usr中,因此您应该在那里查找适合默认根CA文件的候选文件。正确设置环境变量后,对open-uri的调用将会成功。
要使环境变量成为永久变量,请使用通常的方法,例如在.bashrc、/etc/profile或任何最适合您的情况的文件中定义导出。
发布于 2013-03-06 02:52:17
添加‘认证’宝石到您的Gemfile。
发布于 2012-06-15 05:09:39
安装了openssl的rvm中缺少cacert.pem文件。
$ cd $rvm_path/usr/ssl
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ sudo mv cacert.pem cert.pem
https://stackoverflow.com/questions/10728436
复制相似问题