bundle安装失败,SSL证书验证错误

当我在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 install multi_json -v '1.3.2')它工作。同样的问题也发生在其他宝石上。我使用RVM (1.12.3), ruby 1.9.2, bundle 1.1.3。

如何解决?

195624 次浏览

同样的问题,但不同的宝石:

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成为可能

临时解决方案(Ownatik提到的):

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

这将防止捆绑程序在试图安装宝石时检查宝石的SSL证书。

对于*nix设备,'home path'意味着~/.gemrc。如果你愿意,你也可以创建/etc/gemrc。对于Windows XP, 'home path'意味着c:\Documents and Settings\All Users\Application Data\gemrc。对于Windows 7, C:\ProgramData\gemrc

更新

现在我已经从这个答案中得到了足够的报应,每个人都应该知道这应该被解决。

回复:via Ownatik再次bundle安装失败,SSL证书验证错误

gem update --system

我的答案仍然是正确的,如果最终不适合你,请参考下面的答案。


老实说,最好的临时解决办法就是

[…在你的gemfile中使用非ssl版本的rubygems作为临时的解决方案。

通过用户Ownatik

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

source 'https://rubygems.org'

source 'http://rubygems.org'

注意第二个版本是http而不是http<年代trong>年代

对于那些通过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和失败,如果有如果有一个人在中间的问题 攻击,这比仅仅关闭安全要好得多

在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 installsource 'https://rubygems.org'时就会发生这种情况。

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

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

这个问题现在应该得到解决。更新rubygems (gem update --system),确保openssl在你的操作系统上是最新版本,或者尝试以下提示,它仍然无法工作

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

如果你在mac上使用最新版本的RVM(~1.20),下面的命令适合我。

rvm osx-ssl-certs update

最简单的解决方案:

rvm pkg install openssl
rvm reinstall all --force

瞧!

您可以从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)

如果你使用RVM,这个问题的真正解决方案是:

  1. 更新rubygems: gem update --system
  2. 使用RVM刷新SSL certs: rvm osx-ssl-certs update all

RailsApps项目的这个技巧致敬!

在windows7上可以下载cacert。将环境变量SSL_CERT_FILE设置为您存储证书的路径,例如

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

或者你可以像ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"这样在脚本中设置变量

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

我得到了一个类似的错误。下面是我解决这个问题的方法:在您的路径目录中,检查Gemfile。将gemfile中的源文件编辑为http而不是https并保存它。这可能会在没有SSL证书颁发的情况下安装捆绑程序

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

然后在命令提示符中设置SSL_CERT_FILE

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

原因是古老的红宝石。您需要先使用非ssl源更新系统部分:

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

现在你已经准备好使用gem update了。

简单的复制粘贴指令这里给出关于.pem文件

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

证书验证失败

如果你读过前面的部分,你就会知道这意味着什么(如果你没有读过,你会感到非常羞愧)。

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

C:>gem哪个rubygems C: / Ruby21 / lib / ruby / 2.1.0 / rubygems.rb 现在,让我们定位这个目录。在同一个窗口中,输入直到文件扩展名的路径部分,但是使用反斜杠:

< p > C: >开始C: \ Ruby21 \ lib \ ruby \ 2.1.0 \ rubygems 这将在我们指定的目录中打开一个资源管理器窗口

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

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

它将与GeoTrustGlobalCA.pem等其他文件一起列出。

对于Windows机器,检查您的gem版本

gem --version

然后更新你的宝石如下:

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

现在,使用命令提示符:

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

现在,bundle安装将成功,没有SSL证书验证错误。

更详细的指令是在这里

这招对我很管用:

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

我能够追踪到这样一个事实,即rvm下载的二进制文件在OS X的OpenSSL中不能很好地发挥作用,这是旧的,不再被操作系统使用。

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

rvm reinstall --disable-binary 2.2

我对Windows的永久修复:

  1. 下载CACert,保存为C:\ruby\ssl_certs\GlobalSignRootCA.pemhttp://guides.rubygems.org/ssl-certificate-update/

  2. 创建名为"SSL_CERT_FILE"的系统变量,设置为C:\ruby\ssl_certs\GlobalSignRootCA.pem

  3. 重试:gem install bundler:

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

这个问题已经解决了

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

我不得不重新安装openssl:

brew uninstall --force openssl
brew install openssl

谢谢@亚历山大。Iljushkin:

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

在那之后,捆绑器仍然失败了,解决方案是:

gem install bundler

我最近才遇到这个问题,并遵循了概述的步骤在这里。您可能没有指向正确的OpenSSL证书。在运行:

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

而且

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

包完全运行!

下载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

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

export SSL_CERT_FILE=~/RootCert.pem

如果你正在使用rails-assets

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

最简单的修复方法是使用这个源代码,http://insecure.rails-assets.org。这已经在他们的主页中提到过。

对我来说,在遗留的windows系统和ruby 1.9版本上唯一有效的方法是下载cacert文件 http://guides.rubygems.org/ssl-certificate-update/ < / p >

然后在运行bundle install之前运行下面的命令

bundle config --global ssl_ca_cert /path/to/file.pem