我尝试使用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 2
和Python 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
连接?