15

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

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

Python/requests 在哪里保留 ssh 的 known_hosts 的模拟,我如何为这个主机清除它?

$ 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
4

3 回答 3

6

您正在使用古老版本的请求。如果您升级到 2.0,您将收到一条更有帮助的消息,并且如果您的站点存在证书不匹配,您可以通过指定能够验证中间证书的系统证书来修复它。您也可以要求不按照 Andre 的建议验证您的证书。

于 2013-09-26T13:08:57.997 回答
2

事实证明,在问题中提到的服务器升级期间,安装了一个签名错误的证书。由于 Windows 浏览器机器和 Ubuntu Python 客户端之间的根证书存在差异,因此浏览器中的 HTTPS 有效。通过来自运行 Python 的同一台 Ubuntu 机器上的浏览器的 HTTPS 揭示了证书问题的详细信息。

IP更改与问题无关,只是混淆了一些事情。

将我的评论推广为:

  1. 这回答了我的问题
  2. 这个问题获得了足够的流量,我想分享知识。
于 2015-10-15T14:51:28.460 回答
0

如果上述方法不起作用,并且您发现它是本地的,那么这个解决方案对我有用......

本质上是在 Python 文件夹中运行 Install Certificates.command 文件。

https://www.dev2qa.com/how-to-fix-python-error-certificate-verify-failed-unable-to-get-local-issuer-certificate-in-mac-os/

于 2020-03-10T21:50:22.273 回答