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

tpw*_*tpw 266 ruby ssl ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

然后,当我再次尝试安装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

mpa*_*pis 379

对于RVM和OSX用户

确保使用最新的rvm:

rvm get stable
Run Code Online (Sandbox Code Playgroud)

然后你可以做两件事:

  1. 更新证书:

    rvm osx-ssl-certs update all
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更新rubygems:

    rvm rubygems latest
    
    Run Code Online (Sandbox Code Playgroud)

对于非RVM用户

查找证书路径:

cert_file=$(ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE')
Run Code Online (Sandbox Code Playgroud)

生成证书:

security find-certificate -a -p /Library/Keychains/System.keychain > "$cert_file"
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$cert_file"
Run Code Online (Sandbox Code Playgroud)

整个代码:https://github.com/wayneeseguin/rvm/blob/master/scripts/functions/osx-ssl-certs


对于非OSX用户

确保更新包ca-certificates.(在旧系统上它可能不可用 - 不要使用不再接收安全更新的旧系统)

Windows注意

用于Windows 的Ruby安装程序构建由Luis Lavena准备,证书路径将显示类似于C:/Users/Luis/...检查https://github.com/oneclick/rubyinstaller/issues/249的更多详细信息和此答案/sf/answers/1910878161/进行修复.

  • 更新证书就可以了.+1 (14认同)
  • 对 Mac Mojave 用户有什么建议吗?遇到“权限被拒绝:/private/etc/ssl/cert.pem” (5认同)
  • +1为非RVM答案.无瑕. (4认同)
  • 我在Windows上运行它并得到我的计算机上甚至不存在的路径"C:/Users/Luis/Code/openknapsack/knap-build/var/knapsack/software/x86-windows/openssl/1.0.0k/ssl /cert.pem"也没有名为Luis的用户.我勒个去? (2认同)

bea*_*mes 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
Run Code Online (Sandbox Code Playgroud)

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

  • 下载链接不再有效.对于仍然面临此问题的人,请参阅Dheerendra的答案以获得解决方案 (9认同)
  • 确保使用`.pem`扩展名保存,而不是`.pem.txt`! (8认同)
  • 如果它不起作用怎么办?我按照你的回答说,但我仍然得到错误!1)我有文件`AddTrustExternalCARoot-2048.pem`,2)我把文件放到`C:\ Ruby193\lib\ruby​​\1.9.1\ruby​​gems\ssl_certs`,3)我运行`gem install susy`并得到相同的错误`无法从https://rubygems.org/下载数据 - SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器证书B:证书验证失败 (3认同)

Dhe*_*rni 174

对于Windows用户

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

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

  • Windows用户的最佳解决方案 (7认同)
  • 适用于Windows 10和Ruby 2.1.0.谢谢! (2认同)

Edu*_*rdo 53

如果要使用非SSL源,请先尝试删除HTTPS源,然后添加HTTP源:

sudo gem sources -r https://rubygems.org
sudo gem sources -a http://rubygems.org  
Run Code Online (Sandbox Code Playgroud)

更新:

正如mpapis所述,这应该仅用作临时解决方法.如果您通过非SSL源访问RubyGems,可能会有一些安全问题.

一旦不再需要变通方法,您应该恢复SSL源:

sudo gem sources -r http://rubygems.org
sudo gem sources -a https://rubygems.org
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,我必须做`sudo gem sources -r https:// ruby​​gems.org /`和`sudo gem sources -r http:// ruby​​gems.org /`.注意尾随的`/`. (5认同)

roo*_*oo2 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/
Run Code Online (Sandbox Code Playgroud)

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

  • 在我的情况下,我需要一个尾随/与https网址. (2认同)

Joh*_*icz 10

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

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

首先找出你有什么rubygems:

rubygems –v
Run Code Online (Sandbox Code Playgroud)

根据您是否具有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
Run Code Online (Sandbox Code Playgroud)

运行更新gem:

update_rubygems --no-ri --no-rdoc
Run Code Online (Sandbox Code Playgroud)

检查rubygems是否已更新:

rubygems –v
Run Code Online (Sandbox Code Playgroud)

卸载更新gem:

gem uninstall rubygems-update -x
Run Code Online (Sandbox Code Playgroud)

在这一点上,你可能没问题.但是,您可能没有新证书的最新公钥文件.去做这个:

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

找出它的位置:

gem which rubygems
Run Code Online (Sandbox Code Playgroud)

将此文件放在此位置的"rubygems\ssl_certs"目录中.

根据rubygems提交,证书将移动到更具体的目录.因此,目前证书(AddTrustExternalCARoot-2048.pem)应该在以下路径上lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

  • https://raw.githubusercontent.com/rubygems/rubygems/master/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem不再存在 (2认同)

Bor*_*yev 8

尝试使用源网站获取宝石,即rubygems.org.使用http而不是https.此方法不涉及任何工作,如安装证书等等.

示例 -

gem install typhoeus --source http://rubygems.org
Run Code Online (Sandbox Code Playgroud)

这有效,但有一点需要注意.

已安装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)
Run Code Online (Sandbox Code Playgroud)


use*_*293 7

跑步gem update --system对我有用

  • 这对我来说也适用于Windows.我不得不暂时切换到经典HTTP,然后更新,然后切换回SSL. (6认同)

小智 5

确保您的系统时钟正确

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

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

须藤服务 ntp 停止 && 须藤 ntpdate pool.ntp.org && 须藤服务 ntp 开始