旧版python的SSL上下文

2024-09-25 00:31:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码如下:

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)

我不是一个真正的网络程序员,所以我在google上搜索了一下握手连接,发现ssl.SSLContext(PROTOCOL)是所需的函数,代码可以正常工作。在

然后我遇到了一个障碍,我的本地版本是2.7.10,但是所有的生产设备都有2.7.3版本,所以SSLContext不受支持,升级python版本也不是一个选项/控制。在

我试着读ssl — SSL wrapper for socket objects,但读不懂。在

我所做的一切(徒劳):

^{pr2}$

但回报:

SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)')

问题-如何在旧版本上生成SSL上下文,以实现安全的https连接?在


Tags: topathkey代码版本sslcertcontext
2条回答

您必须指定ca证书文件(它应该指向信任存储)

我用requests library得到了完美的解决方案。请求库一定是我曾经使用过的我最喜欢的库,因为它采用了Python中本来就很难处理SSL和REST请求的东西,并使其变得难以置信的简单。我检查了他们的版本支持,并且支持python2.6+。在

下面是一个如何使用他们的库的示例。在

>>> requests.get(uri)

这就是你要做的。请求库负责建立ssl连接。在


更进一步。如果您需要在请求之间持久化cookies,可以这样做。在

^{pr2}$

编辑:如果需要,也可以pass in the path to the certificate and the key像这样requests.get(uri, cert=('path/to/cert/abc.crt', 'path/to/key/abc.key'))


现在希望你能说服他们在生产设备上安装请求库,因为这是非常值得的。如果这对你有用,请告诉我。在

相关问题 更多 >