我的环境是Mac OS 10.10.5,ruby版本2.2.4(或2.2.2或2.2.0)gem(升级后)是2.6.7,rvm版本1.27.0。
即使在最近几天,这也有几个重复,但这比我在评论中提供的信息更多。
在任何版本的ruby上安装任何宝石时,我都会得到以下结果:
$ gem install bundler
ERROR: Could not find a valid gem 'bundler' (>= 0), 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上的问题。有关建议的解决方案,请参阅http://guides.rubygems.org/ssl-certificate-update/。我遵循这一点,但我继续得到同样的错误。
问题似乎在于将文件GlobalSignRootCA.pem放在适当的位置,这一点并不完全清楚。上面的链接解释了如何找到合适的ssl_certs目录,其中有2个在我的系统中,但都没有工作。
我忘了在哪里学到了以下内容:
$ ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_DIR'
/etc/openssl/certs
$ ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'
/etc/openssl/cert.pem
可能提供了一个提示但是将.pem文件附加到后者或复制到前者没有效果。
当我重新安装openssl(自制软件)时,它有用地告诉我:
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl/certs
and run
/usr/local/opt/openssl/bin/c_rehash
但这也无法解决问题。
来自另一个SO问题:
rvm osx-ssl-certs update all
不起作用。也不是:
security find-certificate -a -p /Library/Keychains/System.keychain > "$cert_file"
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$cert_file"
有谁知道如何了解rubygems在这里的期望?它想要这个文件在哪里,或者甚至是它想要的文件?我应该将.pem文件导入OSX钥匙串吗?如何做到这一点?
或者有没有办法获取gem文件并在本地安装? rubygems对rubygems本身有帮助,但对于我能说的单个宝石却没有。
- 解决方法
好的 - 获取宝石的问题的答案:转到https://rubygems.org/gems/[package name]
并选择版本并下载 - 目前位于右侧的链接下。下载文件和gem install --local [downloaded gem file]
。加上所有依赖项。
自动化:
# start by adding insecure source for --explain - thanks to @tnum
gem source -a http://rubygems.org/
while read x
do
wget https://rubygems.org/downloads/$x.gem
gem install --local $x.gem
rm $x.gem
done < <(gem install --explain [package name] | grep "^ ")
# remove insecure source
gem source -r http://rubygems.org/
更好的grep regex可以缓解一些缺乏安全性的问题,但它仍然不安全。请注意wget https://
有效,所以ssl问题肯定是rubygems。
答案 0 :(得分:5)
根据https://rvm.io/support/fixing-broken-ssl-certificates,上面的运行命令可以解决您的问题:
rvm osx-ssl-certs update all
答案 1 :(得分:2)
我遇到了同样的问题并使用了以下“工作” - 进入您的rails app目录并运行以下
gem source -a http://rubygems.org/
当您运行'gem install ...'命令时,这将使用不安全的http连接而不是安全的https。这不是理想的,但它是一个短期的工作。
您可能还需要从
更改gemfile中的源代码行source 'https://rubygems.org'
到
source 'http://rubygems.org'
答案 2 :(得分:1)
@ tnum的回答让我得到了我需要的东西而没有安全但我想解释这个问题。
我安装了ruby 2.3.1,并且该版本的所有功能都有效。我试图找出差异是什么,并想出了这个:
ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE'
提出了两个答案。对于2.2.4,它似乎使用自己的目录/etc/openssl/
,但对于2.3.1,它使用openssl version -d
在我的计算机上/etc/local/etc/openssl/
。
我将文件cert.pem从后者复制到前者,现在gem工作在ruby 2.2.4上。
这些证书可能存在的选项太多了,这太混乱了。