【问题标题】:Could not find valid gem: certificate verify failed找不到有效的 gem:证书验证失败
【发布时间】:2015-02-01 19:27:31
【问题描述】:

我正在尝试建立一个到远程服务器的 ssh 隧道,如下所述:SSH from Heroku into remote server with Mysql Db

但我只是简单地尝试下载宝石就挂了。我补充说:

# file: Gemfile
...
gem 'net-ssh-gateway', '~> 1.2.0'

但是当我在命令行上执行bundle install(或者甚至只是gem install net-ssh)时,我得到:

ERROR:  Could not find a valid gem 'net-ssh' (>= 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/latest_specs.4.8.gz)

根据 net-ssh (https://github.com/net-ssh/net-ssh) 的自述文件,我检查了我的 OpenSSL Ruby 绑定——它们看起来还不错:

$ ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
OpenSSL 1.0.1j 15 Oct 2014

我不确定这是否相关,但是当我尝试下载 .pem 文件以实现 gemfile 的高安全性下载时:

$ curl -O https://raw.github.com/net-ssh/net-ssh/master/gem-public_cert.pem

...它没有下载.pem文件,直接访问URL导致'找不到'。

其他信息:

$ rake about
About your application's environment
Ruby version              2.1.4-p265 (x86_64-darwin14.0)
RubyGems version          2.2.2
Rack version              1.5
Rails version             4.1.7

所以现在,我被困住了。有没有人认识到这个问题?

【问题讨论】:

  • Ruby gems.org 前几天遇到了 DNS 问题。我已经能够访问它并更新 gem,因此它已启动并可访问,但许多其他人无法访问它。

标签: ruby-on-rails ruby ssh openssl net-ssh


【解决方案1】:

大家好,请关注this 链接,这样您就不必每次都手动安装。

这表示问题出在 ruby​​gems 更改 ssl certasdaasdlashjd blah blah。 NVM 链接解释得最好:p

【讨论】:

    【解决方案2】:

    当我遇到证书问题时,这对我有帮助:

    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
    

    【讨论】:

    • 就我而言,在第一行,我必须在最后加上一个斜线:gem sources -r https://rubygems.org/
    【解决方案3】:

    尽管@the Tin Man 的回答很有帮助,但我的问题是我没有在 OpenSSL 可以找到它们的地方设置证书。

    遵循SSL Error When installing rubygems, Unable to pull data from 'https://rubygems.org/ 中的建议:

    较差的解决方法

    可以通过更改 Gemfile 的第一行来解决此问题

    source 'https://rubygems.org'
    

    非https形式:

    source 'http://rubygems.org'
    

    然后执行通常的bundle install。之后,您应该恢复 Gemfile 的第一行以使用 https 表单。这通常被认为是一种安全风险。

    此外,您还没有真正解决缺少有效证书的真正问题,如果您的应用程序调用使用 OpenSSL(例如 net-ssh),您将遇到麻烦。

    更好的修复

    SSL Error When installing rubygems, Unable to pull data from 'https://rubygems.org/。对于 OS X 用户,我们要求 Ruby 告诉我们它在哪里寻找证书文件,然后使用 security find-certificate 填充证书文件:

    $ cert_file=$(ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE')
    $ echo $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"
    

    完成此操作后,我可以毫无错误地调用bundle install

    【讨论】:

      最近更新 更多