捆绑安装失败,出现SSL证书验证错误

时间:2012-04-20 12:13:07

标签: ruby-on-rails ruby ssl rubygems bundler

当我在Centos 5.5上为我的Rails 3项目运行bundle install时,它失败并出现错误:

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,bundler 1.1.3。

如何解决?

28 个答案:

答案 0 :(得分:307)

<强>更新

既然我已经因为这个答案而开采了足够的业力,每个人都应该知道这应该是固定的。

re:再次通过Ownatik bundle install fails with SSL certificate verification error

gem update --system

我的回答仍然正确,如果最终不适合你,请留下以供参考。


老实说,最好的临时解决方案是

  

[...]在gemfile中使用非ssl版本的rubygems作为临时解决方法。

通过用户Ownatik

他们的意思是在rails应用程序目录中Gemfile的顶部更改

source 'https://rubygems.org'

source 'http://rubygems.org'

请注意,第二个版本是http而不是http s

答案 1 :(得分:223)

将ssl gem源替换为非ssl作为临时解决方案:

答案 2 :(得分:161)

原因是旧的rubygems。您需要先使用非ssl源更新系统部件:

gem update --system --source http://rubygems.org/(使用非ssl连接临时更新系统部分)。

现在您已准备好使用gem update

答案 3 :(得分:114)

如果您使用的是mac并使用最新版本的RVM(~1.20),则以下命令对我有效。

rvm osx-ssl-certs update

答案 4 :(得分:55)

现在应该修复此问题。更新rubygems(gem update --system),确保openssl是您操作系统上的最新版本,或者尝试这些提示仍然无效:http://railsapps.github.com/openssl-certificate-verify-failed.html

答案 5 :(得分:49)

临时解决方案(由Ownatik提及):

在您的主路径中创建或修改名为.gemrc的文件,包括行:ssl_verify_mode: 0

这将阻止捆绑器在尝试安装时检查宝石的SSL证书。

对于* nix设备,&#39;家庭路径&#39;表示~/.gemrc。如果您愿意,也可以创建/etc/gemrc。对于Windows XP,&#39;主路径&#39;表示c:\Documents and Settings\All Users\Application Data\gemrc。对于Windows 7,C:\ProgramData\gemrc

答案 6 :(得分:16)

在windows7上,您可以从here下载cacert.pem文件,并将environementvariable SSL_CERT_FILE设置为存储证书的路径,例如

SET SSL_CERT_FILE="C:\users\<username>\cacert.pem"

或者您可以在脚本中设置变量,例如ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"

替换&lt;用户名&gt;用你自己的用户名。

答案 7 :(得分:15)

如果您正在使用RVM,那么这个问题的真正解决方案是:

  1. 更新rubygems:gem update --system
  2. 使用RVM刷新SSL证书:rvm osx-ssl-certs update all
  3. 帽子提示this tip on the RailsApps project

答案 8 :(得分:7)

对于那些通过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并失败   攻击比仅仅关闭安全性要好得多。

答案 9 :(得分:6)

这已经修复

http://guides.rubygems.org/ssl-certificate-update/

现在RubyGems 2.6.x已经发布,你可以手动更新到这个版本。

下载https://rubygems.org/downloads/rubygems-update-2.6.7.gem

请将文件下载到以后可以指向的目录中(例如,硬盘C的根目录):

现在,使用命令提示符:

C:\>gem install --local C:\rubygems-update-2.6.7.gem
C:\>update_rubygems --no-ri --no-rdoc

在此之后,gem --version应报告新的更新版本。

您现在可以安全地卸载rubygems-update gem:

C:\>gem uninstall rubygems-update -x

答案 10 :(得分:6)

您可以从curl的网站http://curl.haxx.se/ca/cacert.pem

下载CA证书列表

然后设置SSL_CERT_FILE环境变量以告诉Ruby使用它。例如,在Linux中:

$ SSL_CERT_FILE=~/cacert.pem bundle install

