我在做迈克尔·哈特尔的教程。当我试图在我的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 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
如果您想使用非ssl源,请尝试先删除HTTPS源,然后添加HTTP源:
sudo gem sources -r https://rubygems.org
sudo gem sources -a http://rubygems.org
更新:
正如mapi所述,这应该仅作为临时解决方案使用。如果您通过非ssl源访问RubyGems,可能会有一些安全问题。
一旦不再需要这个解决方案,你应该恢复SSL-source:
sudo gem sources -r http://rubygems.org
sudo gem sources -a https://rubygems.org
对于Illumos / Solaris使用OpenCSW pkgutil:
在“gem Install”之前安装cswcacercertificates
pkgutil -yi CSWcacertificates
如果您使用的ruby套件不是来自OpenCSW,那么您的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