我在做迈克尔·哈特尔的教程。当我试图在我的gemset中安装rails 3.2.14时,我得到以下问题:

$ gem install rails -v 3.2.14 错误:无法找到一个有效的宝石'rails'(= 3.2.14),这是为什么: 无法从https://rubygems.org/下载数据- SSL_connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败(https://s3.amazonaws.com/production.s3.rubygems.org/specs.4.8.gz)

在谷歌搜索之后,我发现我可以使用rubygems的非ssl源代码,所以我运行:

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

然后,当我再次尝试安装rails时,它成功了。然而,我仍然有上面的问题,但作为一个警告:

警告:无法从'https://rubygems.org/': SSL_connect returned=1 errno=0 state=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 revision 41674) [x86_64-darwin12.3.0] OSX 10.8.5


当前回答

对于Windows,我使用了https://gist.github.com/fnichol/867550。 我不得不手动下载“cacert”。pem”文件。(请访问https://curl.se/docs/caextract.html。) 把它放在任何不会被删除的文件夹中。

确保你把它添加到你的系统环境变量!!

我通过控制面板(选择用户帐户)做到了这一点(在Windows 10中),其中有一个选项“更改我的环境变量”。创建一个新变量,并将值设置为路径和文件名!

var name    SSL_CERT_FILE

var value   C:\{your_dir}\cacert.pem

这将确保它保持可见/可用的每次你需要它(即,每一个命令窗口,你打开)!

其他回答

这个答案不再有效。因为我现在遇到了旧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 \红宝石\ ruby - 2.4 \ lib \ ruby \测试盒框\ rubygems \ ssl_certs \ rubygems.org C: \ prg_sdk \红宝石\ ruby - 2.4 \ lib \ ruby \测试盒框\ rubygems \ ssl_certs \ index.rubygems.org

到达目的地(再次根据需要调整): C: \ prg_sdk \红宝石\ Ruby231-p112-x64 \ lib \ ruby \ tripwire \ rubygems \ ssl_certs

最新发现……

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源更新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包是签名的吗?公认的答案似乎是一个更好的解决方案。

在我的例子中,Ubuntu CA证书过期了。我通过运行:

 sudo update-ca-certificates

如果您使用的是windows,请使用ie浏览器打开https://rubygems.org/。

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