bundle安装失败,SSL证书validation错误
当我在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'
)它工作。 其他几个gem也会出现同样的问题。 我使用RVM(1.12.3),ruby 1.9.2,bundler 1.1.3。
如何解决它?
更新
现在,我已经从这个答案挖掘足够的业力,每个人都应该知道,这应该已经修复。
重新:通过Ownatik再捆绑安装失败与SSL证书validation错误
gem update --system
如果这个结果不适合你,我的答案仍然是正确的,留在下面供参考。
老实说,最好的临时解决办法是
在您的gemfile中使用非ssl版本的rubygems作为临时解决方法。
通过用户Ownatik
他们的意思是在您的rails应用程序目录中的Gemfile
的顶部更改
source 'https://rubygems.org'
至
source 'http://rubygems.org'
请注意,第二个版本是http而不是http
用非SSL作为临时解决schemereplacessl gem源代码:
- gem来源-r https://rubygems.org/
- gem来源 – 一个http://rubygems.org/
原因是老rubygems。 您需要先使用非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
临时解决scheme(由Ownatik提及):
在主path中创build或修改名为.gemrc的文件,包括以下行:ssl_verify_mode: 0
这将防止打包者在尝试安装时检查gem的SSL证书。
对于* nix设备,“主path”是指~/.gemrc
。 如果您愿意,也可以创build/etc/gemrc
。 对于Windows XP,“主path”表示c:\Documents and Settings\All Users\Application Data\gemrc
。 对于Windows 7, C:\ProgramData\gemrc
在windows7上,您可以从这里下载cacert.pem文件,并将environementvariable SSL_CERT_FILE设置为存储证书的path,例如
SET SSL_CERT_FILE="C:\users\<username>\cacert.pem"
或者你可以像这样在脚本中设置variablesENV['SSL_CERT_FILE']="C:/users/<username>/cacert.pem"
用你自己的用户名replace<username>。
这个问题的真正的解决scheme,如果您使用RVM:
- 更新rubygems:
gem update --system
- 使用RVM刷新SSL证书:
rvm osx-ssl-certs update all
在RailsApps项目上给这个提示的提示
对于那些通过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
更多细节,这里是我find解决scheme的链接。
http://railsapps.github.com/openssl-certificate-verify-failed.html
顺便说一句,我没有在Ubuntu上碰我的证书。
最棒的是,这不是一个解决方法。 它会通过SSL下载gem,如果出现中间人攻击等问题,就会失败,这比仅仅closures安全性要好得多。
这已被修复
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
您可以从curl的网站http://curl.haxx.se/ca/cacert.pem下载CA证书列表;
然后设置SSL_CERT_FILE环境variables来告诉Ruby使用它。 例如,在Linux中:
$ SSL_CERT_FILE=~/cacert.pem bundle install
(参考: https : //gist.github.com/fnichol/867550 )
这里给出的简单的复制粘贴指令.pem文件
https://gist.github.com/luislavena/f064211759ee0f806c88
证书validation失败
如果你已经阅读了前面的章节,你就会知道这意味着什么(如果你还没有觉得羞愧的话)。
我们需要下载AddTrustExternalCARoot-2048.pem 。 打开命令提示符并键入:
C:> gem which rubygems C:/Ruby21/lib/ruby/2.1.0/rubygems.rb现在,让我们find那个目录。 在同一窗口中,input文件扩展名的path部分,但使用反斜杠:
C:> start C:\ Ruby21 \ lib \ ruby \ 2.1.0 \ rubygems这将在我们指定的目录内打开一个资源pipe理器窗口。
第3步:复制新的信任证书
现在,findssl_certs目录并复制我们从上一步获得的.pem文件。
它将与其他文件(如GeoTrustGlobalCA.pem)一起列出。
同样的问题,但在这里有不同的gem:
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.
暂时的解决scheme: gem install builder -v '3.0.0'
可以继续bundle install
在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问题#319 。
为了解决这个问题,在Ubuntu 12.04上运行apt-get update && apt-get upgrade
来升级你的OpenSSL。
最简单的解决scheme:
rvm pkg install openssl rvm reinstall all --force
瞧!
我能够跟踪到这一事实,即rvm
下载的二进制文件不能很好地与OS X的OpenSSL相rvm
,而OS X的旧版本已经不再被操作系统所使用。
我的解决scheme是通过rvm
安装Ruby时强制编译:
rvm reinstall --disable-binary 2.2
我对Windows的永久修复:
-
从http://guides.rubygems.org/ssl-certificate-update/下载CACert ,保存为
C:\ruby\ssl_certs\GlobalSignRootCA.pem
。 -
创build名为“ SSL_CERT_FILE ”的系统variables,设置为
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%) Successfully installed bundler-1.13.5 1 gem installed
Thx to @ Alexander.Iljushkin为:
gem update --system --source http://rubygems.org/
之后,捆绑商仍然失败,解决scheme是:
gem install bundler
我得到了类似的错误。 这是我如何解决这个问题:在你的path目录中,检查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证书validation错误。
更详细的说明在这里
这对我工作:
- 在https://rubygems.org/pages/download下载最新的gem
- 用
gem install --local [path to downloaded gem file]
- 用
update_rubygems
更新gem - 检查您是否在使用
gem --version
的最新版本
我不得不重新安装openssl:
brew uninstall --force openssl brew install openssl
我刚刚刚刚面对这个问题,并按照这里列出的步骤。 有可能你没有指向正确的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证书源(或者通过具有SSL检查的公司Web代理连接到外部源)获取gem,请将您的SSL_CERT_FILE envvariables指向您的证书链。 这很可能只需要从您的证书存储(MacOS上的系统密钥链)将您的根证书导出到您的shell中可访问的位置,即:
export SSL_CERT_FILE=~/RootCert.pem
如果您使用rails-assets
如果您使用https://rails-assets.org/
来pipe理您的资产,则没有任何答案可以帮助您。 即使转换为http
也无济于事。
最简单的解决方法是使用这个来源, http://insecure.rails-assets.org
。 这已经在他们的主页中提到。
在传统的Windows系统和Ruby 1.9版本上唯一的工作是从http://guides.rubygems.org/ssl-certificate-update/下载cacert文件。;
然后在运行软件包安装之前运行下面的命令
bundle config --global ssl_ca_cert /path/to/file.pem