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

mrz*_*asa 261 ruby ssl rubygems ruby-on-rails bundler

当我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.
Run Code Online (Sandbox Code Playgroud)

当我尝试手动安装gem时(by gem install multi_json -v '1.3.2')它可以工作.其他几个宝石也会出现同样的问题.我使用RVM(1.12.3),ruby 1.9.2,bundler 1.1.3.

怎么解决?

Wil*_*ill 308

更新

既然我已经从这个答案中挖掘出足够的业力,那么每个人都应该知道这应该已经解决了.

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

gem update --system
Run Code Online (Sandbox Code Playgroud)

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


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

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

通过用户Ownatik

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

source 'https://rubygems.org'

source 'http://rubygems.org'

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

  • 这不适合我.下面@fbernier提供的[链接](http://railsapps.github.com/openssl-certificate-verify-failed.html)为我修复了它. (6认同)
  • 这不起作用.运行它只提供当前安装的最新版本的输出.中止.还有其他想法吗? (5认同)
  • `gem update --system`失败并出现完全相同的证书错误:\ (2认同)

Stu*_*tuR 225

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

  • 我很惊讶这不是排名更高,这是最简单的快速解决方案. (14认同)
  • OMG的工作就像一个魅力!我在公司代理后面的Windows 7 x64上.非常感谢! (8认同)
  • 良好的临时解决方案......请注意以下内容:: RubyGems已配置为通过以下URL通过其历史记录为宝石提供服务:*http://gems.rubyforge.org(RubyGems 1.3.6及更早版本)*http:/ /rubygems.org(RubyGems 1.3.7到1.8.25)*https://rubygems.org(RubyGems 2.0.1和更新版本) (3认同)
  • Imho这甚至不应该被认为是一个有效的答案,因为它打开你的系统来攻击外部. (3认同)

Ale*_*kin 161

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

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

现在你准备好了gem update.

  • 非常简单的跨平台解决方案,允许RubyGems处理细节.尼斯. (5认同)
  • 是的,这应该是公认的答案;-) (2认同)
  • 这是应该被接受的,上面的答案并没有解释你需要先删除ssl源 (2认同)

cha*_*erx 116

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

rvm osx-ssl-certs update
Run Code Online (Sandbox Code Playgroud)


fbe*_*ier 55

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

  • 如果不接受SSL证书,则无法更新rubygems!在这里跑圈;) (3认同)

asf*_*ows 50

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

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

这将阻止Bundler在尝试安装时检查gem的SSL证书.

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

  • 删除ssl验证是临时解决方法,会打开安全漏洞.在这里阅读更多内容:https://github.com/rubygems/rubygems/commit/c7d6c6efd2a9e813eb538d805a6f5780437d7006 (5认同)
  • Windows上的`gem`也会搜索`%USERPROFILE%\.gemrc`. (3认同)

pet*_*ter 17

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

SET SSL_CERT_FILE="C:\users\<username>\cacert.pem"
Run Code Online (Sandbox Code Playgroud)

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

用您自己的用户名替换<username>.

  • 谢谢.永久修复就在这里.http://guides.rubygems.org/ssl-certificate-update/ (3认同)

Ala*_* H. 15

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

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

在RailsApps项目中提示这个技巧!

  • `rvm osx-ssl-certs更新所有`这就是诀窍!谢谢! (2认同)

dan*_*sia 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
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此处找到解决方案的链接.

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

顺便说一下,我没有必要在Ubuntu上触摸我的证书.

最重要的是,这不是一种解决方法.它将通过SSL下载宝石并且如果出现类似中间攻击中的人的问题则会失败,这比仅仅关闭安全性要好得多.


小智 7

您可以从curl的网站http://curl.haxx.se/ca/cacert.pem下载CA证书列表.

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

$ SSL_CERT_FILE=~/cacert.pem bundle install
Run Code Online (Sandbox Code Playgroud)

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


Rof*_*ers 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
Run Code Online (Sandbox Code Playgroud)

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

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

C:\>gem uninstall rubygems-update -x
Run Code Online (Sandbox Code Playgroud)


gen*_*hkg 5

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

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

证书验证失败

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

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

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

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

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

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

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