Gem Windows 环境添加 Ruby China Gems 源的 SSL 异常问题解决记录

haibor · 2017年08月15日 · 最后由 kafei 回复于 2017年12月21日 · 6555 次阅读
本帖已被设为精华帖!

#ruby 添加 gem 源的 ssl 异常问题解决记录

异常 SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

问题现象:

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、下载证书

https://raw.githubusercontent.com/rubygems/rubygems/master/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem

定位 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 错误依旧!一点变化木有! 继续:

增加新的 pem 证书,解决问题

找到如下 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 haibor@qq.com

共收到 6 条回复
huacnlee 将本帖设为了精华贴 08月16日 09:37
huacnlee [该话题已被删除] 中提及了此贴 08月16日 09:39

这年头还有用 win 开发 ruby 的

istrwei 回复

我赞你是因为你的头像

看到了 windows 系统,大家估计都直接忽略贴子内容了

jasl [该话题已被删除] 中提及了此贴 08月28日 01:47

多年前我就踩过这个坑,没想到现在都没解决

我直接一条:gem sources --add http://gems.ruby-china.org 就成功了,还有这情况吗?

haibor Win7 64 位使用 Rails 3.2.12 的 OpenSSL::SSL::SSLError 中提及了此贴 11月23日 20:35
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册