#ruby 添加 gem 源的 ssl 异常问题解决记录
gem source --add 添加国内源时,报 ssl certificate 的异常,使用 http 问题也一样:
C:\WINDOWS\system32>gem sources --add http://gems.ruby-china.org
Error fetching http://gems.ruby-china.org:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://upyun.gems.ruby-china.org/specs.4.8.gz)
C:\WINDOWS\system32>gem sources --add https://gems.ruby-china.org
Error fetching https://gems.ruby-china.org:
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://gems.ruby-china.org/specs.4.8.gz)
Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。
C:\Users\haibor>ruby -v
ruby 2.1.7p400 (2015-08-18 revision 51632) [x64-mingw32]
C:\Users\haibor>rails -v
Rails 3.0.3
C:\Users\haibor>gem --version
2.6.2
1、升级 gem 的版本,及下载最新的证书。
官方地址:http://guides.rubygems.org/ssl-certificate-update/
*> C:\WINDOWS\system32>gem update --system *
Updating rubygems-update Fetching: rubygems-update-2.6.12.gem (100%) Successfully installed rubygems-update-2.6.12 Parsing documentation for rubygems-update-2.6.12 Installing ri documentation for rubygems-update-2.6.12 Installing darkfish documentation for rubygems-update-2.6.12 Done installing documentation for rubygems-update after 45 seconds Parsing documentation for rubygems-update-2.6.12 Done installing documentation for rubygems-update after 0 seconds Installing RubyGems 2.6.12 RubyGems 2.6.12 installed Parsing documentation for rubygems-2.6.12 Installing ri documentation for rubygems-2.6.12 RubyGems system software updated
> C:\WINDOWS\system32>gem --version
2.6.12(gem 升级后版本)
说明:用该新版本,添加 gem 源错误以旧!不过会多出更加详细的错误说明信息,这些信息对解决问题并没有什么帮助!继续: C:\WINDOWS\system32>gem sources --add http://gems.ruby-china.org
ERROR: SSL verification error at depth 1: unable to get local issuer certificate (20) ERROR: You must add /O=Digital Signature Trust Co./CN=DST Root CA X3 to your local trusted store Error fetching http://gems.ruby-china.org: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://upyun.gems.ruby-china.org/specs.4.8.gz)
C:\WINDOWS\system32>gem sources --add https://gems.ruby-china.org
ERROR: SSL verification error at depth 1: unable to get local issuer certificate (20) ERROR: You must add /O=Digital Signature Trust Co./CN=DST Root CA X3 to your local trusted store Error fetching https://gems.ruby-china.org: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://gems.ruby-china.org/specs.4.8.gz)
2、下载证书
定位 ruby gem 证书存放的位置:
> C:\WINDOWS\system32>gem which rubygems
C:/Ruby21-x64/lib/ruby/site_ruby/2.1.0/rubygems.rb
将证书 GlobalSignRootCA.pem 文件,拷入 ruby 库中目录中:
C:\Ruby21-x64\lib\ruby\site_ruby\2.1.0\rubygems\ssl_certs
说明:运行添加 gem 源 gem sources --add http://gems.ruby-china.org 错误依旧!一点变化木有!继续:
找到如下 stackoverflow 多方大神的解决方案,最终也是问题得到解决: https://stackoverflow.com/questions/10246023/bundle-install-fails-with-ssl-certificate-verification-error
下载新证书: http://curl.haxx.se/ca/cacert.pem
配置环境变量: SSL_CERT_FILE 值为刚下载证书的存放位置: C:\Ruby21-x64\lib\ruby\site_ruby\2.1.0\rubygems\ssl_certs\cacert.pem
打开新的 cmd 窗口
其它说明:
1、gem 源的配置文件: ruby gem 源的配置文件在:
可以直接修改该文件,即可增加删除 gem 源
2、rubygem 官网的 GlobalSignRootCA.pem 配置到环境变量的文件路径里面,并没有解决问题。还是http://curl.haxx.se/ca/cacert.pempem文件,解决了问题。的
3、gem 的版本和 ruby 版本? 在我的一台 linux 环境的主机上,gem 版本 2.4.8,运行 gem sources --add http://gems.ruby-china.org 都没有什么问题。但该机器的 ruby 版本为 2.2.5 相对我 windows 主机的 ruby 版本 2.1.7p400 要高一些。
说明:可以试一下升级一下 windows 环境 ruby 版本,能否解决该 ssl 问题。本人暂时未试。
4、其它说明:
不同的环境导致问题的原因不同,有些情况或许直接用官网http://guides.rubygems.org/ssl-certificate-update/的方式就可以解决了。
power by [email protected]