首页 文章

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

提问于
浏览
251

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

$ gem install rails -v 3.2.14错误:找不到有效的gem'rail'(= 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)

谷歌搜索后,我发现我可以使用非SSL来源rubygems所以我运行:

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

然后,当我再次尝试安装rails时,它成功了 . 但是,我仍然遇到上述问题,但作为警告:

警告:无法从“https://rubygems.org/”提取数据:SSL_connect返回= 1 errno = 0状态= 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修订版41674)[x86_64-darwin12.3.0]

  • OSX 10.8.5

22 回答

  • 174

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

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

    UPDATE:

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

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

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

    尝试

    gem update --system
    

    希望它能解决问题 .

  • 0

    简单地用homebrew卸载并重新安装openssl解决了这个问题 .

    brew uninstall --force openssl

    brew install openssl

  • 0

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

    sudo update-ca-certificates
    
  • 8

    gem update --system 为我工作

  • 7

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

    more info here

  • 0

    对于RVM和OSX用户

    确保使用最新的rvm:

    rvm get stable
    

    然后你可以做两件事:

    • 更新证书:
    rvm osx-ssl-certs update all
    
    • 更新rubygems:
    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注意事项

    用于Windows的Ruby Installer构建由Luis Lavena准备,证书路径将显示类似 C:/Users/Luis/... check https://github.com/oneclick/rubyinstaller/issues/249的内容以获取更多详细信息,此答案https://stackoverflow.com/a/27298259/497756用于修复 .

  • 3

    最新发现......

    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文件,继续关注您的业务 .

  • 3

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

    直到几个月前,此证书由一个CA提供,但较新的证书由另一个CA提供 .

    因此,在切换证书之前必须更新RubyGems的现有安装,并给予足够的时间让更改传播(以及更新人员)

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

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

  • 3

    作为Windows 10用户,我跟随Dheerendra的answer,它有一天对我有用 . 第二天,我再次遇到了这个问题,他的修复工作没有用 . 对我来说,修复是用以下内容更新 bundler

    gem update bundler

    我相信我的版本 bundler 已经有几个月了 .

  • 51

    对于Windows用户(以及其他人)

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

    首先找出你有什么rubygems:

    rubygems –v
    

    根据您是否具有1.8.x,2.0.x或2.2.x,您需要下载名为“rubygems-update-X.Y.Z.gem”的更新gem,其中X.Y.Z是您需要的版本 . 运行1.8.x:下载:https://github.com/rubygems/rubygems/releases/tag/v1.8.30运行2.0.x:下载:https://github.com/rubygems/rubygems/releases/tag/v2.0.15运行2.2.x:下载:https://github.com/rubygems/rubygems/releases/tag/v2.2.3

    安装更新gem:

    gem install –-local full_path_to_the_gem_file
    

    运行更新gem:

    update_rubygems --no-ri --no-rdoc
    

    检查rubygems是否已更新:

    rubygems –v
    

    卸载更新gem:

    gem uninstall rubygems-update -x
    

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

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

    找出它的位置:

    gem which rubygems
    

    将此文件放在此位置的“rubygems \ ssl_certs”目录中 .

    根据rubygems commit,证书将移动到更具体的目录 . 因此,目前证书(AddTrustExternalCARoot-2048.pem)应该位于以下路径 lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot-2048.pem

  • 2

    尝试使用宝石的源网站,即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)
    
  • 10

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

    • 导航到项目文件夹

    • 类型捆绑安装

    安装了所有必需的宝石 .

  • 241

    在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/
    

    编辑:警告 I'm not sure if this is safe . 有谁知道红宝石包是否签名?接受的答案看起来是更好的解决方案 .

  • 4

    对于Windows用户:

    在可访问互联网的测试机器上成功安装Ruby 2.2.3(rubygems 2.5.1)之后,当我在网络中的 生产环境 机器上安装了bundler时,我遇到了这个SSL错误 .

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

    通过无限制访问互联网的机器,下载以下文件:

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

    • $ INTRANET_HOME

    spec.4.8.gz e 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 sources -r http://mydomain.com.br
    

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

  • 14

    确保您的系统时钟正确

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

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

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

  • 1

    对于Fedora用户

    cert.pem 更新为cURL提供的最新文件: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
    
  • 0

    或者可能像我这样的防火墙阻止 . 试试这个:

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

  • 1

    对于Windows用户

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

    • 下载最新的zip文件(在我的情况下为2.4.5)

    • 解压缩它
      __599_在解压缩文件夹中运行"ruby setup.rb"

    • 现在运行gem install命令

  • 0

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

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

  • 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
    
  • 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

相关问题