首页 文章

捆绑安装失败,出现SSL证书验证错误

提问于
浏览
257

当我在Centos 5.5上为我的Rails 3项目运行 bundle install 时,它失败并出现错误:

Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 
read server certificate B: certificate verify failed 
(https://bb-m.rubygems.org/gems/multi_json-1.3.2.gem)
An error occured while installing multi_json (1.3.2), and Bundler cannot continue.
Make sure that `gem install multi_json -v '1.3.2'` succeeds before bundling.

当我尝试手动安装gem(通过 gem install multi_json -v '1.3.2' )时,它可以工作 . 其他几个宝石也会出现同样的问题 . 我使用RVM(1.12.3),ruby 1.9.2,bundler 1.1.3 .

怎么解决?

28 回答

  • 3

    如果您使用的是Mac并使用最新版本的RVM(~1.20),则以下命令对我有用 .

    rvm osx-ssl-certs update
    
  • 7

    现在应该修复此问题 . 更新rubygems( gem update --system ),确保openssl在您的操作系统上是最新版本,或尝试这些提示仍然无效:http://railsapps.github.com/openssl-certificate-verify-failed.html

  • 0

    原因是旧的rubygems . 您需要先使用非ssl源更新系统部件:

    gem update --system --source http://rubygems.org/ (使用非ssl连接临时更新系统部件) .

    现在您已准备好使用 gem update .

  • 306

    Update

    既然我已经从这个答案中挖掘出足够的业力,那么每个人都应该知道这应该已经解决了 .

    re:再次通过Ownatik bundle install fails with SSL certificate verification error

    gem update --system
    

    我的答案仍然是正确的,如果最终不适合你,请留下以供参考 .


    老实说,最好的临时解决方案是

    [...]在gemfile中使用非ssl版本的rubygems作为临时解决方法 .

    通过用户Ownatik

    他们的意思是在rails应用程序目录中 Gemfile 的顶部更改

    source 'https://rubygems.org'

    source 'http://rubygems.org'

    请注意第二个版本是http而不是http s

  • 3

    将ssl gem源替换为非ssl作为临时解决方案:

  • 1

    临时解决方案(由Ownatik提及):

    在主路径中创建或修改名为.gemrc的文件,包括行 :ssl_verify_mode: 0

    这将阻止Bundler在尝试安装时检查gem的SSL证书 .

    对于* nix设备,'home path'表示 ~/.gemrc . 如果您愿意,也可以创建 /etc/gemrc . 对于Windows XP,'home path'表示 c:\Documents and Settings\All Users\Application Data\gemrc . 对于Windows 7, C:\ProgramData\gemrc

  • 1

    在Windows7上,您可以从here下载cacert.pem文件,并将environementvariable SSL_CERT_FILE设置为存储证书的路径,例如

    SET SSL_CERT_FILE="C:\users\<username>\cacert.pem"
    

    或者您可以在脚本中设置变量 ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"

    用您自己的用户名替换<username> .

  • 3

    如果您使用RVM,这个问题的真正解决方案是:

    • 更新rubygems: gem update --system

    • 使用RVM刷新SSL证书: rvm osx-ssl-certs update all

    帽子提示this tip on the RailsApps project

  • 15

    对于那些通过RVM安装了ruby并希望快速修复的人(更喜欢不按照Bruno的请求阅读),试试这个:

    rvm remove 1.9.x (or whatever version of ruby you are using)
    rvm pkg install openssl
    rvm install 1.9.2 --with-openssl-dir=$rvm_path/usr
    

    有关更多详细信息,请参阅此处找到解决方案的链接 .

    http://railsapps.github.com/openssl-certificate-verify-failed.html

    顺便说一下,我没有必要在Ubuntu上触摸我的证书 .

    最重要的是,这不是一种解决方法 . 它将通过SSL下载宝石并且如果出现类似中间攻击中的人的问题则会失败,这比仅仅关闭安全性要好得多 .

  • 5

    这已得到修复

    http://guides.rubygems.org/ssl-certificate-update/

    现在RubyGems 2.6.x已经发布,您可以手动更新到此版本 .

    下载https://rubygems.org/downloads/rubygems-update-2.6.7.gem

    请将文件下载到以后可以指向的目录中(例如,硬盘C的根目录:)

    现在,使用命令提示符:

    C:\>gem install --local C:\rubygems-update-2.6.7.gem
    C:\>update_rubygems --no-ri --no-rdoc
    

    在此之后,gem --version应该报告新的更新版本 .

    您现在可以安全地卸载rubygems-update gem:

    C:\>gem uninstall rubygems-update -x
    
  • 2

    您可以从curl的网站http://curl.haxx.se/ca/cacert.pem下载CA证书列表

    然后设置SSL_CERT_FILE环境变量以告诉Ruby使用它 . 例如,在Linux中:

    $ SSL_CERT_FILE=~/cacert.pem bundle install
    

    (参考:https://gist.github.com/fnichol/867550

  • 113

    这里给出的关于.pem文件的简单复制粘贴指令

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

    证书验证失败

    如果您已经阅读了前面的章节,您将会知道这意味着什么(如果您还没有,那么就会羞辱您) . 我们需要下载AddTrustExternalCARoot-2048.pem . 打开命令提示符并输入:C:> gem which rubygems C:/Ruby21/lib/ruby/2.1.0/rubygems.rb现在,让我们找到该目录 . 在同一个窗口中,输入路径部分直到文件扩展名,但是使用反斜杠:C:> start C:\ Ruby21 \ lib \ ruby \ 2.1.0 \ rubygems这将在我们指示的目录中打开一个资源管理器窗口 . 步骤3:复制新的信任证书现在,找到ssl_certs目录并复制我们从上一步中获得的.pem文件 . 它将与GeoTrustGlobalCA.pem等其他文件一起列出 .

  • 5

    相同问题,但在这里有不同的宝石:

    Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 
    read server certificate B: certificate verify failed 
    (https://bb-m.rubygems.org/gems/builder-3.0.0.gem)
    An error occured while installing builder (3.0.0), and Bundler cannot continue.
    Make sure that `gem install builder -v '3.0.0'` succeeds before bundling.
    

    暂时解决: gem install builder -v '3.0.0' 使得继续 bundle install 成为可能

  • 222

    这是您如何在Windows上解决此问题:

    下载.perm文件,然后在命令提示符下设置SSL_CERT_FILE

    https://gist.github.com/fnichol/867550

  • 4

    我在Ubuntu 12.04上得到了一个稍微不同的错误,尽管可能有相关的错误:

    Gem::RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure (https://d2chzxaqi4y7f8.cloudfront.net/gems/activesupport-3.2.3.gem)
    An error occured while installing activesupport (3.2.3), and Bundler cannot continue.
    Make sure that `gem install activesupport -v '3.2.3'` succeeds before bundling.
    

    当我在Gemfile中使用 source 'https://rubygems.org' 运行 bundle install 时会发生这种情况 .

    这是OpenSSL在Ubuntu 12.04上的一个问题 . 见Rubygems issue #319 .

    要解决此问题,请在Ubuntu 12.04上运行 apt-get update && apt-get upgrade 以升级OpenSSL .

  • 2

    最简单的解决方案:

    rvm pkg install openssl
    rvm reinstall all --force
    

    瞧!

  • 55

    我能够追踪到这样一个事实: rvm 下载的二进制文件与OS X的OpenSSL不一致,后者已经过时并且不再被操作系统使用 .

    我的解决方案是在通过 rvm 安装Ruby时强制编译:

    rvm reinstall --disable-binary 2.2
    
  • 3

    我对Windows的永久修复:

    C:\宝石来源
    当前来源
    https://rubygems.org/

    C:\ gem install bundler
    获取:bundler-1.13.5.gem(100%)
    已成功安装bundler-1.13.5
    安装1个宝石

  • 3

    感谢@ Alexander.Iljushkin:

    gem update --system --source http://rubygems.org/

    在该捆绑包仍然失败后,解决方案是:

    gem install bundler

  • 4

    我收到了类似的错误 . 以下是我解决这个问题的方法:在路径目录中,检查Gemfile . 将gemfile中的源编辑为http而不是https并保存 . 这可能会在没有SSL证书问题的情况下安装捆绑包

  • 6

    对于Windows机器,请检查您的宝石版本

    gem --version
    

    然后更新您的gem如下:

    请将文件下载到以后可以指向的目录中(例如,硬盘驱动器的根目录C :)

    现在,使用命令提示符:

    C:\>gem install --local C:\rubygems-update-1.8.30.gem
    C:\>update_rubygems --no-ri --no-rdoc
    

    现在,捆绑安装将成功,没有SSL证书验证错误 .

    更详细的说明是here

  • 1

    这对我有用:

    • https://rubygems.org/pages/download下载最新宝石

    • gem install --local [path to downloaded gem file] 安装宝石

    • update_rubygems 更新宝石

    • 使用 gem --version 检查您是否使用最新的宝石版本

  • 1

    我不得不重新安装openssl:

    brew uninstall --force openssl
    brew install openssl
    
  • 161

    我刚刚遇到这个问题并按照here概述的步骤进行了操作 . 您可能没有指向正确的OpenSSL证书 . 运行后:

    rvm osx-ssl-certs status all
    rvm osx-ssl-certs update all
    

    export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
    

    捆绑完了!

  • 0

    下载rubygems-update-2.6.7.gem .

    现在,使用命令提示符:

    C:\>gem install --local C:\rubygems-update-2.6.7.gem
    C:\>update_rubygems --no-ri --no-rdoc
    

    在此之后, gem --version 应报告新的更新版本 .

    您现在可以安全地卸载rubygems-update gem:

    C:\>gem uninstall rubygems-update -x
    Removing update_rubygems
    Successfully uninstalled rubygems-update-2.6.7
    
  • 49

    要注意的是,如果您从内部证书颁发机构信任SSL证书的源中获取gem(或者您通过具有SSL检查的公司Web代理连接到外部源),请将SSL_CERT_FILE env变量指向您的证书链 . 这很可能只需要将您的根证书从证书存储区(macOS上的系统密钥链)导出到您的shell的可访问位置,即:

    export SSL_CERT_FILE=~/RootCert.pem
    
  • 0

    如果您正在使用rails-assets

    如果您使用 https://rails-assets.org/ 来管理您的资产,没有答案可以帮助您 . 即使转换为 http 也无济于事 .

    最简单的解决方法是使用此源代码, http://insecure.rails-assets.org . 这已在他们的homepage中提到过 .

  • 16

    在遗留的Windows系统和ruby 1.9版本上唯一对我有用的是从http://guides.rubygems.org/ssl-certificate-update/下载cacert文件

    然后在运行bundle install之前运行以下命令

    bundle config --global ssl_ca_cert /path/to/file.pem
    

相关问题