为什么TLSv1_2连接在Python httplib中使用较旧的OpenSSL版本成功

时间:2016-02-25 08:10:21

标签: python ssl openssl httplib tls1.2

我使用的是Windows 7操作系统。 OpenSSL安装在系统中。

C:\Program Files (x86)\Git\bin>openssl version
OpenSSL 0.9.8e 23 Feb 2007

我有一台仅支持TLSv1_2的服务器。根据OpenSSL的文档,OpenSSL> = 1.0.1支持TLSv1_2。因此,由于我安装的OpenSSL版本为0.9.8,因此我预计在HTTPS连接/事务处理期间会出现故障。

https://docs.python.org/3/library/ssl.html

但是,我仍然可以使用TLSv1_2使用HTTPS rest API与服务器通信。为什么? 我的实现是,

httpObj = httplib.HTTPSConnection('server_name')
httpObj.sock = socket.create_connection(('server_name', '10443'))

httpObj.sock = ssl.wrap_socket(httpObj.sock, keyfile='.\\key.pem', certfile='.\\client_cert.pem', ca_certs='.\\ca_cert.pem', ciphers='ECDHE-RSA-AES256-GCM-SHA384', cert_reqs=ssl.CERT_REQUIRED, ssl_version=ssl.PROTOCOL_TLSv1_2)

headers = {'Accept': 'application/json', 'Accept-Language': 'en-us, en', 'Accept-Charset': 'ISO-8859-1, utf-8'}

httpObj.request('GET', URI, '', headers)
print httpObj.getresponse()

(服务器中没有实现问题,因为我尝试使用TLSv1_1协议从我的linux机器连接并且它不起作用。使用TLSv1_2,它可以工作,这是OpenSSL版本1.0.1的预期行为。在linux机器我有openssl版本1.0.1e)

0 个答案:

没有答案