使用 TLS1.1 和 urllib3 的 HTTP GET 站点

HTTP GET site which uses TLS1.1 with urllib3

当我尝试获取这个使用过时的 TLS1.1 和 urllib3 的网站时,出现了这个错误:

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'https://site/')

SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:646)

似乎 urllib3 正在尝试与 SSL3 握手,但正如我提到的,该站点使用 TLS1.1。

我是否必须指定我不想使用 TLS1.1?我该怎么做?

我发现这个名为 ssl_version 的参数(它可以在 PoolManager 构造函数中传递)默认为 PROTOCOL_SSLv23。但是我没有在urllib3.util.ssl_中找到类似PROTOCOL_TLSv11的东西。事实上,唯一以 PROTOCOL_ 开头的变量是默认选项。

It seems that urllib3 is trying to handshake with SSL3, but as I mentioned, this site uses TLS1.1.

该站点仍然支持 SSL 3.0(也支持 TLS 1.0 和 TLS 1.1),所以我怀疑这就是问题所在。我认为问题更多的是服务器只支持不安全的密码 RC4-SHA,它被排除在 urllib3 的默认密码集之外。 另见