我尝试使用CentOS 6.5中的python与REST API建立简单的HTTPS连接。安装的是python-2.6.6-52.el6.x86_64和openssl-1.0.1e-16.el6_5.7.x86_64。
#!/usr/bin/env python
import httplib, json, urllib, urllib2
# Gets the session ID to host
c = httplib.HTTPSConnection("10.10.1.1")
c.request("GET", "/services/rest/V2/?method=authenticate&username=myusername&password=mypasswd&format=json")
response = c.getresponse()
data = json.loads(response.read())
session_id = data['session_id']
print "Session Created. Session ID: " + session_id
然而,它给了我这个错误:
Traceback (most recent call last):
File "./test3.py", line 7, in <module>
c.request("GET", "/services/rest/V2/?method=authenticate&username=myusername&password=mypasswd&format=json")
File "/usr/lib64/python2.6/httplib.py", line 914, in request
self._send_request(method, url, body, headers)
File "/usr/lib64/python2.6/httplib.py", line 951, in _send_request
self.endheaders()
File "/usr/lib64/python2.6/httplib.py", line 908, in endheaders
self._send_output()
File "/usr/lib64/python2.6/httplib.py", line 780, in _send_output
self.send(msg)
File "/usr/lib64/python2.6/httplib.py", line 739, in send
self.connect()
File "/usr/lib64/python2.6/httplib.py", line 1116, in connect
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
File "/usr/lib64/python2.6/ssl.py", line 342, in wrap_socket
suppress_ragged_eofs=suppress_ragged_eofs)
File "/usr/lib64/python2.6/ssl.py", line 120, in __init__
self.do_handshake()
File "/usr/lib64/python2.6/ssl.py", line 279, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [Errno 1] _ssl.c:492: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
这是openssl / python兼容性问题吗?我已经获得了我能找到的最新的python和openssl RPM,而且我不想通过手动编译最新的tarball来冒险使用RPM预留。
答案 0 :(得分:0)
如果您将服务器配置为仅接受TLS1.2但在客户端不支持TLS1.2,则可能会发生这种情况。至少Ubuntu已修补他们的openssl不在客户端提供TLS1.1,但仅在服务器端解决一些主机的一些错误。也许RHEL / CentOS也是如此。