我使用的是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)