Python SSL:CERTIFICATE_VERIFY_FAILED

时间:2016-11-29 00:57:31

标签: python windows ssl ssl-certificate pyopenssl

使用Python 2.7.12在使用Windows 8.1的相当新的计算机上连接www.mydomain.com时出现错误。以下代码的SSL: CERTIFICATE_VERIFY_FAILED行上的错误为 ssl_sock.connect 。该代码在上下文中包装SSL连接,并指定我不想执行证书验证:

ssl._create_default_https_context = ssl._create_unverified_context
s_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.verify_mode = ssl.CERT_NONE
context.check_hostname = True
context.load_default_certs()

ssl_sock = context.wrap_socket(s_, server_hostname=myurl)
ssl_sock.connect((myurl, int(myportno)))

我已经尝试将安全证书的纯文本版本从我正在尝试连接的服务器添加到Python引用的默认证书文件 - 这不起作用(无论如何,它不会明白我应该这样做)

当我浏览到我正在尝试连接的域时,浏览器也不信任远程服务器证书,但是我已经检查了绑定到域的证书,并且验证正常。什么可能导致不信任? (我正在调查从我收到错误的机器上删除Windows安全补丁,看看是否可能是原因)

(此问题发生在使用相同代码的其他计算机上,但在Windows检索完整更新集后似乎解决了。问题持续存在的机器也有一整套更新)

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,这似乎与2016年8月29日发布的Windows安全更新有关,导致使用TLS 1.0协议时出现证书验证问题。在没有安全更新的情况下重新安装Windows至少可以让事情现在起作用。在Windows 10下运行时,我也没有遇到此问题