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


270

我正在尝试做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源用于rubygems,所以我运行了:

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
  • 红宝石2.0.0p247(2013-06-27修订版41674)[x86_64-darwin12.3.0]
  • OSX 10.8.5

它几乎看起来像是回归错误。我注意到我的一名学生今天在OS X上遇到了同样的问题。仍在解决该问题。去年还有其他与SO相关的问题(相同吗?)。
vgoff

这是的过时(2.0.*)版本中的已知错误rubygems。尝试更新到最新的rubygems版本:gem update --system然后重新运行gem install
Aleksei Matiushkin

如果可以更新您的红宝石版本,请对其进行更新。此问题已在较新的Ruby版本中修复。

添加http源后,运行gem sources -r https://rubygems.org/对我有效(就删除警告而言)。
BrainSlugs83

在Linux / Mac上可以将其排成一排的时候,答案太多了:stackoverflow.com/a/56993071/5689995
laimison

Answers:


384

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

Luis Lavena准备了用于Windows的Ruby Installer构建,证书的路径将显示类似检查https://github.com/oneclick/rubyinstaller/issues/249之类的详细信息,以及此答案https://stackoverflow.com / a / 27298259/497756进行修复。C:/Users/Luis/...


如果您不使用RVM,还有其他方法可以更新证书吗?
爱德华多·2013年

运行rvm rubygems latest导致错误,抱怨缺少校验和。但是,事情也开始在没有这种情况下工作了……显然,--verify-downloads 1如果需要,您可以强制使用。有什么想法可能是为什么?它试图检索版本rubygems-2.1.6
Timo,

rvm将md5s硬编码为要下载的代码,我刚刚将它们添加到head版本中,并将stable很快发布。
mpapis

2
我在Windows上运行该文件,并获得了我的计算机上根本不存在的路径“ C:/Users/Luis/Code/openknapsack/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0k/ssl /cert.pem”,也没有名为Luis的用户。我勒个去?
isimmons 2014年

4
对Mac Mojave用户有什么建议吗?运行到permission denied: /private/etc/ssl/cert.pem
Chandrew

241

最新发现...

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/中,然后继续您的业务。


8
确保使用.pem扩展名保存,而不要保存.pem.txt
Dan Dascalescu 2014年

3
如果不起作用怎么办?我按照您的回答说了做,但是仍然出现错误!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
Green

尝试更新您的Ruby安装...此要点不能保证与您的版本向后兼容
beauXjames 2014年

1
有关您给的luis lavena链接的一些说明。您可能要从gem文件而不是他提到的zip文件安装rubygems。我没有找到从解压缩的gem或zip文件安装的命令。宝石在这里-rubygems.org/pages/download。该命令是-gem install --local C:\Downloads\rubygems-update-2.4.5.gem
Erran穆拉德

9
下载链接不再有效。对于仍然面临此问题的人,请参阅Dheerendra的答案以寻求解决方案
Llama.new

175

对于Windows用户

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

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

1
在Windows 8.1,Ruby 2.0.0上为我工作。干杯。
Yi Zeng

7
Windows用户的最佳解决方案
Sorin Haidau 2015年

1
比其他答案中列出的Windows替代方案容易得多,并且可以在Windows 7 64位上完美运行。谢谢!
Gurgadurgen'3

1
这对我不起作用。Devkit与Windows 7上的最新版本的ruby不兼容
roo2

2
在Windows 10和Ruby 2.1.0上对我有效。谢谢!
MSC

54

如果要使用非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

不能拒绝投票,因为这可以解决这个紧迫的问题,但是它
会给

1
我更新了答案以尝试弄清楚这只是针对根本问题的一种解决方法。刚尝试解决Terin使用非SSL源时的问题。
爱德华多

5
仅供参考,我不得不做sudo gem sources -r https://rubygems.org/sudo gem sources -r http://rubygems.org/。注意尾随/
罗斯·罗杰斯

是的,有可能。我认为这首先取决于源的添加方式。我的意思是,如果源添加有结尾/,则也应将其删除/
Eduardo

唯一适用于我下载fu @ ^!#gem的解决方案。非常感谢!
Genarito

16

在Windows上,您必须使用HTTPsource进行更新,gem然后再更改为using 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。
Noha Kareem

2
就我而言,我需要在尾随/加上https网址。
Alwyn Schoeman'2

