【问题标题】:SSL Error When installing rubygems, Unable to pull data from 'https://rubygems.org/安装 ruby​​gems 时出现 SSL 错误,无法从“https://rubygems.org/”中提取数据
【发布时间】:2013-10-09 14:38:15
【问题描述】:

我正在尝试制作 Michael Hartl 教程。当我尝试在我的 gemset 中安装 rails 3.2.14 时,出现以下问题:

$ gem install rails -v 3.2.14

错误:找不到有效的 gem 'rails' (= 3.2.14),原因如下:

无法从 https://rubygems.org/ 下载数据 - SSL_connect 返回=1 errno=0 state=SSLv3 读取服务器证书 B:证书验证失败 (https://s3.amazonaws.com/production.s3.rubygems.org/specs.4.8.gz)

在谷歌搜索之后,我发现我可以为 ruby​​gems 使用非 SSL 源,所以我运行了:

sudo gem sources -a http://rubygems.org

然后,当我再次尝试安装rails时,它成功了。但是,我仍然遇到上述问题,但作为警告:

警告:无法从“https://rubygems.org/”提取数据:SSL_connect 返回=1 errno=0 state=SSLv3 读取服务器证书 B:证书验证失败 (https://s3.amazonaws.com/production.s3.rubygems.org/specs.4.8.gz)

如何完全消除此警告/错误?

我正在使用以下内容:

  • rvm 1.22.15
  • ruby 2.0.0p247(2013-06-27 修订版 41674)[x86_64-darwin12.3.0]
  • OSX 10.8.5

【问题讨论】:

  • 它几乎看起来像一个回归错误。我注意到我的一位学生今天在 OS X 上遇到了同样的问题。仍在解决这个问题。去年的 SO 还有其他相关问题(相同?)。
  • 这是 rubygems 的过时 (2.0.*) 版本中的一个已知错误。尝试更新到最新的 ruby​​gems 版本:gem update --system,然后重新运行gem install
  • 如果可以更新您的 ruby​​ 版本,请更新它。此问题已在较新的 ruby​​ 版本中得到修复。
  • 添加http源后,运行gem sources -r https://rubygems.org/对我有用(就删除警告而言)。
  • 答案太长了,在Linux/Mac上可以用一行来整理:stackoverflow.com/a/56993071/5689995

标签: ruby-on-rails ruby ssl rvm


【解决方案1】:

适用于 RVM 和 OSX 用户

确保您使用最新的 rvm:

rvm get stable

那么你可以做两件事:

  1. 更新证书:

    rvm osx-ssl-certs update all
    
  2. 更新红宝石:

    rvm rubygems latest
    

对于非 RVM 用户

查找证书路径:

