2016-11-29 109 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是公開的,那麼可以仔細看看真正的問題是什麼。 –

相關問題