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

我的环境是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时,我得到以下内容:

$ 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本身有帮助,但不能从我能说的单个gem中做到这一点。

– 解决方法

好的 – 获取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/ 

更好的grep正则表达式可以缓解一些缺乏安全性的问题,但它仍然不安全。 请注意, wget https://可以正常使用,因此ssl问题肯定是使用rubygems。

我有同样的问题,并使用以下“解决方法” – cd到您的rails应用程序目录并运行以下

 gem source -a http://rubygems.org/ 

当您运行’gem install …’命令时,这将使用不安全的http连接而不是安全的https。 这不是理想的,但它是一个短期的工作。

您可能还需要更改gemfile中的源代码行

 source 'https://rubygems.org' 

 source 'http://rubygems.org' 

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

 rvm osx-ssl-certs update all 

@ tnum的回答让我得到了我需要的东西而没有安全但我想解释这个问题。

我安装了ruby 2.3.1,并且该版本的所有function都有效。 我试图找出差异是什么,并想出了这个:

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上。

这些证书可能存在的位置太多,这太混乱了。