276

我正在尝试做 Michael Hartl 教程。当我尝试在我的 gemset 中安装 rails 3.2.14 时,出现以下问题:

$ gem install rails -v 3.2.14

错误:找不到有效的 gem '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 )

在谷歌搜索之后,我发现我可以为 ruby​​gems 使用非 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 )

如何完全删除此警告/错误?

我正在使用以下内容:

  • 转速 1.22.15
  • ruby 2.0.0p247(2013-06-27 修订版 41674)[x86_64-darwin12.3.0]
  • OSX 10.8.5
4

25 回答 25

386

对于 RVM 和 OSX 用户

确保使用最新的 rvm:

rvm get stable

然后你可以做两件事:

  1. 更新证书:

    rvm osx-ssl-certs update all
    
  2. 更新红宝石:

    rvm rubygems latest
    

对于非 RVM 用户

查找证书路径:

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进行修复。

于 2013-10-03T05:48:52.877 回答
243

最新发现...

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

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

弄清楚把它贴在哪里

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

然后只需复制 ../2.1.0/rubygems/ssl_certs/ 中的 .pem 文件并继续您的业务。

于 2014-12-04T15:52:10.340 回答
181

对于 Windows 用户

转到链接http://rubygems.org/pages/download

  1. 下载最新的 zip 文件(在我的例子中是 2.4.5)
  2. 解压
  3. 在解压缩的文件夹中运行“ruby setup.rb”
  4. 现在运行 gem install 命令
于 2014-12-24T20:13:54.870 回答
55

如果要使用非 SSL 源,请尝试先删除 HTTPS 源,然后添加 HTTP 源:

sudo gem sources -r https://rubygems.org
sudo gem sources -a http://rubygems.org  

更新:

正如 mpapis 所述,这应该仅用作临时解决方法。如果您通过非 SSL 源访问 RubyGems,则可能存在一些安全问题。

一旦不再需要解决方法,您应该恢复 SSL 源:

sudo gem sources -r http://rubygems.org
sudo gem sources -a https://rubygems.org
于 2013-10-04T11:15:04.667 回答
18

在 Windows 上,您必须使用HTTPsource 进行更新,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/

编辑:警告我不确定这是否安全。有谁知道红宝石包是否已签名?接受的答案看起来是一个更好的解决方案。

于 2015-03-18T12:53:07.463 回答
11

For Windows Users (and maybe others)

Rubygems.org has a guide that not only explains how to fix this problem, but also why so many people are having it: SSL Certificate Update The reason for the problem is rubygems.org switched to a more secure SSL certificate (SHA-2 which use 256bit encryption). The rubygems command line tool bundles the reference to the correct certificate. Therefore rubygems itself can’t be updated using an older version of rubygems. Rubygems must first be updated manually.

First find out what rubygems you have:

rubygems –v

Depending on whether you have a 1.8.x, 2.0.x or 2.2.x, you will need to download an update gem, named “rubygems-update-X.Y.Z.gem”, where X.Y.Z is the version you need. Running 1.8.x: download: https://github.com/rubygems/rubygems/releases/tag/v1.8.30 Running 2.0.x: download: https://github.com/rubygems/rubygems/releases/tag/v2.0.15 Running 2.2.x: download: https://github.com/rubygems/rubygems/releases/tag/v2.2.3

Install update gem:

gem install –-local full_path_to_the_gem_file

Run update gem:

update_rubygems --no-ri --no-rdoc

Check that rubygems was updated:

rubygems –v

Uninstall update gem:

gem uninstall rubygems-update -x

At this point, you may be OK. But it is possible that you do not have the latest public key file for the new certificate. To do this:

Download the latest certificate, (currently AddTrustExternalCARoot-2048.pem) from https://rubygems.org/pages/download. All of the certs are also located at: https://github.com/rubygems/rubygems/tree/master/lib/rubygems/ssl_certs

Find out where to put it:

gem which rubygems

Put this file in the “rubygems\ssl_certs” directory at this location.

As per rubygems commit, the certificates are moved to more specific directories. Thus, currently the certificate(AddTrustExternalCARoot-2048.pem) is expected to be on the following path lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

于 2015-04-14T22:03:02.207 回答
9

Try to use the source website for the gems, i.e rubygems.org. Use http instead of https. This method does not involve any work such as installing certs and all that.

Example -

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

This works, but there is one caveat though.

The gem is installed, but the documentation is not because of cert errors. Here is the error I get

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)
于 2015-01-10T00:35:12.207 回答
7

跑步gem update --system对我有用

于 2014-04-11T10:30:50.180 回答
5

确保您的系统时钟正确

