Python请求“证书验证失败”

2024-04-29 16:46:35 发布

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

我正在维护一个使用requests+HTTPS的Python迷你应用程序。

应用程序一直工作到HTTPS URL中主机名的IP地址更改(合法地)为止。如果我将浏览器指向URL,我可以很好地检索它。

Python/requests将ssh的已知主机的模拟保存在哪里,我如何为该主机清除它?

$ python --version
Python 2.7.3

$ cat foo.py 
import requests
url = "https://somehost/resource.json"
requests.get(url, timeout=5, config={'danger_mode': True})

$ source venv/bin/activate
$ python foo.py 
Traceback (most recent call last):
  File "foo.py", line 3, in <module>
    requests.get(url, timeout=5, config={'danger_mode': True})
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 65, in get
return request('get', url, **kwargs)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/safe_mode.py", line 39, in wrapped
return function(method, url, **kwargs)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 51, in request
return session.request(method=method, url=url, **kwargs)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 241, in request
r.send(prefetch=prefetch)
  File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/models.py", line 641, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL     routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Tags: inpyurlhomevenvliblocalline
2条回答

原来,在问题中提到的服务器升级过程中,安装了一个签名不正确的证书。浏览器中的HTTPS起作用是因为Windows浏览器机器和Ubuntu Python客户端之间的根证书不同。通过运行Python的同一台Ubuntu机器的浏览器HTTPS显示了证书问题的详细信息。

IP的变化除了混淆了一些事情外,与问题没有什么关系。

将我的评论提升为:

  1. 这回答了我的问题
  2. 这个问题是获得足够的流量我想分享知识。

你用的是古代版的请求。如果您升级到2.0,并且如果您的站点有证书不匹配,您可以通过指定能够验证中间证书的系统证书来修复它,您将得到一条更有用的消息。你也可以只是要求不验证你的证书,安德烈建议。

相关问题 更多 >