繁体   English   中英

疑难解答“ssl证书验证失败”错误

[英]Troubleshooting “ssl certificate verify failed” error

在Windows Vista SP2 + Python 2.7.10上,我可以连接到https://www.python.org ,但不能连接到https://codereview.appspot.com

剧本:

HOST1 = 'https://www.python.org'
HOST2 = 'https://codereview.appspot.com'

import urllib2
print HOST1
urllib2.urlopen(HOST1)
print HOST2
urllib2.urlopen(HOST2)

并输出:

E:\>py test.py
https://www.python.org
https://codereview.appspot.com
Traceback (most recent call last):
  File "test.py", line 9, in <module>
    urllib2.urlopen(HOST2)
  File "C:\Python27\lib\urllib2.py", line 158, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 435, in open
    response = self._open(req, data)
  File "C:\Python27\lib\urllib2.py", line 453, in _open
    '_open', req)
  File "C:\Python27\lib\urllib2.py", line 413, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 1244, in https_open
    context=self._context)
  File "C:\Python27\lib\urllib2.py", line 1201, in do_open
    raise URLError(err)
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>

我如何排除故障, https://codereview.appspot.com/究竟出了什么问题?

我的猜测是它与OpenSSL中的替代链处理有关,如Python Urllib2 SSL错误中详细描述的那样。 虽然Python使用Windows CA存储来获取受信任的根证书,但信任链本身的验证是在OpenSSL中完成的。

根据“Python 2.7.10 Released” ,Windows上的Python 2.7.10包含OpenSSL 1.0.2a,但关于替代链的修复仅在1.0.2b中完成(之后必须快速修复,因为它们包含严重的安全性错误)。

如果您查看codereview.appspot.comSSLLabs报告,您会发现有多个信任链可能会导致问题。 与此相反, python.org只有一个信任链。

要解决此问题,可能需要使用您自己的根CA存储,该存储必须包含“/ C = US / O = Equifax / OU = Equifax安全证书颁发机构”的证书才能正确验证codereview.appspot.com。 该证书可以发现在这里 ,您可以用给它凭证档案错误参数urllib2.urlopen

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM