请求无法连接到TLS服务器

时间:2017-05-23 17:43:26

标签: python ssl python-requests

我在跟踪requests无法连接到特定主机的原因时遇到问题。

以下通过curl或浏览器工作正常:

curl https://banking4.anz.com

但是,如果我使用请求:

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

我明白了:

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

在线上,我看到只有客户端问候,服务器立即断开连接,所以它看起来不像任何ssl或密码不兼容。 (我预计会出现SSL层错误)在这种情况下还有什么问题?

我在python 3.6.1上发出请求2.14.2(附带安全附加信息)。

1 个答案:

答案 0 :(得分:4)

此服务器以多种方式中断。

首先,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以及损坏网站的特定密码设置。