Requests failing to connect to a TLS server
我有一个问题是追踪
以下通过curl或浏览器工作正常:
1 | curl https://banking4.anz.com |
但是,如果我使用请求:
1 | requests.get('https://banking4.anz.com') |
我明白了:
1 | SSLError: ("bad handshake: SysCallError(-1, 'Unexpected EOF')",) |
在线上,我看到只有客户端问候,服务器立即断开连接,所以它看起来不像任何ssl或密码不兼容。 (我希望那些SSL层错误)在这种情况下还有什么问题?
我在python 3.6.1上请求2.14.2(带安全附加功能)。
此服务器以多种方式中断。
例如,它只能理解DES-CBC3-SHA,它被认为是不安全的,不包含在请求使用的默认密码集中。 此外,它看起来只检查ClientHello中有限数量的提供密码,因此如果在此密码之前有太多其他优惠,则不会看到客户端提供DES-CBC3-SHA。
这个损坏的服务器的快速解决方法是仅提供服务器支持的唯一密码:
1 2 3 | import requests requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DES-CBC3-SHA' requests.get('https://banking4.anz.com') |
但请注意,这会将请求的默认密码列表设置为不安全的值。 因此,如果要连接到应用程序中的其他站点,则不应使用此方法。 而是看看这个更复杂的解决方案,使用您自己的HTTPAdapter和破损站点的特定密码设置。