使用Python2.7.12连接到www.mydomain.com时,在一台相当新的使用Windows8.1的机器上,我会遇到一个错误。错误是下面代码的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检索完整的更新集后,该问题似乎已得到解决。但是,问题持续的机器也有完整的更新)
发布于 2016-11-29 03:42:34
我解决了这个问题,这个问题似乎与2016年8月29日后Windows的安全更新有关,该更新会在使用TLS 1.0协议时引发证书验证问题。在没有安全更新的情况下重新安装Windows,至少可以让事情暂时正常运行。另外,在Windows 10下运行时,我没有遇到这个问题
https://stackoverflow.com/questions/40856119
复制相似问题