安装 rubygems 时出现 SSL 错误,无法从"https://rubygems.org/ 中提取数据



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

$ gem 安装导轨 -v 3.2.14

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

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

在谷歌搜索之后,我发现我可以使用非SSL源来获取红宝石,所以我运行了:

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

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

警告:无法从"https://rubygems.org/"中提取数据:返回SSL_connect=1 errno=0 状态=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-达尔文12.3.0]
  • OSX 10.8.5

对于 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的Ruby安装程序版本由Luis Lavena准备,证书的路径将显示类似C:/Users/Luis/...检查 https://github.com/oneclick/rubyinstaller/issues/249 以获取更多详细信息的内容,并且此答案 https://stackoverflow.com/a/27298259/497756 修复。

最新发现...

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/红宝石/ssl_certs/并继续您的业务。

对于 Windows 用户

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

  1. 下载最新的zip文件(在我的例子中为2.4.5(
  2. 解压缩它
  3. 在解压缩的文件夹中运行"Ruby Setup.rb">
  4. 现在运行 gem 安装命令
如果要

使用非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

在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/

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

对于 Windows 用户(也许还有其他用户(

Rubygems.org 有一个指南,不仅解释了如何解决这个问题,还解释了为什么这么多人遇到它: SSL证书更新问题的原因是 rubygems.org 切换到更安全的SSL证书(使用256位加密的SHA-2(。rubygems 命令行工具捆绑了对正确证书的引用。因此,红宝石本身无法使用旧版本的红宝石进行更新。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

检查红宝石是否已更新:

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 提交,证书将移动到更具体的目录。因此,目前证书(AddTrustExternalCARoot-2048.pem(应该在以下路径上lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

尝试

使用gems的源网站,即 rubygems.org。使用 http 而不是 https。此方法不涉及任何工作,例如安装证书等等。

例-

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

这有效,但有一个警告。

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

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)

运行gem update --system对我有用

确保您的系统时钟正确

这个确切的错误今天发生在我身上,在VirtualBox上运行的Ubuntu虚拟机上。我尝试了上面显示的大多数解决方案,然后我注意到我已经从非常旧的挂起状态恢复,并且我的时钟偏离了很多天。

更新时钟立即解决了我的问题。这是我在我的情况下使用的命令:

sudo service ntp stop && sudo

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

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

brew uninstall --force openssl

brew install openssl

对于 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,请使用 Internet Explorer 打开 https://rubygems.org/。

单击安全信息并导入证书。最重要的是,您的认证链已过时,您需要添加此新证书。请记住,只要您可以验证证书是否受信任,就不是安全违规。

方法/单行代码,可以自动使用 HTTP 而不是 HTTPS 下载 gem:

printf -- '---n:sources:n- http://rubygems.orgn' | tee ~/.gemrc
<</div> div class="one_answers">

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

 sudo update-ca-certificates

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

现在,通过设置 SSL_CERT_FILE,让 Ruby 知道您的证书颁发机构捆绑包。若要在当前命令提示符会话中设置此项,请键入:

set SSL_CERT_FILE=C:\RailsInstaller\cacert.pem

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

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

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

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

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

试试

gem update --system

希望它能解决问题。

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

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

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

  1. 导航到项目文件夹
  2. 类型捆绑安装

已安装所有必需的 Gem。

对于使用 OpenCSW pkgutil 的 Illumos/Solaris:

在"gem 安装"之前安装 CSWca证书

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
<</div> div class="one_answers">

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

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

对于 Windows 用户:

在可以访问互联网的测试计算机上成功安装 Ruby 2.2.3(+ rubygems 2.5.1(后,当我在网络中的生产机器上安装捆绑器时,我遇到了此 SSL 错误。

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

通过不受限制地访问互联网的计算机,下载了以下文件:

  • 规格4.8.gz (http://rubygems.global.ssl.fastly.net/spec.4.8.gz(
  • latest_specs.4.8.gz (http://rubygems.global.ssl.fastly.net/latest_specs.4.8.gz(
  • bundler-1.11.2.gemspec.rz (http://rubygems.global.ssl.fastly.net/quick/Marshal.4.8/bundler-1.11.2.gemspec.rz(
  • 捆绑器-1.11.2.宝石 (http://rubygems.global.ssl.fastly.net/gems/bundler-1.11.2.gem(

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

  • $INTRANET_首页

规格4.8.gz E latest_specs.4.8.gz

  • $INTRANET_首页\快速\元帅.4.8

bundler-1.11.2.gemspec.rz

  • $INTRANET_首页\宝石

捆绑器-1.11.2.gem

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

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

后,我已经成功运行了"gem 安装捆绑器",只需删除我的 gem 内部网:

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

我希望这在任何类似情况下都很有用......

作为Windows 10用户,我遵循了Dheerendra的回答,有一天它对我有用。第二天,我再次遇到这个问题,他的修复不起作用。对我来说,解决方法是通过以下方式更新bundler

gem update bundler

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

确保你已经安装了带有 --disable-binary 选项的 ruby,如果没有,请卸载它并使用该选项重新安装它。

更多信息在这里

答案不再有效。 由于我现在遇到了旧版 Windows 红宝石的问题。我会发布答案:

当我想安装活动支持 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)

以下步骤只需要从较新的窗口 ruby 复制证书。使用最新的 ruby(或至少是 ruby 2.4.0(并执行以下操作:

从这些目录复制证书(根据需要进行调整(:

C:prg_sdkrubiesRuby-2.4libruby2.4.0rubygemsssl_certsrubygems.org C:prg_sdkrubiesRuby-2.4libruby2.4.0rubygemsssl_certsindex.rubygems.org

目的地(再次调整到您需要
(: C:prg_sdkrubiesRuby231-p112-x64libruby2.3.0rubygemsssl_certs

去 Rubygems 并下载适合我的最新版本。我正在使用窗户。

最新更新