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
那么你可以做两件事情:
-
更新证书:
rvm osx-ssl-certs update all
-
更新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
找出在哪里坚持它
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
- 下载最新的压缩文件(在我的情况2.4.5)
- 解压缩
- 在解压后的文件夹中运行“ruby setup.rb”
- 现在运行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
尝试
gem update --system
希望它解决了这个问题。
我试图安装黄瓜gem时也遇到同样的问题。 但是我注意到,已经安装了ruby 2.0的bundler gem。 我在所需的gem项目文件夹中创build了一个Gemfile.rb,然后执行这个步骤
- 导航到项目文件夹
- 键入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(+ rubygems 2.5.1)之后,我在networking中的生产计算机上安装捆绑器时发生了此SSL错误。
由于我有networking访问限制,并且没有办法改变SSL访问的设置,并且根据错误消息,我执行了下面的步骤来完成捆绑器的安装(这听起来很疯狂,但是它工作…)。
通过无限制访问互联网的机器,下载了以下文件:
- spec.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 )
- bundler-1.11.2.gem( http://rubygems.global.ssl.fastly.net/gems/bundler-1.11.2.gem )
我将这些文件添加到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,如果没有的话,卸载它并用选项重新安装。
更多信息在这里