Python请求“证书验证失败”

时间:2013-09-25 08:08:15

标签: python python-requests

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

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

Python /请求在哪里保留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

3 个答案:

答案 0 :(得分:6)

您正在使用古老版本的请求。如果升级到2.0,并且如果您的站点证书不匹配,您可以通过指定能够验证中间证书的系统证书来修复它,您将获得更有用的消息。您也可以按照安德烈建议的那样请求不验证您的证书。

答案 1 :(得分:2)

事实证明,在问题中提到的服务器升级期间,安装了错误签名的证书。浏览器中的HTTPS工作是因为Windows浏览器计算机和Ubuntu Python客户端之间的根证书差异。通过运行Python的同一台Ubuntu机器上的浏览器显示HTTPS,显示证书问题详情。

知识产权的变化与问题关系不大,只是混淆了事情。

将我的评论推荐给答案:

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

答案 2 :(得分: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/