Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed #11

Open
insub opened this issue Dec 7, 2016 · 23 comments

Comments

@insub
Copy link

insub commented Dec 7, 2016

RUBY: 2.1.5
Rails: 4.2.4
pingpp gem: 2.1.0

然后我在rails控制器里面open("xxx")测了一下,https://github.com ok. https://aliyun.com ok.
https://pingxx.com 报SSL错误

如何解决?现在网站整个支付都不可用了。

@menghuanwd
Copy link

你还是用回2.0.15吧,他们新的gem有点问题。

@samurai00
Copy link
Contributor

如果不用 rails 的话,会报错吗?,我们这边使用 ruby 2.1.5 + pingpp 2.1.0 没有这样的 ssl 报错。
你这边可以看一下 openssl 的版本号吗?

@insub
Copy link
Author

insub commented Dec 8, 2016

服务器上Openssl的版本号是:OpenSSL 1.0.1 14 Mar 2012

@insub
Copy link
Author

insub commented Dec 8, 2016

gem降级到2.0.15也不行....
@menghuanwd @samurai00 是否降级到别的版本能有效?

@insub
Copy link
Author

insub commented Dec 8, 2016

现在看的话,跟GEM包也没有关系,curl http://www.aliyun.com 没有问题,curl http://www.pingxx.com 就已经不行了,浏览器访问没问题

@insub
Copy link
Author

insub commented Dec 8, 2016

D:\Sites>curl https://api.pingxx.com
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.

@insub
Copy link
Author

insub commented Dec 8, 2016

curl --version
curl 7.30.0 (i386-pc-win32) libcurl/7.30.0 OpenSSL/0.9.8{ zlib/1.2.7
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM SPNEGO SSL SSPI libz

@samurai00
Copy link
Contributor

你试试把 https://curl.haxx.se/ca/cacert.pem 下载下来,curl 加上 --cacert 参数,看看还报不报错

@samurai00
Copy link
Contributor

@insub 你试了吗?现在什么情况了?

@insub
Copy link
Author

insub commented Dec 12, 2016

@samurai00 hi,之前已经试过了,刚才又再试了一下,一样的结果,aliyun.com可以,pingxx.com或者api.pingxx.com都不行

@insub
Copy link
Author

insub commented Dec 12, 2016

@samurai00 ubuntu上已经可以了,没有做什么调整...突然就又可以了

@samurai00
Copy link
Contributor

会不会是 dns 解析之类的问题?

@GiaoGiaoCat
Copy link
Contributor

GiaoGiaoCat commented Jan 3, 2017

Ruby: 2.3.0
Rails: 5.0.1.rc2
pingpp gem: 2.1.0
openssl version: OpenSSL 1.0.1e-fips 11 Feb 2013

请求 API 出现错误

Pingpp::APIConnectionError: Could not verify Pingpp's SSL certificate. Please make sure that your network is not intercepting certificates. (Try going to (https://api.pingxx.com) in your browser.)

(Network error: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed)

执行 curl 'https://api.pingxx.com'

{
    "error": {
        "type": "invalid_request_error",
        "message": "没有提供合适的 API KEY。需要在 header 中加入已授权的 API KEY 的声明 (如:'Authorization: Bearer YOUR_SECRET_KEY')。"
    }
}

除了更新 gem 之外没有做其它操作,一直好使,更新了 gem 就炸了。

gem 从 2.0.15 升级上来的。

@GiaoGiaoCat
Copy link
Contributor

GiaoGiaoCat commented Jan 3, 2017

降级到 2.0.15 之后,重启 Rails 服务就好使了。

@GiaoGiaoCat
Copy link
Contributor

我看你的更新日志,2.1.0 更新了证书,原因是?

@samurai00
Copy link
Contributor

现在使用的证书是 https://curl.haxx.se/ca/cacert.pem 这个上面的,证书本身应该是没问题的。你可以使用手动下载,用 curl 加上这个证书试试

@googya
Copy link

googya commented Jan 10, 2017

出现同样的问题, 降到 2.0.15 之后就正常了

@mythhsy
Copy link

mythhsy commented Apr 25, 2017

遇到同样的问题,2个现象:

  1. 测试环境为阿里云ECS,OpenSSL版本为OpenSSL 1.0.1e-fips 11 Feb 2013,跟@wjp2013一样.出现问题,但使用curl --cacert 'ca-certificates.crt' https://api.pingxx.com测试没问题.
  2. 开发环境为本地Mac,OpenSSL版本为OpenSSL 0.9.8zh 14 Jan 2016.一切正常.都是ruby2.3.1

debug(pry)发现:

  1. 2.0.15版本的证书VeriSign Class 3 Public Primary Certification Authority在这两个OpenSSL版本(严格来说是测试环境)测试都可以正常验证,没有问题.2.1.2版本的证书VeriSign Class 3 Public Primary Certification Authority - G5在我的测试环境就会验证失败(出现此issue).其它的证书应该是冗余没关系的.
  2. 异常出现在rest-client底层调用Net::HTTP#connect(start实例方法调用的私有方法).
    代码行932: case s.connect_nonblock(exception: false)
    随后被946行rescue捕获(这里est-client对ssl库的异常封装了,增加了点调试难度).
    实际上是OpenSSL::SSL::SSLSocket#connect_nonblock,但是是C语言实现,排查比较困难.

根据目前我调试现象推测的结论就是新版证书跟OpenSSL1.0.1版本以及Ruby实现OpenSSL::SSL::SSLSocket#connect_nonblock的底层代码这三方之间的兼容性有关.
希望我的浅显结论能给ping++开发人员提供一点实例,排查节省一点时间,帮助大家解决下问题,谢谢了~

另外想问下@wjp2013,webhook#verify?好像不支持Rack(Sinatra)?我自己打得monkey_patch,能响应raw_post及headers.不知道有没有计划加上^-^

@GiaoGiaoCat
Copy link
Contributor

GiaoGiaoCat commented Apr 25, 2017

@mythhsy 抱歉了老铁,完全没那个计划,我的那个 PR 后来也被 Ping++ 的兄弟重新实现为 Webhook 模块了,我觉得你可以自己在那里把你的代码扔进去,然后做点兼容性测试,发个 PR 上来就行。

PS:这个话题另外起一个 issue 比较好。

@wenweih
Copy link

wenweih commented May 24, 2017

如果 Ruby 环境使用 RVM 装的,需确保把openssl 是否编译安装在 ruby 模块中。

@jicheng1014
Copy link

似乎除了降级之外没什么好的方法能快速解决

@jicheng1014
Copy link

阿里云centos 的默认openssl问题

更新openssl 即可

@kevin-isky
Copy link

kevin-isky commented May 21, 2018

我是修改hosts文件弄好了,再另一个已经关闭的issue里有说到这个方法。

改一下服务器的 hosts 文件,绑定 api.pingxx.com 到 121.43.74.100

创建Charge对象时 报OpenSSL的错误

这个问题我自己的整理和记录
Ping++创建charge对象报错,提示SSL certificate verify failed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants