Python 上的 ssl 提示验证失败,有什么办法深究具体失败的原因么?

2017-04-01 04:28:47 +08:00
 SharkIng

错误提示是这样:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/ssl.py", line 1007, in get_server_certificate
    with closing(context.wrap_socket(sock)) as sslsock:
  File "/usr/lib/python2.7/ssl.py", line 353, in wrap_socket
    _context=self)
  File "/usr/lib/python2.7/ssl.py", line 601, in __init__
    self.do_handshake()
  File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

证书是自签的,代码没变过,以前的是用的自根证签一个服务器端和一个客户端的证书,代码完全没问题(代码是我们用来测试客户端和服务器端通讯,同时测试服务器端证书正确的)用了一年多了。最近更新服务器端,所以公司觉得用我们另外一个专门的自签根证书签了一个专门用这个项目的中级 CA 证书,然后签了服务器和客户端的证书。然后这个测试代码就提示前面的错误了

感觉有可能是 ssl 的版本问题,也有可能是中级 CA 的问题,但是证书本身没有问题(客户端和服务器端可以正常链接)我现在想了解下如何纠错呢?有什么好办法修复这个问题?

4211 次点击
所在节点    问与答
11 条回复
fzleee
2017-04-01 06:07:05 +08:00
服务器证书链不全的问题?
SharkIng
2017-04-01 06:09:37 +08:00
@fzleee #1 也怀疑过这个问题,可是把两个 CA cat 到一起之后也不行
vPlusSign1
2017-04-01 08:55:05 +08:00
verify = False

应该就可以了
vPlusSign1
2017-04-01 08:56:12 +08:00
之前查这个问题好像是因为 linux 里面的一些证书缺了 ,所以会这样子验证不到。
lovedebug
2017-04-01 09:06:52 +08:00
等等 服务器和客户端证书? 双向认证吗?
fzleee
2017-04-01 09:23:44 +08:00
我看到你的报错信息里面显示 get_server_certificate 的时候显示 certificate verify failed ,我还是怀疑和证书链相关。如果你不介意,可不可以执行下这个命令?将 baidu.com 替换为你的服务器

===============
openssl s_client -connect www.baidu.com:443 -showcerts
===============
SharkIng
2017-04-01 13:02:35 +08:00
@vPlusSign1 #3 测试代码主要的目的就是确定客户端和服务器端证书的可用性,这个了之后不就完全没用了?

@lovedebug #5 算是吧

@fzleee #6 好的我试试,您的意思是可能是服务器端部分证书不完整么?我前面说的 CA 放一起主要是客户端的了。
fzleee
2017-04-01 13:41:41 +08:00
@SharkIng 或者中间证书以及服务圈证书的顺序弄反了呢?

至少从异常日志里面能够看到最直观的问题就是`certificate verify failed`。
因此我能够猜想可能的原因无非就是
1. 服务器端的问题, 比如服务器个返回的证书链不全 /错误。
2. 客户端问题, 客户端不信任这个自签的根证书。
3. SNI 的问题?(这个可能性比较小)
SharkIng
2017-04-02 05:40:43 +08:00
@fzleee 非常感谢 我都试试
liamzz
2019-07-29 11:01:04 +08:00
你好,你解决了 self._sslobj.do_handshake()这个问题了吗
SharkIng
2019-07-30 01:36:15 +08:00
@liamzz 都三年了 忘记具体的了,好像这个和 PythonSSL 那个 Library 有关,换一个 Python OpenSSL 版本就可以修复了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/351881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX