首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >OpenSSL::SSL::SSL错误: SSL_connect returned=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败

OpenSSL::SSL::SSL错误: SSL_connect returned=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败
EN

Stack Overflow用户
提问于 2012-05-24 05:54:38
回答 6查看 32.3K关注 0票数 18

我使用RVM在Ubuntu 12.04上安装Ruby 1.9.3,方法是

代码语言:javascript
复制
rvm pkg install openssl
rvm install 1.9.3 --with-openssl-dir=$rvm_path/usr

然后,当我尝试运行类似以下内容的东西时:

代码语言:javascript
复制
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中解决它呢?

谢谢你的帮助。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-24 08:27:53

如果未使用本机OpenSSL库正确设置默认的“OpenSSL目录”,则有时会发生这种情况。open-uri使用OpenSSL::X509::Store#set_default_paths告诉OpenSSL在OpenSSL目录中查找包含OpenSSL默认信任的受信任根证书的文件。

在您的示例中,此查找将失败。您可以通过设置一个环境变量来使其成功,该环境变量覆盖默认设置,并告诉OpenSSL查看该目录:

代码语言:javascript
复制
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或任何最适合您的情况的文件中定义导出。

票数 25
EN

Stack Overflow用户

发布于 2013-03-06 02:52:17

添加‘认证’宝石到您的Gemfile。

更多信息:https://rubygems.org/gems/certified

票数 11
EN

Stack Overflow用户

发布于 2012-06-15 05:09:39

安装了openssl的rvm中缺少cacert.pem文件。

代码语言:javascript
复制
$ cd $rvm_path/usr/ssl
$ sudo curl -O http://curl.haxx.se/ca/cacert.pem
$ sudo mv cacert.pem cert.pem
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10728436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档