使用DES-CBC-SHA和最新版本的Python的HTTPS请求?

时间:2016-09-02 09:52:15

标签: python python-2.7 python-requests pyopenssl urllib3

我尝试使用https Python Windows与使用Requests许可的Cisco ASA防火墙设置AES/3DES连接安装。我们的目标是从网址格式pcap下载https://10.0.0.1/capture/TEST_CAPTURE/pcap抓取文件,但对于此问题并不重要,我们会将网址视为https://10.0.0.1

默认Requests设置,Python 2Python 3的连接尝试均失败:

requests.get('https://10.0.0.1', verify = False, auth = ('username','password'))
...
requests.exceptions.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:600)

这可能是由于服务器和客户端之间缺少密码重叠。带CURL选项的-v用于确定服务器使用的密码:

CURL -u username -v -l -k https://10.0.0.1
...
SSLv3, TLS handshake, Finished (20):
SSL connection using DES-CBC-SHA
...

服务器正在使用DES-CBC-SHA密码,我无法更改密码。因此,此密码已添加到urllib3的默认密码列表中:

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':DES-CBC-SHA'

之后,Python 3版本3.4.3连接成功,但对于Python 2版本2.7.12,它仍然失败。我确实需要使用Python 2。我尝试安装安全依赖项:

pip install pyopenssl ndg-httpsclient pyasn1

并将DES-CBC-SHA密码添加到pyopenssl默认密码列表中:

requests.packages.urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST += ':DES-CBC-SHA'

但来自Python 2.7.12的连接仍然失败并出现同样的错误:

requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'SSL23_GET_SERVER_HELLO', 'sslv3 alert handshake failure')],)",)

注意到连接成功的Python 3.4.3使用了openssl的旧版本而不是连接失败的Python 2.7.12

Python 3.4.3
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.1l 15 Jan 2015'

Python 2.7.12
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 1.0.2h  3 May 2016'

将[{1}}替换为Python 2.7.12后,Python 2.7.9连接成功。

是否可以使用'OpenSSL 1.0.1j 15 Oct 2014'密码与https的最新版本建立DES-CBC-SHA连接?

0 个答案:

没有答案