(参考:https://gist.github.com/fnichol/867550

答案 11 :(得分:5)

此处给出的关于.pem文件的简单复制粘贴说明

https://gist.github.com/luislavena/f064211759ee0f806c88

证书验证失败

  

如果你已经阅读过前面的章节,你会知道这意味着什么(如果你没有,那就羞辱你了。)

     

我们需要下载AddTrustExternalCARoot-2048.pem。   打开命令提示符并输入:

     

C:&gt;宝石哪个rubygems   C:/Ruby21/lib/ruby/2.1.0/rubygems.rb   现在,让我们找到该目录。在同一窗口中,输入路径部分直到文件扩展名,但使用反斜杠:

     

C:&gt;启动C:\ Ruby21 \ lib \ ruby​​ \ 2.1.0 \ ruby​​gems   这将在我们指示的目录中打开一个资源管理器窗口。

     

第3步:复制新的信任证书

     

现在,找到ssl_certs目录并复制我们从上一步中获得的.pem文件。

     

它将与其他文件一起列出,例如GeoTrustGlobalCA.pem。

答案 12 :(得分:4)

同样的问题,但在这里有不同的宝石:

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

暂时解决方案:gem install builder -v '3.0.0'可以继续bundle install

答案 13 :(得分:4)

这是您如何在Windows上解决此问题:

下载.perm文件,然后在命令提示符中设置SSL_CERT_FILE

https://gist.github.com/fnichol/867550

答案 14 :(得分:4)

最简单的解决方案:

rvm pkg install openssl
rvm reinstall all --force

瞧!

答案 15 :(得分: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中使用bundle install运行source 'https://rubygems.org'时会发生这种情况。

这是Ubuntu 12.04上OpenSSL的问题。请参阅Rubygems issue #319

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

答案 16 :(得分:3)

我能够跟踪这一事实,即rvm下载的二进制文件与OS X的OpenSSL不一致,后者已经过时且不再被操作系统使用。

我的解决方案是在通过rvm安装Ruby时强制编译:

rvm reinstall --disable-binary 2.2

答案 17 :(得分:3)

我对Windows的永久修复:

  1. CACert

  2. 下载http://guides.rubygems.org/ssl-certificate-update/,另存为C:\ruby\ssl_certs\GlobalSignRootCA.pem
  3. 创建名为“ SSL_CERT_FILE ”的系统变量,设置为C:\ruby\ssl_certs\GlobalSignRootCA.pem

  4. 再试一次:gem install bundler

  5. C:\gem sources
    *** CURRENT SOURCES ***
    https://rubygems.org/
    
    C:\gem install bundler
    Fetching: bundler-1.13.5.gem (100%)
    Successfully installed bundler-1.13.5
    1 gem installed
    

答案 18 :(得分:3)

致@ Alexander.Iljushkin:

gem update --system --source http://rubygems.org/

之后,捆绑包仍然失败,解决方法是:

gem install bundler

答案 19 :(得分:2)

我遇到了类似的错误。以下是我解决这个问题的方法:在路径目录中,检查Gemfile。将gemfile中的源编辑为http而不是https并保存。这可能会在没有SSL证书问题的情况下安装捆绑包.l

答案 20 :(得分:2)

对于Windows机器,请使用

检查您的gem版本
--theirs

然后按照以下步骤更新您的宝石:

请将文件下载到以后可以指向的目录中(例如,硬盘驱动器的根目录C:)

现在,使用命令提示符:

gem --version

现在,捆绑安装将成功,不会出现SSL证书验证错误。

更详细的说明是here

答案 21 :(得分:1)

这对我有用:

  • https://rubygems.org/pages/download
  • 下载最新的宝石
  • 使用gem install --local [path to downloaded gem file]
  • 安装gem
  • 使用update_rubygems
  • 更新宝石
  • 使用gem --version
  • 检查您是否使用最新的宝石版本

答案 22 :(得分:1)

下载rubygems-update-2.6.7.gem

现在,使用命令提示符:

C:\>gem install --local C:\rubygems-update-2.6.7.gem
C:\>update_rubygems --no-ri --no-rdoc

在此之后,gem --version应报告新的更新版本。

您现在可以安全地卸载rubygems-update gem:

C:\>gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.6.7

答案 23 :(得分:1)

我刚刚遇到这个问题,并按照here概述的步骤进行了操作。您可能没有指向正确的OpenSSL证书。跑完后:

rvm osx-ssl-certs status all
rvm osx-ssl-certs update all

export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt

捆绑完了!

答案 24 :(得分:1)

我不得不重新安装openssl:

brew uninstall --force openssl
brew install openssl

答案 25 :(得分:0)

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

export SSL_CERT_FILE=~/RootCert.pem

答案 26 :(得分:0)

如果您正在使用rails-assets

如果您使用https://rails-assets.org/来管理资产,则没有任何答案可以帮助您。即使转换为http也不会有帮助。

最简单的解决方法是使用此源http://insecure.rails-assets.org。这已在他们的homepage中提及。

答案 27 :(得分:0)

在遗留的Windows系统和ruby 1.9版本上唯一对我有用的是从中下载cacert文件 http://guides.rubygems.org/ssl-certificate-update/

然后在运行bundle install

之前运行以下命令
bundle config --global ssl_ca_cert /path/to/file.pem