【问题标题】:bundle install fails with SSL certificate verification error捆绑安装失败并出现 SSL 证书验证错误
【发布时间】:2012-05-02 00:38:45
【问题描述】:

当我在 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。

如何解决?

【问题讨论】:

  • 面临同样的问题。但是使用另一个 gem:Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (bb-m.rubygems.org/gems/activeresource-3.2.3.gem)
  • 我在同样的情况下遇到同样的错误。鉴于这些其他响应,我怀疑这是服务器端问题。
  • 我在 Rails 5 中遇到了类似的问题。通过在 Gemfile 中添加 source "https://rubygems.org'' 并运行“gem update --system”来修复它。您可以找到更多信息here
  • Nesha,该修复对我有用。谢谢!

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


【解决方案1】:

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

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

【讨论】:

  • 您也可以在 gemfile 中使用非 ssl 版本的 ruby​​gems 作为临时解决方法。
  • 我做到了,而且效果很好。目前,这是一个足够的解决方案。
  • 我这里也有同样的问题。那么@Ownatik 如何使用 ssl 版本的 ruby​​gems?
【解决方案2】:

临时解决方案(如 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

【讨论】:

  • %USERPROFILE%\.gemrc 在 Windows 上也被 gem 搜索。
  • Windows 8 的推荐文件位置?
  • 删除 ssl 验证是一种临时解决方法,会打开一个安全漏洞。在这里阅读更多:github.com/rubygems/rubygems/commit/…
  • 这对我来说很有用;在限制所有压缩文件但允许通过 https 的公司防火墙后面。
  • 没有尝试此解决方案,但在我的情况下,当我将此内容添加到 ~/.gemrc 时也有效::sources: - http://rubygems.org
【解决方案3】:

更新

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

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

gem update --system

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


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

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

通过用户 Ownatik

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

source 'https://rubygems.org'

source 'http://rubygems.org'

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

【讨论】:

  • 我接受这个答案,因为那是我一开始做的事情。后来我改变了我的部署策略。现在我在另一台服务器上运行捆绑应用程序,然后将它(在vendor 目录中包含 gem)复制到我在问题中写的服务器。
  • 这对我不起作用。 @fbernier 下面提供的The link 为我修复了它。
  • 这不起作用。运行它只提供Latest version currently installed. Aborting. 的输出还有其他想法吗?
  • 在更改源方面,对于像我这样的新人。我会指定此文件位于您的应用程序目录中。我在 railsinstaller 目录中寻找它。无论如何,我改变了来源,它终于奏效了。尝试运行更新时出现证书错误:(
  • gem update --system 失败并出现完全相同的证书错误:\
【解决方案4】:

对于那些通过 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 如果存在问题,则失败,例如中间人 这比仅仅关闭安全性要好得多。

【讨论】:

  • 您链接到的页面有一个“解决方法”(首先),然后是正确的解决方案。如果您的回答能更清楚地说明这一点,那就更好了。尽管如此,使用 CA 证书(通过cacert.pem$rvm_path/usr/ssl)确实是正确的方法。
  • Bruno,解决方案可能会有所不同,具体取决于该人使用的 Unix 风格。看起来有必要阅读链接。
  • 我只是在谈论页面上的“解决方法”(:ssl_verify_mode: 0,打开问题)与下面的 3 个解决方案中的任何一个之间的区别,这是正确的方法解决这个问题。
  • @Bruno,我已经修改了我的文章,如果您看到改进的可能性,请添加 cmets 或编辑 wiki。
【解决方案5】:

我在 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 issue #319

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

【讨论】:

    【解决方案6】:

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

    【讨论】:

    • 还需要更新 bundler 以使其正常工作(rubygems 2.0.3 + bundler 1.3.2 + cygwin openssl 1.0.1e 在 winxp 上适用于我)。
    • 我必须从 1.3.0 更新,现在我在 1.3.4 并且 https 不再抛出错误:bundler-1.3.0/lib/bundler/vendor/net/http/ persistent/ssl_reuse.rb:70:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server key exchange B: bad ecpoint (OpenSSL::SSL::SSLError)
    • 如果不接受 SSL 证书,则无法更新 ruby​​gems!在这里绕圈跑;)
    【解决方案7】:

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

    【讨论】:

    • OMG 就像一个魅力!我在公司代理后面的 Windows 7 x64 上。非常感谢!
    • 我很惊讶这没有排名更高,这是最简单的快速修复。
    • 良好的临时解决方案...注意以下事项 :: RubyGems 已配置为通过其历史中的以下 URL 提供 gems:* gems.rubyforge.org(RubyGems 1.3.6 和更早版本)* @ 987654324@(RubyGems 1.3.7 到 1.8.25)* rubygems.org(RubyGems 2.0.1 和更新版本)
    • 在 Windows 8 上对我来说最快的解决方案
    • 恕我直言,这甚至不应该被认为是一个有效的答案,因为它会使您的系统受到来自外部的攻击。
    【解决方案8】:

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

    rvm osx-ssl-certs update
    

    【讨论】:

    • 谢谢!在 Mac OSX 10.8.5 上为我工作
    • 谢谢,也为我工作。我试图安装 CocoaPods。 rvm 1.22.15,OS X 10.8.5
    • 这也在错误消息“...see bit.ly/ruby-ssl”中指出。
    • 谢谢!为我工作!! \o/
    【解决方案9】:

    最简单的解决方案:

    rvm pkg install openssl
    rvm reinstall all --force
    

    瞧!

    【讨论】:

    • 这对我的系统有什么实际作用?
    • 无论如何,rvm pkg 现在已被弃用。
    【解决方案10】:

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

    【讨论】:

    • 在 Debian Buster 上我必须这样做:SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt gem update --system
    【解决方案11】:

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

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

    this tip on the RailsApps project致敬!

    【讨论】:

    • rvm osx-ssl-certs update all 对我来说效果很好。不需要执行第 1 步。
    【解决方案12】:

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

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

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

    替换为您自己的用户名。

    【讨论】:

    【解决方案13】:

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

    【讨论】:

      【解决方案14】:

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

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

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

      【讨论】:

        【解决方案15】:

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

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

        现在您可以使用gem update

        【讨论】:

        • 真正简单的跨平台解决方案,允许 RubyGems 处理细节。不错。
        • 这是应该接受的,上面的答案并没有说明您需要先删除 ssl 源
        • 谢谢 - 这是票。如果在添加或删除源时收到“不在缓存中”消息,请尝试使用或不使用尾部斜杠。它必须完全匹配。
        • 我已经搜索了许多解决方案。这是一个像魅力一样工作的人。谢谢!应该选择这个作为真正的解决方案。
        • 谢谢!!我同意其他人的观点,这应该是公认的答案,因为它不会导致您通过纯 HTTP 获取 gem。
        【解决方案16】:

        这里给出了关于 .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\rubygems 这将在我们指定的目录中打开一个资源管理器窗口。

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

        现在,找到 ssl_certs 目录,把我们上一步得到的 .pem 文件复制进去。

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

        【讨论】:

          【解决方案17】:

          对于 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 证书验证错误。

          更详细的说明是here

          【讨论】:

            【解决方案18】:

            这对我有用:

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

            【讨论】:

              【解决方案19】:

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

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

              rvm reinstall --disable-binary 2.2
              

              【讨论】:

              • 这对我有用。您需要用您正在使用的 ruby​​ 版本替换“2.2”
              【解决方案20】:

              我对 Windows 的永久修复:

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

              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
              

              【讨论】:

                【解决方案21】:

                这个问题已经解决了

                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
                

                【讨论】:

                  【解决方案22】:

                  我不得不重新安装 openssl:

                  brew uninstall --force openssl
                  brew install openssl
                  

                  【讨论】:

                    【解决方案23】:

                    感谢@Alexander.Iljushkin:

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

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

                    gem install bundler

                    【讨论】:

                      【解决方案24】:

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

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

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

                      包完成运行!

                      【讨论】:

                        【解决方案25】:

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

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

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

                        【讨论】:

                          【解决方案26】:

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

                          export SSL_CERT_FILE=~/RootCert.pem
                          

                          【讨论】:

                            【解决方案27】:

                            如果您使用的是rails-assets

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

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

                            【讨论】:

                              【解决方案28】:

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

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

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

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 2015-06-05
                                • 2019-09-08
                                • 2015-06-05
                                • 2015-11-19
                                • 1970-01-01
                                • 2018-12-12
                                相关资源
                                最近更新 更多