2016-11-29 70 views
1

我在使用Python 2.7.12连接到www.appswiz.com时出现错误,该错误发生在使用Windows 8.1的相当新的机器上。错误是SSL: CERTIFICATE_VERIFY_FAILEDssl_sock.connect行下面的代码。该代码包装在一个上下文中的SSL连接,并指定我不想进行证书验证:Python SSL:CERTIFICATE_VERIFY_FAILED

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检索完整的一套更新后,问题仍然存在的机器也有一整套更新然而)

+0

另请参见[www.appswiz.com的Qualsys扫描](https://www.ssllabs.com/ssltest/analyze.html?d=www.appswiz .COM)。它看起来像一个较旧的IIS服务器。此站点的受信任根CA证书应该是*** Go Daddy根证书颁发机构 - 用指纹47beabc922eae80e78783462a79f45c254fde68b指定的G2 ***。 – jww

回答

0

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

+1

没有“TLS-1”证书这样的东西。有TLS协议版本(SSL 3.0,TLS 1.0 .. TLS 1.2),有密码(AES128-SHA,...),并且存在独立于TLS协议且大多独立于密码的证书。这些证书具有使用SHA-1(较旧)或SHA-256(现代)的签名,您可能会参考这些。我很确定,Windows上的python SSL堆栈支持这些,所以你的问题是不同的。除此之外,Python使用OpenSSL作为独立于正常Windows SSL SChannel的基础SSL堆栈。 –

+0

谢谢Steffen我纠正了我的答案。看起来安全更新似乎是最可能的原因。我只能猜测OpenSSL与Windows机器的套接字连接没有完全独立性。 –

+1

也没有“TLS-1”协议。有SSL 2.0(完全不安全,大多数关闭),SSL 3.0(不安全,通常关闭),TLS 1.0,TLS 1.1和TLS 1.2。但是证书的验证与SSL协议无关,因此协议问题不会导致验证失败。如果URL是公开的,那么可以仔细看看真正的问题是什么。 –

相关问题