SSL错误安装rubygems时,无法从“https://rubygems.org/

我正在尝试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状态= SSLv3读取服务器证书B:证书validation失败( https://s3.amazonaws.com/production.s3.rubygems.org /specs.4.8.gz )

search后,我发现我可以使用非SSL来源的rubygems,所以我跑:

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

然后,当我试图再次安装轨道,它是成功的。 不过,我仍然有这个问题,但作为一个警告:

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

我怎样才能完全删除这个警告/错误?

我正在使用以下内容:

  • rvm 1.22.15
  • ruby2.0.0p247(2013-06-27修订号41674)[x86_64-darwin12.3.0]
  • OSX 10.8.5

对于RVM和OSX用户

确保你使用最新的rvm:

 rvm get stable 

那么你可以做两件事情:

  1. 更新证书:

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

     rvm rubygems latest 

对于非RVM用户

查找证书的path:

 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准备,证书的path将显示类似于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 

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

对于Windows用户

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

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

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

编辑:警告我不知道这是否安全 。 有谁知道ruby包是否签名? 接受的答案看起来更好的解决scheme。

对于Windows用户(也可能是其他人)

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

首先找出你有什么rubygems:

 rubygems –v 

根据您是否有1.8.x,2.0.x或2.2.x,您需要下载一个名为“rubygems-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 

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

根据rubygems提交 ,证书被移动到更具体的目录。 因此,目前证书(AddTrustExternalCARoot-2048.pem)预计在以下path中: lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

尝试使用源网站的gem,即rubygems.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) 

运行gem update --system为我工作

简单地卸载并重新安装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/

点击安全信息并导入证书。 底线是你的authentication链已经过时,你需要添加这个新的证书。 请记住,只要您可以将证书validation为可信,就不会违反安全规定。

确保你的系统时钟是正确的

这个确切的错误发生在我今天在VirtualBox上运行的Ubuntu虚拟机上。 在我注意到我已经从一个非常古老的暂停状态恢复之前,我尝试了上面提到的大部分解决scheme,而且我的时钟已经closures了很多天。

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

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

在我的情况下,Ubuntu的CA证书已经过时了。 我通过运行来修复它:

  sudo update-ca-certificates 

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

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

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

任何人都可以按照以下链接中的简单步骤find他的解决scheme

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

尝试

 gem update --system 

希望它解决了这个问题。

我试图安装黄瓜gem时也遇到同样的问题。 但是我注意到,已经安装了ruby 2.0的bundler gem。 我在所需的gem项目文件夹中创build了一个Gemfile.rb,然后执行这个步骤

  1. 导航到项目文件夹
  2. 键入bundle install

所有需要的gem安装。

对于使用OpenCSW的Illumos / Solaris pkgutil:

在“gem install”之前安装CSWc证书

 pkgutil -yi CSWcacertificates 

如果您使用的不是OpenCSW的ruby工具包,那么您的ruby版本可能会在另一个地方find证书文件。 在这种情况下,我只是将OpenCSW的/etc/opt/csw/ssl/cert.pem链接到预期的位置。

检查ruby希望find它的地方:

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

那么,如果有差异,请将其链接起来:

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

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

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

对于Windows用户:

在可以访问因特网的testing机器上成功安装Ruby 2.2.3(+ ruby​​gems 2.5.1)之后,我在networking中的生产计算机上安装捆绑器时发生了此SSL错误。

由于我有networking访问限制,并且没有办法改变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 \gem

捆绑,1.11.2.gem

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

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

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

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

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

作为一个Windows 10的用户,我遵循了Dheerendra的回答 ,有一天它为我工作。 第二天,我又遇到了这个问题,他的解决scheme没有奏效。 对我来说,解决方法是使用以下命令更新bundler

gem update bundler

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

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

更多信息在这里