265

当我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 install multi_json -v '1.3.2')安装 gem 时,它可以工作。其他几个宝石也会出现同样的问题。我使用 RVM (1.12.3)、ruby 1.9.2、bundler 1.1.3。

如何解决?

4

28 回答 28

313

更新

现在我已经从这个答案中挖掘了足够多的业力,每个人都应该知道这应该已经解决了。

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

gem update --system

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


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

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

通过用户 Ownatik

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

source 'https://rubygems.org'

source 'http://rubygems.org'

注意第二个版本是 http 而不是http

于 2012-04-22T01:28:23.727 回答
230

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

于 2013-08-08T15:28:36.147 回答
162

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

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

现在您可以使用gem update.

于 2014-12-12T15:42:18.923 回答
118

如果您在 Mac 上使用最新版本的 RVM(~1.20),以下命令对我有用。

rvm osx-ssl-certs update
于 2013-10-02T18:03:08.217 回答
55

这个问题现在应该得到解决。更新 ruby​​gems ( gem update --system),确保 openssl 在您的操作系统上是最新版本,或者尝试以下提示它仍然无法正常工作:http ://railsapps.github.com/openssl-certificate-verify-failed.html

于 2012-05-03T11:22:45.907 回答
52

临时解决方案(如 Ownatik 所述):

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

这将阻止捆绑程序在尝试安装 gems 时检查它们的 SSL 证书。

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

于 2012-04-20T17:03:09.657 回答
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> 替换为您自己的用户名。

于 2014-03-21T18:17:36.463 回答
15

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

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

RailsApps 项目中的这个提示致敬

于 2013-10-22T03:50:02.633 回答
8

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

于 2013-10-18T05:36:20.447 回答
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,如果出现中间人攻击等问题,它会失败,这比关闭安全性要好得多。

于 2012-04-27T19:35:42.303 回答
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 应该报告新的更新版本。

您现在可以安全地卸载 ruby​​gems-update gem:

C:\>gem uninstall rubygems-update -x
于 2016-10-20T12:25:37.823 回答
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:>start C:\Ruby21\lib\ruby\2.1.0\rubygems 这将在我们指定的目录中打开一个资源管理器窗口。

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

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

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

于 2014-12-27T14:09:24.147 回答
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

于 2012-04-20T12:36:51.540 回答
4

最简单的解决方案:

rvm pkg install openssl
rvm reinstall all --force

瞧!

于 2013-10-16T14:20:31.487 回答
4

这是在 Windows 上解决此问题的方法:

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

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

于 2014-07-29T20:23:45.817 回答
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
于 2016-10-19T18:47:23.967 回答
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 问题 #319

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

于 2012-04-28T14:40:25.763 回答
3

我能够追查到这样一个事实,即rvm下载的二进制文件与 OS X 的 OpenSSL 不兼容,该 OpenSSL 已经过时且操作系统不再使用。

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

rvm reinstall --disable-binary 2.2
于 2016-10-18T19:20:12.780 回答
3

感谢@Alexander.Iljushkin:

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

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

gem install bundler

于 2016-12-18T19:48:18.683 回答
2

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

于 2014-03-24T17:53:49.103 回答
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 证书验证错误。

更详细的说明在这里

于 2016-06-17T00:11:43.713 回答
1

这对我有用:

  • 在https://rubygems.org/pages/download下载最新的 gem
  • 安装gemgem install --local [path to downloaded gem file]
  • 更新宝石update_rubygems
  • 检查您是否使用最新的 gem 版本gem --version
于 2016-10-12T20:08:13.887 回答
1

我不得不重新安装openssl:

brew uninstall --force openssl
brew install openssl
于 2016-11-04T19:37:49.673 回答
1

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

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

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

捆绑完成运行!

于 2017-01-05T07:30:02.630 回答
1

下载 ruby​​gems-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应该报告新的更新版本。

您现在可以安全地卸载 ruby​​gems-update gem:

C:\>gem uninstall rubygems-update -x
Removing update_rubygems
Successfully uninstalled rubygems-update-2.6.7
于 2017-01-11T07:24:20.687 回答
1

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

export SSL_CERT_FILE=~/RootCert.pem
于 2017-03-07T13:40:40.937 回答
1

如果你正在使用rails-assets

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

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

于 2017-04-30T10:52:22.760 回答
0

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

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

bundle config --global ssl_ca_cert /path/to/file.pem
于 2017-08-18T07:39:47.217 回答