当我在 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 install multi_json -v '1.3.2'
)安装 gem 时,它可以工作。其他几个宝石也会出现同样的问题。我使用 RVM (1.12.3)、ruby 1.9.2、bundler 1.1.3。
如何解决?
source "https://rubygems.org''
并运行“gem update --system”来修复它。您可以找到更多信息here。
更新
现在我已经从这个答案中挖掘了足够多的业力,每个人都应该知道这应该已经解决了。
回复:再次通过 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而不是https
将 ssl gem 源替换为非 ssl 作为临时解决方案:
宝石来源 -r https://rubygems.org/
宝石来源 -a http://rubygems.org/
原因是旧的红宝石。您需要先使用非 ssl 源更新系统部分:
gem update --system --source http://rubygems.org/
(使用非 SSL 连接临时更新系统部分)。
现在您可以使用 gem update
。
如果您在 Mac 上使用最新版本的 RVM(~1.20),以下命令对我有用。
rvm osx-ssl-certs update
这个问题现在应该得到解决。更新 rubygems (gem update --system
),确保 openssl 在您的操作系统上是最新版本,或者尝试以下提示,它仍然无法正常工作:http://railsapps.github.com/openssl-certificate-verify-failed.html
临时解决方案(如 Ownatik 所述):
在主路径中创建或修改名为 .gemrc 的文件,包括行 :ssl_verify_mode: 0
这将阻止捆绑程序在尝试安装 gems 时检查它们的 SSL 证书。
对于 *nix 设备,“主路径”表示 ~/.gemrc
。如果您愿意,也可以创建 /etc/gemrc
。对于 Windows XP,“主路径”表示 c:\Documents and Settings\All Users\Application Data\gemrc
。对于 Windows 7,C:\ProgramData\gemrc
%USERPROFILE%\.gemrc
在 Windows 上也被 gem
搜索。
~/.gemrc
时也有效::sources: - http://rubygems.org
在 windows7 上,您可以从 here 下载 cacert.pem 文件并将环境变量 SSL_CERT_FILE 设置为您存储证书的路径,例如
SET SSL_CERT_FILE="C:\users\<username>\cacert.pem"
或者您可以像这样在脚本中设置变量 ENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"
将
这个问题的真正解决方案,如果您使用的是 RVM:
更新 rubygems:gem update --system 使用 RVM 刷新 SSL 证书:rvm osx-ssl-certs update all
向this tip on the RailsApps project致敬!
rvm osx-ssl-certs update all
对我来说效果很好。不需要执行第 1 步。
您可以从 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)
SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt gem update --system
对于那些通过 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 下载 gem,如果出现中间人攻击等问题,它会失败,这比关闭安全性要好得多。
cacert.pem
或 $rvm_path/usr/ssl
)确实是正确的方法。
:ssl_verify_mode: 0
,打开问题)与它下面的 3 个解决方案中的任何一个之间的区别,它们是解决此问题的正确方法。
这已修复
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
此处给出的关于 .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 等其他文件一起列出。
同样的问题,但这里有不同的宝石:
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
最简单的解决方案:
rvm pkg install openssl
rvm reinstall all --force
瞧!
rvm pkg
现在已被弃用。
我对 Windows 的永久修复:
下载 CACert ,从 http://guides.rubygems.org/ssl-certificate-update/ 保存为 C:\ruby\ssl_certs\GlobalSignRootCA.pem 创建名为“SSL_CERT_FILE”的系统变量,设置为 C:\ruby\ssl_certs\ GlobalSignRootCA.pem。再试一次: gem install bundler:
C:\gem sources *** CURRENT SOURCES *** https://rubygems.org/ C:\gem install bundler Fetching: bundler-1.13.5.gem (100%) 成功安装 bundler-1.13.5 安装了 1 个 gem
在 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
时会发生这种情况。
这是 Ubuntu 12.04 上的 OpenSSL 的问题。请参阅Rubygems issue #319。
要解决此问题,请在 Ubuntu 12.04 上运行 apt-get update && apt-get upgrade
以升级您的 OpenSSL。
我能够追查到这样一个事实,即 rvm
下载的二进制文件不能很好地与 OS X 的 OpenSSL 配合使用,该 OpenSSL 很旧,操作系统不再使用。
我的解决方案是在通过 rvm
安装 Ruby 时强制编译:
rvm reinstall --disable-binary 2.2
感谢@Alexander.Iljushkin:
gem update --system --source http://rubygems.org/
之后捆绑器仍然失败,解决方案是:
gem install bundler
我遇到了类似的错误。以下是我解决此问题的方法:在您的路径目录中,检查 Gemfile。将 gemfile 中的源代码编辑为 http 而不是 https 并保存。这可能会在没有 SSL 证书 issue.l 的情况下安装捆绑程序
对于 Windows 机器,检查您的 gem 版本
gem --version
然后按如下方式更新您的 gem:
运行 1.8.x:下载 1.8.30
运行 2.0.x:下载 2.0.15
运行 2.2.x:下载 2.2.3
请将该文件下载到您以后可以指向的目录中(例如,您的硬盘驱动器 C 的根目录:)
现在,使用您的命令提示符:
C:\>gem install --local C:\rubygems-update-1.8.30.gem
C:\>update_rubygems --no-ri --no-rdoc
现在,捆绑安装将成功,没有 SSL 证书验证错误。
更详细的说明是 here
这对我有用:
在 https://rubygems.org/pages/download 下载最新的 gem
使用 gem install --local [下载的 gem 文件的路径] 安装 gem
使用 update_rubygems 更新 gem
使用 gem --version 检查您是否使用最新的 gem 版本
我不得不重新安装openssl:
brew uninstall --force openssl
brew install openssl
我最近刚遇到此问题,并按照 here 中列出的步骤进行操作。您可能没有指向正确的 OpenSSL 证书。运行后:
rvm osx-ssl-certs status all
rvm osx-ssl-certs update all
和
export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
捆绑完成运行!
下载 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
请注意,如果您从 SSL 证书受内部证书颁发机构信任的来源获取 gem(或者您通过具有 SSL 检查的公司 Web 代理连接到外部来源),请将 SSL_CERT_FILE env 变量指向您的证书链.这很可能只需要将您的根证书从您的证书存储(macOS 上的系统钥匙串)导出到您的 shell 的可访问位置,即:
export SSL_CERT_FILE=~/RootCert.pem
如果您使用的是 rails-assets
如果您使用 https://rails-assets.org/
来管理您的资产,那么没有任何答案可以帮助您。即使转换为 http
也无济于事。
最简单的解决方法是改用此源 http://insecure.rails-assets.org
。这已在他们的 homepage 中提及。
在旧版 Windows 系统和 ruby 1.9 版本上唯一对我有用的是从 http://guides.rubygems.org/ssl-certificate-update/ 下载 cacert 文件
然后在运行 bundle install 之前运行以下命令
bundle config --global ssl_ca_cert /path/to/file.pem
vendor
目录中包含 gem)复制到我在问题中写的服务器。Latest version currently installed. Aborting.
的输出还有其他想法吗?gem update --system
失败并出现完全相同的证书错误:\