1
作为此答案的更新,在开始gem sources -l更新系统之前和之后查看源是一个好主意。如果更新失败,请在--system之后指定版本号。参见rubygems.org/gems/rubygems-update/versions或向同事询问什么gem -v报告。
加里·韦弗

10

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

Rubygems.org的指南不仅解释了如何解决此问题,而且还解释了为什么有那么多人遇到此问题:SSL证书更新 问题的原因是rubygems.org切换到了更安全的SSL证书(SHA-2,使用256位加密)。rubygems命令行工具将引用绑定到正确的证书。因此,rubygems本身无法使用旧版本的rubygems进行更新。Rubygems必须首先手动更新。

首先找出您拥有的红宝石:

rubygems –v

根据您使用的是1.8.x,2.0.x还是2.2.x,将需要下载一个名为“ ruby​​gems-update-XYZgem”的更新gem,其中XYZ是您所需的版本。运行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是否已更新:

rubygems –v

卸载更新gem:

gem uninstall rubygems-update -x

此时,您可能会好起来的。但是您可能没有新证书的最新公共密钥文件。去做这个:

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

找出放置位置:

gem which rubygems

将此文件放在此位置的“ ruby​​gems \ ssl_certs”目录中。

按照rubygems commit,证书将移至更特定的目录。因此,当前证书(AddTrustExternalCARoot-2048.pem)应位于以下路径上lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem



9

尝试使用宝石的来源网站,即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)

7

跑步gem update --system对我有用


6
在Windows上,这也对我有效。我不得不暂时切换到经典HTTP,然后进行更新,然后再切换回SSL。
汤姆·梅菲尔德

1
错误。SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
2014年

宝石来源-删除rubygems.org宝石来源-a rubygems.org宝石更新--system
Stefan Steiger

5

确保系统时钟正确

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

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

sudo服务ntp停止&& sudo ntpdate pool.ntp.org && sudo服务ntp启动


4

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

brew uninstall --force openssl

brew install openssl


1
对于较新版本的自制软件,您可能需要运行以下命令:(brew uninstall --ignore-dependencies openssl与旧force标记等效)
Batkins


3

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

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


那对我没有任何帮助... OpenSSL甚至使用Windows证书存储吗?
朱利安·鲁芬

2

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

 sudo update-ca-certificates

2

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

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

如果遇到码头集装箱的问题,作品完美!
user7364588

1

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

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

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

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

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


1

尝试

gem update --system

希望它能解决问题。


为我工作。谢谢。Ubuntu; 使用来安装Ruby apt install ruby
Marslo

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)
乔纳森

1

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

现在,通过设置SSL_CERT_FILE使ruby知道您的证书颁发机构捆绑包。要在当前命令提示符会话中进行设置,请输入:

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


0

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

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

已安装所有必需的宝石。


0

对于使用OpenCSW pkgutil的Illumos / Solaris:

在“宝石安装”之前安装CSWcacertificates

pkgutil -yi CSWcacertificates

如果您使用的不是来自OpenCSW的红宝石套件,则您的红宝石版本可能希望在其他位置找到证书文件。在这种情况下,我只是将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


0

对于Windows用户:

在可以访问Internet的测试机器上成功安装Ruby 2.2.3(+ ruby​​gems 2.5.1)之后,在网络中的生产机器上安装捆绑器时,出现了SSL错误。

由于我具有网络访问限制,并且无法更改SSL访问的设置,并且基于错误消息,我执行了以下步骤以能够完成捆绑器的安装(这听起来很疯狂,但是工作...)。

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

我在Intranet服务器上添加了这些文件,并保留了上面链接的文件夹结构:

  • $ INTRANET_HOME

spec.4.8.gz和latest_specs.4.8.gz

  • $ INTRANET_HOME \ quick \ Marshal.4.8

捆绑器1.11.2.gemspec.rz

  • $ INTRANET_HOME \宝石

捆绑器1.11.2.gem

然后,我添加了Intranet来访问gem资源:

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

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

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

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


0

作为Windows 10用户,我遵循Dheerendra的回答,并且有一天对我有用。第二天,我再次遇到了这个问题,他的修复没有用。对我来说,解决方法是更新bundler

gem update bundler

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


0

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

更多信息在这里


0

答案不再有效。由于我现在遇到了旧版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​​复制证书。取得最新的红宝石(或至少是红宝石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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.