软件包安装失败,并显示SSL证书验证错误


264

当我bundle install在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,bundler 1.1.3。

如何解决?


面对同样的问题。但是带有另一个gem:Gem :: RemoteFetcher :: FetchError:SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证失败(bb-m.rubygems.org/gems/activeresource-3.2.3.gem
Sathish

4
我在相同的情况下遇到相同的错误。考虑到其他响应,我怀疑这是服务器端问题。
asfallows

我在Rails 5中遇到了类似的问题。通过添加source "https://rubygems.org''Gemfile并运行'gem update --system'来解决此问题。您可以在此处找到更多信息。
Nesha Zoric,

Nesha,该修复程序对我有用。谢谢!
马丁·马力诺

Answers:


310

更新资料

既然我已经从这个答案中充分挖掘了..err,那么每个人都应该知道应该已经解决了这个问题。

回复:再次通过Ownatik 捆绑安装失败,出现SSL证书验证错误

gem update --system

我的答案仍然是正确的,如果最终对您不起作用,请留在下面以供参考。


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

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

通过用户Ownatik

它们的意思是在GemfileRails应用程序目录更改的顶部

source 'https://rubygems.org'

source 'http://rubygems.org'

需要注意的是第二个版本是http而不是http 小号


1
我接受这个答案,因为那是我一开始所做的事情。后来我更改了部署策略。现在,我将应用程序捆绑在另一台服务器上运行,然后将其(vendor目录中包含gems )复制到我在问题中提到的服务器上。
mrzasa 2012年

6
这对我不起作用。@fbernier下面提供的链接为我修复了它。
Scott Fister

5
这行不通。运行此命令仅能提供Latest version currently installed. Aborting. 其他想法的输出?
Matt Huggins

1
在改变来源方面,对于像我这样的新人们。我将指定此文件位于您的应用程序目录中。我在railsinstaller目录中寻找它。无论如何,我更改了源,终于可以了。我尝试运行更新时遇到证书错误:(
布赖恩

2
gem update --system失败,并出现完全相同的证书错误:\
BlueRaja-Danny Pflughoeft 2014年

226

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


8
OMG像魅力一样运作!我在公司代理后面的Windows 7 x64上。非常感谢!
2013年

14
令我惊讶的是,它没有获得更高的排名,这是最简单的快速修复方法。
hwatkins 2013年

3
高温解决方案...请注意以下几点:: RubyGems已配置为通过其历史记录中的以下URL提供宝石:* gems.rubyforge.org(RubyGems 1.3.6和更早版本)* rubygems.org (RubyGems 1.3。 7至1.8.25)* rubygems.org (RubyGems 2.0.1及更高版本)
beauXjames 2013年

1
Windows 8上对我来说最快的解决方案
Tisch 2014年

3
恕我直言,这甚至不应该被视为有效的答案,因为它使您的系统容易受到来自外部的攻击。
rubiii

160

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

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

现在您可以使用了gem update


5
跨平台的真正简单的解决方案,允许RubyGems处理细节。真好
zrisher 2014年

2
这是应该被接受的答案,上面的答案并不能说明您需要首先删除ssl源
Ephraim 2015年

1
谢谢-这是票。如果在添加或删除源时收到“不在缓存中”消息,请尝试使用斜线或不使用斜线。它必须完全匹配。
Timothy Lee Russell

1
我搜索了很多解决方案。这是一种像魅力一样的作品。谢谢!应该选择这作为真正的解决方案。
BerkerYüceer2015年

1
谢谢!!我同意其他人的看法,这应该是可接受的答案,因为它不会导致您通过纯HTTP来获取gem。
亚历山大

117

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

rvm osx-ssl-certs update

谢谢!在Mac OSX 10.8.5上为我工作
Matthew Blancarte 2013年

谢谢,也为我工作。我正在尝试安装CocoaPods。rvm 1.22.15,OS X 10.8.5
Logan Moseley

1
错误消息“ ... see bit.ly/ruby-ssl”中也指出了这一点。
IAmNaN

谢谢!为我工作!\ o /
ValterJúnior2015年

55

现在应该解决此问题。更新rubygems(gem update --system),确保openssl在您的操作系统上为最新版本,或尝试以下仍无法使用的提示:http : //railsapps.github.com/openssl-certificate-verify-failed.html


1
还需要更新捆绑软件以使其工作(rubygems 2.0.3 +捆绑软件1.3.2 + cygwin openssl 1.0.1e在winxp上对我有效)。
fakeleft 2013年

我必须从1.3.0更新,现在是1.3.4,https不再抛出错误:bundler-1.3.0 / lib / bundler / vendor / net / http / persistent / ssl_reuse.rb:70:在“连接”中:SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器密钥交换B:错误的ecpoint(OpenSSL :: SSL :: SSLError)
Jon Kern

3
如果不接受SSL证书,则无法更新rubygems!在这里圈转;)
kap

50

临时解决方案(由Ownatik暗示):

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

这将防止捆绑程序在尝试安装gem时检查其SSL证书。

对于* nix设备,“主路径”表示~/.gemrc。您也可以根据需要创建/etc/gemrc。对于Windows XP,“主路径”表示c:\Documents and Settings\All Users\Application Data\gemrc。对于Windows 7,C:\ProgramData\gemrc


3
%USERPROFILE%\.gemrcgem在Windows上也被搜索。
ROMULO Ceccon

1
Windows 8的推荐文件位置?
user1318135

6
删除SSL验证是暂时的解决方法,它会造成安全漏洞。在此处了解更多信息:github.com/rubygems/rubygems/commit/…–
mrm

这对我来说很有用;在公司防火墙后面,限制所有压缩文件,但允许通过https进行压缩。
mydoghasworms

未尝试使用此解决方案,但当我将此内容添加到以下内容时,我的情况也有效~/.gemrc:sources: - http://rubygems.org
ArturKäpp2014年

18

在Windows7上,您可以从此处下载cacert.pem文件,并将环境变量SSL_CERT_FILE设置为存储证书的路径,例如

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

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

将<username>替换为您自己的用户名。


3
谢谢。永久修复程序在这里。guides.rubygems.org/ssl-certificate-update
Maheshkumar,2015年

这是正确的永久性解决方案,避免使用不安全的http源。
Dio Phung

15

如果使用的是RVM,则此问题的真正解决方案是:

  1. 更新红宝石: gem update --system
  2. 使用RVM刷新SSL证书: rvm osx-ssl-certs update all

帽尖到这个技巧在RailsApps项目


1
rvm osx-ssl-certs update all对我来说很好。不需要执行步骤
1。– DMH


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下载gem,如果出现类似中间人攻击的问题,则该失败将失败,这比关闭安全性要好得多。


您链接到的页面有一个“替代方法”(首先),然后是适当的解决方案。如果您的回答说得更清楚一点会更好。不过,使用CA证书(通过cacert.pem$rvm_path/usr/ssl)确实是正确的方法。
布鲁诺

1
Bruno,解决方案可能会有所不同,具体取决于用户使用的Unix风格。看起来有必要阅读链接。
danielrussia 2012年

我只是在谈论页面上的“变通办法”(:ssl_verify_mode: 0,它打开了问题)与下面的3个解决方案中的任何一个的区别,这是解决此问题的正确方法。
布鲁诺

@Bruno,我已经修改了我的文章,如果您看到改进的可能性,请添加评论或编辑Wiki。
Daniel Kehoe 2012年

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

5

此处给出有关.pem文件的简单复制粘贴指令

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

证书验证失败

如果您已经阅读了前面的部分,那么您将了解这意味着什么(如果您没有的话,可耻>)。

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

C:> gem ruby​​gems C:/Ruby21/lib/ruby/2.1.0/rubygems.rb现在,让我们找到该目录。在同一窗口中,输入文件扩展名之前的路径部分,但改用反斜杠:

C:>启动C:\ Ruby21 \ lib \ ruby​​ \ 2.1.0 \ ruby​​gems这将在我们指定的目录内打开一个Explorer窗口。

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

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

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


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


7
您也可以在gemfile中使用rubygems的非SSL版本作为临时解决方法。
fbernier 2012年

1
我做到了,而且有效。就目前而言,这是一个足够的解决方案。
mrzasa 2012年

我在这里有同样的问题。那么@Ownatik如何使用rubygems的ssl版本?
Zeck 2012年

4

最简单的解决方案:

rvm pkg install openssl
rvm reinstall all --force

瞧!


2
这实际上对我的系统有什么作用?
布拉德利洪水


4

我对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

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.

当我运行它发生bundle installsource 'https://rubygems.org'在Gemfile中。

这是Ubuntu 12.04上的OpenSSL问题。参见Rubygems问题#319

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


3

我可以追溯到以下事实:rvm下载的二进制文件无法在OS X的OpenSSL上很好地使用,因为它很旧并且不再被OS使用。

对我来说,解决方案是在通过rvm以下方式安装Ruby时强制进行编译:

rvm reinstall --disable-binary 2.2

这对我有用。您需要使用所用的红宝石版本替换“ 2.2”
Josh

3

感谢@ Alexander.Iljushkin:

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

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

gem install bundler


2

我遇到了类似的错误。这是我解决此问题的方法:在您的路径目录中,检查Gemfile。将gemfile中的源代码编辑为http而不是https并保存。这可能会安装捆绑程序而没有SSL证书问题。


2

对于Windows计算机,请使用以下命令检查您的gem版本:

gem --version

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

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

现在,使用命令提示符:

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

现在,捆绑安装将成功完成,而不会发生SSL证书验证错误。

更详细的说明在这里



1

我不得不重新安装openssl:

brew uninstall --force openssl
brew install openssl

1

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

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

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

捆绑完成了!


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

1

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

export SSL_CERT_FILE=~/RootCert.pem

0

如果您正在使用 rails-assets

如果您以前是https://rails-assets.org/用来管理资产的,那么答案将无济于事。即使转换为http也无济于事。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.