【发布时间】:2016-07-01 19:28:42
【问题描述】:
我有如下代码:
headers = {'content-type': 'ContentType.APPLICATION_XML'}
uri = "www.client.url.com/hit-here/"
clientCert = "path/to/cert/abc.crt"
clientKey = "path/to/key/abc.key"
PROTOCOL = ssl.PROTOCOL_TLSv1
context = ssl.SSLContext(PROTOCOL)
context.load_default_certs()
context.load_cert_chain(clientCert, clientKey)
conn = httplib.HTTPSConnection(uri, some_port, context=context)
我不是真正的网络程序员,所以我在谷歌上搜索了握手连接,发现 ssl.SSLContext(PROTOCOL) 是所需的函数,代码工作正常。
然后我遇到了障碍,我的本地版本是 2.7.10,但所有生产盒都有 2.7.3,因此不支持 SSLContext 并且升级 python 版本不是一个选项/可控。
我尝试阅读ssl — SSL wrapper for socket objects,但无法理解。
我尝试了什么(徒劳):
s_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = ssl.wrap_socket(s_, keyfile=clientKey, certfile=clientCert, cert_reqs=ssl.CERT_REQUIRED)
new_conn = s.connect((uri, some_port))
但返回:
SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)')
问题 - 如何在旧版本上生成 SSL Context 以实现安全的 https 连接?
【问题讨论】:
-
我不认为旧版本可以使用上下文。您是否尝试过创建指定证书的 https 连接,即 conn = httplib.HTTPSConnection(host, port, key_file, cert_file, strict, timeout)
标签: python sockets ssl https sslcontext