安装rubygems时,SSL错误,无法从'https://rubygems.org/提取数据

我在做迈克尔·哈特尔的教程。当我试图在我的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返回=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
155603 次浏览

对于RVM &OSX用户

确保你使用最新的rvm:

rvm get stable

然后你可以做两件事:

  1. < p >更新证书:

    rvm osx-ssl-certs update all
    
  2. Update rubygems:

    rvm rubygems latest
    

For non RVM users

Find path for certificate:

cert_file=$(ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE')

生成证书:

security find-certificate -a -p /Library/Keychains/System.keychain > "$cert_file"
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> "$cert_file"

整个代码:https://github.com/wayneeseguin/rvm/blob/master/scripts/functions/osx-ssl-certs


适用于非OSX用户

确保更新包ca-certificates(在旧系统上它可能不可用——不要使用一个不再接收安全更新的旧系统)

Windows注意

窗口的Ruby安装程序构建是由Luis Lavena准备的,证书的路径将显示类似C:/Users/Luis/...的内容,请检查https://github.com/oneclick/rubyinstaller/issues/249以获取更多详细信息,并回答https://stackoverflow.com/a/27298259/497756以进行修复。

如果您想使用非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
我在尝试安装黄瓜宝石时遇到了同样的问题。然而,我注意到捆绑宝石已经安装在ruby 2.0。 我创建了一个Gemfile。在项目文件夹Rb中添加所需的宝石,并遵循以下步骤

  1. 导航到项目文件夹
  2. 类型包安装

所有需要的宝石安装。

运行gem update --system对我有用

对于Fedora用户

将cURL: http://curl.haxx.se/ca/cacert.pem提供的cert.pem更新为最新文件

curl -o `ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE' |tr -d \"` http://curl.haxx.se/ca/cacert.pem

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

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

最新发现……

https://gist.github.com/luislavena/f064211759ee0f806c88

下载< p >最重要的是…… https://raw.githubusercontent.com/rubygems/rubygems/master/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem < / p >

想想该把它放在哪里

C:\>gem which rubygems
C:/Ruby21/lib/ruby/2.1.0/rubygems.rb

然后复制../2.1.0/rubygems/ssl_certs/中的.pem文件,然后继续您的工作。

windows用户

去链接http://rubygems.org/pages/download

  1. 下载最新的zip文件(在我的例子中是2.4.5)
  2. 解压缩它
  3. 运行“ruby setup”。Rb "在解压缩文件夹
  4. 现在运行gem install命令

尝试使用宝石的源网站,如rubygems.org。使用http而不是https。这种方法不涉及任何工作,如安装证书和所有的。

的例子,

gem install typhoeus --source http://rubygems.org

这是可行的,但有一个警告。

gem已经安装,但是文档没有安装,因为存在证书错误。这是我得到的错误

Parsing documentation for typhoeus-0.7.0 WARNING: Unable to pull
data from 'https://rubygems.org/': SSL_connect returned=1 errno=0
state=SSLv3 read server certificate B: certificate verify failed
(https://rubygems.org/latest_specs.4.8.gz)

对于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

在Windows上,你必须使用HTTP source来更新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用户(或其他用户)

Rubygems.org有一个指南,不仅解释了如何解决这个问题,而且还解释了为什么这么多人都有这个问题:SSL证书更新 出现问题的原因是rubygems.org切换到更安全的SSL证书(使用256位加密的SHA-2)。rubygems命令行工具将引用绑定到正确的证书。因此,rubygems本身不能使用旧版本的rubygems进行更新。Rubygems必须首先手动更新

首先找出你有什么红宝石:

rubygems –v

取决于你是否有1.8。2.0 x。X或2.2。x,您将需要下载一个名为“rubygems-update-X.Y.Z”的更新gem。,其中X.Y.Z是您需要的版本。 1.8运行。x: download: https://github.com/rubygems/rubygems/releases/tag/v1.8.30 2.0运行。x: download: https://github.com/rubygems/rubygems/releases/tag/v2.0.15 2.2运行。x: download: https://github.com/rubygems/rubygems/releases/tag/v2.2.3

安装更新gem:

gem install –-local full_path_to_the_gem_file

运行update gem:

update_rubygems --no-ri --no-rdoc

检查rubygems是否更新:

rubygems –v

卸载更新gem:

gem uninstall rubygems-update -x

在这一点上,你可能没问题。但是,您可能没有新证书的最新公钥文件。这样做:

下载最新的证书(当前为AddTrustExternalCARoot-2048.pem) 从https://rubygems.org/pages/download。 所有的cert也位于:https://github.com/rubygems/rubygems/tree/master/lib/rubygems/ssl_certs

找出把它放在哪里:

gem which rubygems

将这个文件放在这个位置的“rubygems\ssl_certs”目录中。

根据rubygems提交,证书被移动到更特定的目录。因此,目前证书(AddTrustExternalCARoot-2048.pem)预计在以下路径lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

RubyGems(命令行工具)的特殊情况是,它需要在其代码中捆绑信任证书,即使在基本操作系统无法验证服务器的身份时,信任证书也允许RubyGems与服务器建立连接。

直到几个月前,这个证书都是由一个CA提供的,但是更新的证书是由另一个CA提供的。

因此,现有的RubyGems安装必须在证书切换之前进行更新,并留出足够的时间让更改传播(以及人们进行更新)。

任何人都可以通过下面链接中给出的简单步骤找到自己的解决方案

https://gist.github.com/luislavena/f064211759ee0f806c88

确保系统时钟正确

今天我在VirtualBox上运行的Ubuntu虚拟机上就发生了这样的错误。我尝试了上面列出的大多数解决方案,然后我注意到我已经从一个非常古老的暂停状态恢复过来,我的生物钟偏离了许多天。

更新时钟立即解决了我的问题。下面是我在我的例子中使用的命令:

Sudo服务NTP停止&&Sudo ntpdate pool.ntp.org &&Sudo服务NTP启动

或者像我一样被防火墙阻止。试试这个:

sudo gem install——http-proxy http://localhost:port cocoapods

Windows用户:

在一台可以访问internet的测试机器上成功安装Ruby 2.2.3 (+ rubygems 2.5.1)后,当我在网络内的生产机器上安装bundler时,我遇到了这个SSL错误。

由于我有网络访问限制,并且没有办法更改SSL访问的设置,并且根据错误消息,我执行以下步骤,以便能够完成绑定器的安装 (这可能听起来很疯狂,但它奏效了…).

通过一台不受限制地上网的机器,下载了以下文件:

我在内网服务器上添加了这些文件,保留了上面链接的文件夹结构:

  • INTRANET_HOME美元

Spec.4.8.gz e latest_specs.4.8.gz

  • 美元INTRANET_HOME \ \ Marshal.4.8快

bundler-1.11.2.gemspec.rz

  • 美元INTRANET_HOME \宝石

bundler-1.11.2.gem

然后我添加了我的内部网来访问gem源代码:

gem sources -a http://mydomain.com.br

我已经成功运行了“gem安装绑定器”安装后,它所需要的只是删除我的内部网的gem:

gem sources -r http://mydomain.com.br

我希望这是有用的在任何类似的情况....

确保你已经安装了带有——disable-binary选项的ruby,

.

.

.

更多信息here

简单地卸载和重新安装openssl与homebrew解决了这个问题。

brew uninstall --force openssl

brew install openssl

作为一个Windows 10用户,我遵循了Dheerendra的回答,有一天它为我工作了。第二天,我又遇到了这个问题,他的修复不起作用。对我来说,修复是更新bundler:

gem update bundler

我相信我的bundler版本已经不止几个月了。

试一试

gem update --system

希望这能解决问题。

这个答案不再有效。因为我现在遇到了旧的窗户 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 测试盒框)并执行以下操作

从这些目录复制证书(根据您的需要进行调整):
C:\prg_sdk\rubies\Ruby-2.4\lib\ruby\2.4.0\rubygems\ssl_certs\rubygems.org < br > C:\prg_sdk\rubies\Ruby-2.4\lib\ruby\2.4.0\rubygems\ssl_certs\index.rubygems.org < / p >

到目的地(再次调整到你需要的):
C:\prg_sdk\rubies\Ruby231-p112-x64\lib\ruby\2.3.0\rubygems\ssl_certs < / p >

可以使用HTTP而不是HTTPS自动下载gems的方法/一行程序:

printf -- '---\n:sources:\n- http://rubygems.org\n' | tee ~/.gemrc

下载cacert。http://curl.haxx.se/ca/cacert.pem中的pem文件。将文件保存到C:\RailsInstaller\cacert.pem。

现在,通过设置SSL_CERT_FILE,让ruby知道您的证书颁发机构包。要在当前命令提示符会话中设置此选项,输入:

设置SSL_CERT_FILE = C: \ RailsInstaller \ cacert.pem

对于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

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

rubygems下载最新版本的作品。我用的是窗户。