当我在Centos 5.5上为我的Rails 3项目运行捆绑安装时,它失败了,出现了一个错误:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 
read server certificate B: certificate verify failed 
(https://bb-m.rubygems.org/gems/multi_json-1.3.2.gem)
An error occured while installing multi_json (1.3.2), and Bundler cannot continue.
Make sure that `gem install multi_json -v '1.3.2'` succeeds before bundling.

当我尝试手动安装gem(通过gem install multi_json -v '1.3.2')它工作。同样的问题也发生在其他宝石上。我使用RVM (1.12.3), ruby 1.9.2, bundle 1.1.3。

如何解决?


当前回答

在Ubuntu 12.04上,我得到了一个稍微不同的错误,尽管可能相关:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure (https://d2chzxaqi4y7f8.cloudfront.net/gems/activesupport-3.2.3.gem)
An error occured while installing activesupport (3.2.3), and Bundler cannot continue.
Make sure that `gem install activesupport -v '3.2.3'` succeeds before bundling.

当我在Gemfile中使用源文件“https://rubygems.org”运行bundle install时,就会发生这种情况。

这是Ubuntu 12.04上OpenSSL的一个问题。参见Rubygems第319期。

要解决这个问题,请在Ubuntu 12.04上运行apt-get update && apt-get upgrade来升级您的OpenSSL。

其他回答

如果你使用的是rails资产

如果您使用https://rails-assets.org/来管理您的资产,没有答案可以帮助您。即使转换为http也无济于事。

最简单的解决方法是使用这个源代码http://insecure.rails-assets.org。他们的主页上已经提到了这一点。

最简单的解决方案:

rvm pkg install openssl
rvm reinstall all --force

拖鞋!

需要注意的是,如果您正在从一个SSL证书受内部证书颁发机构信任的源获取宝石(或者您正在通过带有SSL检查的公司web代理连接到一个外部源),请将SSL_CERT_FILE env变量指向您的证书链。这很可能只需要将您的根证书从证书存储(macOS上的系统密钥链)导出到您的shell中可访问的位置,即:

export SSL_CERT_FILE=~/RootCert.pem

在Ubuntu 12.04上,我得到了一个稍微不同的错误,尽管可能相关:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure (https://d2chzxaqi4y7f8.cloudfront.net/gems/activesupport-3.2.3.gem)
An error occured while installing activesupport (3.2.3), and Bundler cannot continue.
Make sure that `gem install activesupport -v '3.2.3'` succeeds before bundling.

当我在Gemfile中使用源文件“https://rubygems.org”运行bundle install时,就会发生这种情况。

这是Ubuntu 12.04上OpenSSL的一个问题。参见Rubygems第319期。

要解决这个问题,请在Ubuntu 12.04上运行apt-get update && apt-get upgrade来升级您的OpenSSL。

对于那些通过RVM安装了ruby并想要快速修复的人(更喜欢不按Bruno的要求阅读),请尝试以下方法:

rvm remove 1.9.x (or whatever version of ruby you are using)
rvm pkg install openssl
rvm install 1.9.2 --with-openssl-dir=$rvm_path/usr

要了解更多细节,这里是我找到解决方案的链接。

http://railsapps.github.com/openssl-certificate-verify-failed.html

顺便说一句,我在Ubuntu上不需要修改我的证书。

最重要的是,这不是一个变通办法。它将下载宝石通过 SSL和失败,如果有如果有一个人在中间的问题 这比关闭安全系统强多了。