无法在Mac OS上安装任何ruby gems - SSL_connect错误

alb*_*lbe 4 ruby macos ssl rubygems

我的环境是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)
Run Code Online (Sandbox Code Playgroud)

有很多关于此的信息,特别是对于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
Run Code Online (Sandbox Code Playgroud)

可能已经提示但是将.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
Run Code Online (Sandbox Code Playgroud)

但这也没有解决问题.

来自另一个SO问题:

rvm osx-ssl-certs update all
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)

有谁知道如何了解rubygems在这里的期望?它想要这个文件在哪里,或者甚至是它想要的文件?我应该将.pem文件导入OSX钥匙串吗?怎么做到这一点?

或者有没有办法获取gem文件并在本地安装?rubygems对rubygems本身有帮助,但对于我能说的单个宝石则没有.

- 解决方法

好的 - 关于从哪里获取gem的问题的答案:转到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/
Run Code Online (Sandbox Code Playgroud)

更好的grep正则表达式可以缓解一些缺乏安全性的问题,但它仍然不安全.请注意,wget https://因为ssl问题肯定与rubygems有关.

小智 5

根据https://rvm.io/support/fixing-broken-ssl-certificates,上面的运行命令将解决您的问题:

rvm osx-ssl-certs update all
Run Code Online (Sandbox Code Playgroud)