我今天在 VirtualBox 上运行的 Ubuntu 虚拟机上发生了这个确切的错误。在我注意到我已经从一个非常古老的暂停状态恢复之前,我尝试了上面显示的大多数解决方案,并且我的时钟已经关闭了很多天。

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

sudo service ntp stop && sudo ntpdate pool.ntp.org && sudo service ntp start

于 2015-09-25T00:19:15.810 回答
4

只需使用自制软件卸载并重新安装 openssl 即可为我解决此问题。

brew uninstall --force openssl

brew install openssl

于 2016-10-07T05:13:24.623 回答
3

对于 Fedora 用户

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

curl -o `ruby -ropenssl -e 'p OpenSSL::X509::DEFAULT_CERT_FILE' |tr -d \"` http://curl.haxx.se/ca/cacert.pem
于 2014-09-01T02:02:39.440 回答
3

如果您使用的是 Windows,请使用 Internet Explorer打开https://rubygems.org/ 。

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

于 2014-09-12T10:36:29.487 回答
3

可以使用 HTTP 而不是 HTTPS 自动下载 gem 的方法/单线:

printf -- '---\n:sources:\n- http://rubygems.org\n' | tee ~/.gemrc
于 2019-07-11T15:52:18.043 回答
2

就我而言,Ubuntu CA 证书已过期。我通过运行修复它:

 sudo update-ca-certificates
于 2015-04-14T09:44:23.327 回答
2

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

现在通过设置 SSL_CERT_FILE 让 ruby​​ 知道你的证书授权包。要在当前的命令提示符会话中设置它,请键入:

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

于 2019-11-08T16:15:51.427 回答
1

尝试

gem update --system

希望它能解决问题。

于 2017-01-11T06:33:52.917 回答
1

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

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

于 2021-10-27T16:15:18.293 回答
1

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

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

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

任何人都可以按照以下链接中给出的简单步骤找到他的解决方案

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

于 2015-08-17T06:28:48.250 回答
0

对于使用 OpenCSW pkgutil 的 Illumos / Solaris:

在“gem install”之前安装 CSWcacertificates

pkgutil -yi CSWcacertificates

如果您使用的不是来自 OpenCSW 的 ruby​​ 工具包,您的 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
于 2015-02-23T01:29:18.813 回答
0

我在尝试安装黄瓜 gem 时遇到了同样的问题。但是我注意到捆绑器 gem 已经安装了 ruby​​ 2.0。我在项目文件夹中创建了一个 Gemfile.rb ,其中包含所需的 gem,并按照以下步骤操作

  1. 导航到项目文件夹
  2. 键入捆绑安装

已安装所有必需的 gem。

于 2014-01-13T15:35:37.903 回答
0

确保您已使用--disable-binary选项安装了 ruby​​,如果没有,请将其卸载并使用该选项重新安装。

更多信息在这里

于 2016-09-18T04:40:03.060 回答
0

答案不再有效。因为我现在遇到了旧版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\rubies\Ruby-2.4\lib\ruby\2.4.0\rubygems\ssl_certs\rubygems.org
C:\prg_sdk\rubies\Ruby-2.4\lib\ruby\2.4.0\rubygems\ssl_certs\index.rubygems.org

到目的地(再次根据您的需要调整):
C:\prg_sdk\rubies\Ruby231-p112-x64\lib\ruby\2.3.0\rubygems\ssl_certs

于 2018-04-03T07:44:36.930 回答
0

作为 Windows 10 用户,我遵循了 Dheerendra 的回答,并且有一天它对我有用。第二天,我又遇到了这个问题,他的修复没有奏效。对我来说,解决方法是更新bundler

gem update bundler

我相信我的版本bundler已经超过几个月了。

于 2016-10-25T02:07:53.333 回答
0

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

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

于 2015-12-09T04:49:46.853 回答
0

对于 Windows 用户:

在可以访问 Internet 的测试机器上成功安装 Ruby 2.2.3 (+ ruby​​gems 2.5.1) 后,当我在网络内的生产机器上安装 bundler 时出现此 SSL 错误。

由于我有网络访问限制,并且无法更改 SSL 访问设置,并且根据错误消息,我执行了以下步骤以完成捆绑程序的安装(这听起来可能很疯狂,但它工作...)。

通过可以不受限制地访问互联网的机器,下载了以下文件:

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

  • $INTRANET_HOME

spec.4.8.gz 和 latest_specs.4.8.gz

  • $INTRANET_HOME\quick\Marshal.4.8

捆绑器-1.11.2.gemspec.rz

  • $INTRANET_HOME\gems

捆绑器-1.11.2.gem

然后我添加了我的 Intranet 以访问 gem 源:

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

我在安装后成功运行了“gem install bundler”,只需要删除我的 gem 内部网:

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

我希望这在任何类似情况下都有用....

于 2016-01-21T17:58:47.920 回答