2017-05-23 49 views
0

我遇到問題,請跟蹤爲什麼requests無法連接到特定的主機。請求無法連接到TLS服務器

下面的作品通過捲曲就好了,或者瀏覽器:

curl https://banking4.anz.com 

但是,如果我使用的要求:

requests.get('https://banking4.anz.com') 

我得到:

SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",) 

在電線,我只看到客戶端hello和服務器立即斷開連接,所以它看起來不像任何ssl或密碼不兼容。 (我希望那些SSL層的錯誤)在這種情況下還有什麼可能是一個問題?

我在python 3.6.1請求2.14.2(帶安全附加功能)。

+0

我會檢查那個版本的'request'支持SNI開箱即用。 – Vor

回答

2

此服務器有多種方式中斷。

其中之一,它only understands DES-CBC3-SHA這被認爲是不安全的,不包括在default cipher set used by requests。此外,它看起來像只檢查ClientHello中提供的有限數量的密碼,因此如果在此密碼之前提供了太多其他優惠,則不會看到客戶提供DES-CBC3-SHA。

快速的辦法解決這個破碎的服務器是隻提供服務器支持的唯一密碼:

import requests 
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DES-CBC3-SHA' 
requests.get('https://banking4.anz.com') 

但是請注意,這臺請求不安全值的默認密碼列表。因此,如果您想連接到應用程序中的其他網站,則不應使用此方法。相反,請看this more complex solution使用您自己的HTTPAdapter與特定密碼設置爲破損的網站。