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

时间:2013-10-03 02:56:52

标签: ruby-on-rails ruby ssl rvm

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

  

$ gem install rails -v 3.2.14

     

错误:找不到有效的宝石'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

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

  

警告:无法从“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-darwin12.3.0]
  • OSX 10.8.5

24 个答案:

答案 0 :(得分:373)

对于RVM& OSX用户

确保使用最新的rvm:

rvm get stable

然后你可以做两件事:

  1. 更新证书:

    rvm osx-ssl-certs update all
    
  2. 更新rubygems:

    rvm rubygems latest
    

  3. 对于非R​​VM用户

    查找证书路径:

    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 note

    Windows Ruby Installer版本由Luis Lavena准备,证书路径将显示C:/Users/Luis/...检查https://github.com/oneclick/rubyinstaller/issues/249,以获取更多详细信息和此答案{{3修复。

答案 1 :(得分: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

然后只需复制./2.1.0/rubygems/ssl_certs/中的.pem文件,继续关注您的业务。

答案 2 :(得分:175)

对于Windows用户

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

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

答案 3 :(得分:52)

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

答案 4 :(得分:15)

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

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

答案 5 :(得分:10)

对于Windows用户(以及其他人)

Rubygems.org有一个指南,不仅解释了如何解决这个问题,还解释了为什么这么多人有这个问题:SSL Certificate Update 出现问题的原因是rubygems.org切换到更安全的SSL证书(使用256位加密的SHA-2)。 rubygems命令行工具将对正确证书的引用捆绑在一起。因此,使用较旧版本的rubygems无法更新rubygems本身。首先必须手动更新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是否已更新:

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

答案 6 :(得分:8)

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

正在运行gem update --system为我工作

答案 8 :(得分:4)

确保您的系统时钟正确

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

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

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

答案 9 :(得分:4)

只需卸载并重新安装openssl with homebrew就可以解决这个问题。

brew uninstall --force openssl

brew install openssl

答案 10 :(得分:3)

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

答案 11 :(得分:3)

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

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

答案 12 :(得分:2)

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

 sudo update-ca-certificates

答案 13 :(得分:1)

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

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

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

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

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

答案 14 :(得分:1)

尝试

gem update --system

希望它能解决问题。

答案 15 :(得分:0)

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

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

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

答案 16 :(得分:0)

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

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

答案 17 :(得分: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​​中复制证书。 拿最新的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

答案 18 :(得分:0)

作为Windows 10用户,我关注了Dheerendra的answer,有一天它对我有用。第二天,我再次遇到了这个问题,他的修复工作没有成功。对我来说,解决方法是使用以下内容更新bundler

gem update bundler

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

答案 19 :(得分:0)

确保您已使用 - 禁用二进制选项安装了ruby, 如果没有,请卸载它并使用选项重新安装。

更多信息here

答案 20 :(得分:0)

对于Windows用户:

在可以访问互联网的测试机器上成功安装Ruby 2.2.3(+ ruby​​gems 2.5.1)之后,当我在网络中的生产机器上安装了bundler时,我遇到了这个SSL错误。

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

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

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

  • $ INTRANET_HOME

spec.4.8.gz e latest_specs.4.8.gz

  • $ INTRANET_HOME \快\ 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 sources -r http://mydomain.com.br

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

答案 21 :(得分:0)

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

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

答案 22 :(得分:0)

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

  1. 导航到项目文件夹
  2. 键入捆绑安装
  3. 安装了所有必需的宝石。

答案 23 :(得分:0)

对于使用OpenCSW的Illumos / Solaris pkgutil:

在宝石安装&#39;

之前安装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