cert_file=$(ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE')

生成证书:

security find-certificate -a -p /Library/Keychains/System.keychain > "$cert_file"
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$cert_file"

完整代码:https://github.com/wayneeseguin/rvm/blob/master/scripts/functions/osx-ssl-certs


对于非 OSX 用户

确保更新包ca-certificates(在旧系统上它可能不可用 - 不要使用不再接收安全更新的旧系统)

Windows 说明

Windows 的Ruby Installer 构建由Luis Lavena 准备,证书路径将显示类似C:/Users/Luis/... 的内容,请查看https://github.com/oneclick/rubyinstaller/issues/249 了解更多详细信息,此答案https://stackoverflow.com/a/27298259/497756 进行修复。

【讨论】:

  • 如果您不使用 RVM,还有其他方法可以更新证书吗?
  • 运行 rvm rubygems latest 导致错误提示缺少校验和。但是,如果没有它,事情也开始起作用了……显然,如果需要,您可以使用 --verify-downloads 1 强制它。任何想法为什么会这样?它试图检索版本rubygems-2.1.6
  • rvm 在其代码中对 md5 进行硬编码以供下载,我刚刚将它们添加到 head 版本中,并将很快发布 stable
  • 我在 Windows 上运行它并获得我的计算机上甚至不存在的路径 "C:/Users/Luis/Code/openknapsack/knap-build/var/knapsack/software/x86-windows /openssl/1.0.0k/ssl/cert.pem" 也没有名为 Luis 的用户。什么鬼?
  • 对 Mac Mojave 用户有什么建议吗?遇到permission denied: /private/etc/ssl/cert.pem
【解决方案2】:

如果您想使用非 SSL 源,请尝试先删除 HTTPS 源,然后添加 HTTP 源:

sudo gem sources -r https://rubygems.org
sudo gem sources -a http://rubygems.org  

更新:

正如 mpapis 所述,这应该仅用作临时解决方法。如果您通过非 SSL 源访问 RubyGems,则可能存在一些安全问题。

一旦不再需要解决方法,您应该恢复 SSL 源:

sudo gem sources -r http://rubygems.org
sudo gem sources -a https://rubygems.org

【讨论】:

  • 不要拒绝投票,因为这可以解决这个直接的问题,但它会让你的红宝石留下仍然很糟糕的旧证书
  • 我更新了答案以尝试明确这只是根本问题的解决方法。刚刚尝试解决 Terin 在尝试使用非 SSL 源时的问题。
  • 仅供参考,我必须这样做 sudo gem sources -r https://rubygems.org/sudo gem sources -r http://rubygems.org/。注意尾随的/
  • 是的,有可能。我认为这首先取决于添加源的方式。我的意思是,如果源添加了尾随/,它也应该使用尾随/ 删除。
  • 唯一对我有用的解决方案来下载 fu@^!# gem。非常感谢!
【解决方案3】:

我在尝试安装 Cucumber gem 时遇到了同样的问题。但是我注意到捆绑器 gem 已经安装了 ruby​​ 2.0。 我在项目文件夹中创建了一个 Gemfile.rb,其中包含所需的 gem,并按照以下步骤操作

  1. 导航到项目文件夹
  2. 键入捆绑安装

已安装所有必需的 gem。

【讨论】:

    【解决方案4】:

    跑步 gem update --system 为我工作

    【讨论】:

    • 这在 Windows 上也适用于我。我不得不暂时切换到经典 HTTP,然后更新,然后切换回 SSL。
    • 错误。 SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
    • gem 来源 --remove rubygems.org gem 来源 -a rubygems.org gem 更新 --system
    【解决方案5】:

    对于 Fedora 用户

    cert.pem更新为cURL提供的最新文件:http://curl.haxx.se/ca/cacert.pem

    curl -o `ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE' |tr -d \"` http://curl.haxx.se/ca/cacert.pem
    

    【讨论】:

    • 是否有 windows cmd 或 powershell 等效项?
    【解决方案6】:

    如果您使用的是 Windows,请使用 Internet Explorer 打开https://rubygems.org/

    点击安全信息并导入证书。底线是您的认证链已过时,您需要添加此新证书。请记住,只要您可以将证书验证为受信任,这不是安全违规。

    【讨论】:

    • 这对我没有任何作用... OpenSSL 甚至使用 Windows 证书存储区吗?
    【解决方案7】:

    最新发现...

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

    最重要的是...下载 https://raw.githubusercontent.com/rubygems/rubygems/master/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

    想办法把它贴在哪里

    C:\>gem which rubygems
    C:/Ruby21/lib/ruby/2.1.0/rubygems.rb
    

    然后只需将 .pem 文件复制到 ../2.1.0/rubygems/ssl_certs/ 并继续您的业务。

    【讨论】:

    • 确保使用.pem 扩展名保存,而不是.pem.txt
    • 如果它不起作用怎么办?我按照你的回答做了,但我仍然得到错误! 1)我得到文件AddTrustExternalCARoot-2048.pem,2)我把文件放到C:\Ruby193\lib\ruby\1.9.1\rubygems\ssl_certs,3)我运行gem install susy并得到同样的错误Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
    • 关于您提供的 luis lavena 链接的一些注释。您可能希望从 gem 文件而不是他提到的 zip 文件安装 ruby​​gems。我还没有找到从解压缩的 gem 或 zip 文件安装的命令。宝石在这里-rubygems.org/pages/download。命令是-gem install --local C:\Downloads\rubygems-update-2.4.5.gem
    • 下载链接不再有效。对于那些仍然面临这个问题的人,请参阅 Dheerendra 的答案以获得解决方案
    • bundler.io/v2.0/guides/… 能够下载 GlobalSignRootCA.pem 并为我工作。附加参考。 bundler.io/v2.0/guides/…
    【解决方案8】:

    Windows 用户

    转到链接http://rubygems.org/pages/download

    1. 下载最新的 zip 文件(在我的例子中是 2.4.5)
    2. 解压
    3. 在解压后的文件夹中运行“ruby setup.rb”
    4. 现在运行 gem install 命令

    【讨论】:

    • 在 Windows 8.1、Ruby 2.0.0 上为我工作。干杯。
    • Windows 用户的最佳解决方案
    • 比其他答案中列出的 Windows 替代方案要容易得多,并且在 Windows 7 64 位上完美运行。谢谢!
    • 这对我不起作用。 Devkit 与 Windows 7 上最新版本的 ruby​​ 不兼容
    • 在 Windows 10 和 Ruby 2.1.0 上为我工作。谢谢!
    【解决方案9】:

    尝试使用宝石的源网站,即 ruby​​gems.org。使用 http 而不是 https。此方法不涉及安装证书等任何工作。

    示例 -

    gem install typhoeus --source http://rubygems.org
    

    这可行,但有一个警告。

    gem 已安装,但文档不是因为 cert 错误。这是我得到的错误

    Parsing documentation for typhoeus-0.7.0 WARNING: Unable to pull 
    data from 'https://rubygems.org/': SSL_connect returned=1 errno=0 
    state=SSLv3 read server certificate B: certificate verify failed 
    (https://rubygems.org/latest_specs.4.8.gz)
    

    【讨论】:

      【解决方案10】:

      对于使用 OpenCSW pkgutil 的 Illumos / Solaris:

      在“gem install”之前安装 CSWcacertificates

      pkgutil -yi CSWcacertificates
      

      如果您使用的不是来自 OpenCSW 的 ruby​​ 工具包,您的 ruby​​ 版本可能会在其他地方找到证书文件。在这种情况下,我只是将 OpenCSW 的 /etc/opt/csw/ssl/cert.pem 符号链接到预期的位置。

      检查 ruby​​ 期望在哪里找到它:

      export cf=`ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'` && echo $cf
      

      然后,如果有差异,请链接:

      ln -s /etc/opt/csw/ssl/cert.pem $cf && file $cf
      

      【讨论】:

        【解决方案11】:

        在 Windows 上,您必须使用 HTTP 源来更新 gem,然后改回使用 HTTPS

        gem sources -r https://rubygems.org/
        gem sources -a http://rubygems.org/
        gem update --system
        gem sources -r http://rubygems.org/
        gem sources -a https://rubygems.org/
        

        编辑:警告我不确定这是否安全。有谁知道红宝石包是否已签名?接受的答案看起来是一个更好的解决方案。

        【讨论】:

        • 感谢分享;暂时将 https 更改为 http 有效,但我需要直接更改 gemfile。
        • 就我而言,我需要一个带有 https url 的尾随 /。
        • 作为此答案的更新,在您开始执行 gem sources -l 之前,在更新系统之前和之后查看您的资源是一个好主意。如果更新失败,请在 --system 之后指定版本号。请参阅rubygems.org/gems/rubygems-update/versions 或询问同事gem -v 报告的内容。
        【解决方案12】:

        就我而言,Ubuntu CA 证书已过期。我通过运行修复了它:

         sudo update-ca-certificates
        

        【讨论】:

          【解决方案13】:

          适用于 Windows 用户(可能还有其他用户)

          Rubygems.org 有一个指南,不仅解释了如何解决这个问题,还解释了为什么这么多人有它:SSL Certificate Update 问题的原因是 ruby​​gems.org 切换到更安全的 SSL 证书(使用 256 位加密的 SHA-2)。 rubygems 命令行工具捆绑对正确证书的引用。因此 ruby​​gems 本身不能使用旧版本的 ruby​​gems 进行更新。 Rubygems 必须先手动更新。

          首先找出你有什么红宝石:

          rubygems –v
          

          根据您使用的是 1.8.x、2.0.x 还是 2.2.x,您需要下载名为“rubygems-update-X.Y.Z.gem”的更新 gem,其中 X.Y.Z 是您需要的版本。 运行 1.8.x:下载:https://github.com/rubygems/rubygems/releases/tag/v1.8.30 运行 2.0.x:下载:https://github.com/rubygems/rubygems/releases/tag/v2.0.15 运行 2.2.x:下载:https://github.com/rubygems/rubygems/releases/tag/v2.2.3

          安装更新gem:

          gem install –-local full_path_to_the_gem_file
          

          运行更新 gem:

          update_rubygems --no-ri --no-rdoc
          

          检查 ruby​​gems 是否已更新:

          rubygems –v
          

          卸载更新 gem:

          gem uninstall rubygems-update -x
          

          此时,您可能会没事。但是您可能没有新证书的最新公钥文件。为此:

          下载最新证书,(目前为 AddTrustExternalCARoot-2048.pem) 来自https://rubygems.org/pages/download。 所有证书也位于:https://github.com/rubygems/rubygems/tree/master/lib/rubygems/ssl_certs

          找出把它放在哪里:

          gem which rubygems
          

          把这个文件放到这个位置的“rubygems\ssl_certs”目录下。

          根据rubygems commit,证书被移动到更具体的目录。因此,目前证书(AddTrustExternalCARoot-2048.pem)预计位于以下路径lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

          【解决方案14】:

          RubyGems(命令行工具)的特殊情况是它需要在其代码内部捆绑信任证书,这允许 RubyGems 与服务器建立连接,即使基础操作系统无法验证身份他们。

          直到几个月前,此证书由一个 CA 提供,但较新的证书由另一个 CA 提供。

          因此,必须在转换证书之前更新 RubyGems 的现有安装,并为更改的传播(以及更新人员)留出足够的时间

          任何人都可以按照下面链接中给出的简单步骤找到他的解决方案

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

          【讨论】:

            【解决方案15】:

            确保您的系统时钟正确

            我今天在 VirtualBox 上运行的 Ubuntu 虚拟机上发生了这个确切的错误。在我注意到我已经从一个非常古老的暂停状态恢复之前,我尝试了上面显示的大多数解决方案,并且我的时钟已经关闭了很多天。

            更新时钟立即解决了我的问题。这是我在案例中使用的命令:

            sudo service ntp stop && sudo ntpdate pool.ntp.org && sudo service ntp start

            【讨论】:

              【解决方案16】:

              或者像我这样被防火墙阻止。试试这个:

              sudo gem install --http-proxy http://localhost:port cocoapods -V

              【讨论】:

                【解决方案17】:

                对于 Windows 用户:

                在可以访问 Internet 的测试机器上成功安装 Ruby 2.2.3 (+ ruby​​gems 2.5.1) 后,当我在网络内的生产机器上安装 bundler 时出现此 SSL 错误。

                由于我有网络访问限制,并且无法更改 SSL 访问设置,并且根据错误消息,我执行了以下步骤以完成捆绑程序的安装 (这可能听起来很疯狂,但它确实有效......)。

                通过无限制访问互联网的机器,下载了以下文件:

                我在内网服务器上添加了这些文件,保持上面链接的文件夹结构:

                • $INTRANET_HOME

                spec.4.8.gz 和 latest_specs.4.8.gz

                • $INTRANET_HOME\quick\Marshal.4.8

                bundler-1.11.2.gemspec.rz

                • $INTRANET_HOME\gems

                bundle-1.11.2.gem

                然后我添加了我的内网以访问 gem 源:

                gem sources -a http://mydomain.com.br
                

                我在安装后成功运行了“gem install bundler”,只需要删除我的 gem 内网:

                gem sources -r http://mydomain.com.br
                

                我希望这对任何类似情况都有用....

                【讨论】:

                  【解决方案18】:

                  确保您已使用 --disable-binary 选项安装了 ruby​​, 如果没有,请卸载它并使用选项重新安装它。

                  更多信息here

                  【讨论】:

                    【解决方案19】:

                    只需使用自制软件卸载并重新安装 openssl 即可为我解决此问题。

                    brew uninstall --force openssl

                    brew install openssl

                    【讨论】:

                    • 对于较新版本的自制软件,您可能需要像这样运行命令:brew uninstall --ignore-dependencies openssl(相当于旧的 force 标志)
                    【解决方案20】:

                    作为 Windows 10 用户,我关注了 Dheerendra 的 answer,有一天它对我有用。第二天,我又遇到了这个问题,他的修复没有奏效。对我来说,解决方法是更新bundler

                    gem update bundler

                    我相信我的 bundler 版本已有几个月的历史了。

                    【讨论】:

                      【解决方案21】:

                      试试

                      gem update --system
                      

                      希望它能解决问题。

                      【讨论】:

                      • 为我工作。谢谢。乌班图; Ruby 是使用 apt install ruby 安装的。
                      • ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError) SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
                      【解决方案22】:

                      答案不再有效。因为我现在遇到了旧版 Windows ruby​​ 的问题。我会发布答案:

                      当我想安装一个 activesupport gem 时:

                      gem in activesupport --version 5.1.6
                      
                      ERROR:  Could not find a valid gem 'activesupport' (= 5.1.6), here is why:
                                Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B
                      : certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
                      

                      以下步骤只需要从较新的 windows ruby​​ 复制证书。 获取最新的 ruby​​(或至少 ruby​​ 2.4.0)并执行以下操作:

                      从这些目录复制证书(根据您的需要进行调整):
                      C:\prg_sdk\rubies\Ruby-2.4\lib\ruby\2.4.0\rubygems\ssl_certs\rubygems.org
                      C:\prg_sdk\rubies\Ruby-2.4\lib\ruby\2.4.0\rubygems\ssl_certs\index.rubygems.org

                      到目的地(再次根据需要调整):
                      C:\prg_sdk\rubies\Ruby231-p112-x64\lib\ruby\2.3.0\rubygems\ssl_certs

                      【讨论】:

                      • 只是在这里为未来的开发者留下评论——不适用于 windows 10 + legacy ruby​​ 2.3.3
                      • @alilland 这就是我写你至少需要 ruby​​ 2.4.0 的原因。
                      【解决方案23】:

                      可以使用 HTTP 而不是 HTTPS 自动下载 gem 的方法/单线:

                      printf -- '---\n:sources:\n- http://rubygems.org\n' | tee ~/.gemrc
                      

                      【讨论】:

                      • 如果您在 docker 容器中遇到问题,则可以完美运行!
                      【解决方案24】:

                      http://curl.haxx.se/ca/cacert.pem 下载 cacert.pem 文件。将此文件保存到 C:\RailsInstaller\cacert.pem。

                      现在通过设置 SSL_CERT_FILE 让 ruby​​ 了解您的证书授权包。要在当前的命令提示符会话中进行设置,请键入:

                      设置 SSL_CERT_FILE=C:\RailsInstaller\cacert.pem

                      【讨论】:

                      • 这解决了大部分问题。以及为什么您的解决方案没有得到支持?
                      • 你现在可以投票了! ?
                      【解决方案25】:

                      对于 Windows,我关注了 https://gist.github.com/fnichol/867550。 我不得不手动下载“cacert.pem”文件。 (去https://curl.se/docs/caextract.html。) 将它放在任何不会被删除的文件夹中。

                      确保将其添加到系统环境变量中!!!

                      我通过控制面板(选择用户帐户)执行此操作(在 Windows 10 中),其中有一个“更改我的环境变量”选项。创建一个新变量并将值设置为路径和文件名!

                      var name    SSL_CERT_FILE
                      
                      var value   C:\{your_dir}\cacert.pem
                      

                      这将确保它在您每次需要时(即您打开的每个命令窗口)都保持可见/可用!

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2010-09-06
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-02-09
                        • 1970-01-01
                        相关资源
                        最近更新 更多