如何让 Python 请求信任自签名 SSL 证书?

新手上路,请多包涵
import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)

如果 URL 使用自签名证书,则失败并显示

requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我知道我可以将 False 传递给 verify 参数,如下所示:

 r = requests.post(url, data=data, verify=False)

但是,我想做的是将请求指向磁盘上公钥的副本,并告诉它信任该证书。

原文由 Matthew Moisen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

尝试:

 r = requests.post(url, data=data, verify='/path/to/public_key.pem')

原文由 krock 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 verify 参数,您可以提供自定义证书颁发机构包

requests.get(url, verify=path_to_bundle_file)

文档

您可以将 verify 传递给带有可信 CA 证书的 CA_BUNDLE 文件的路径。这个受信任的 CA 列表也可以通过 REQUESTS_CA_BUNDLE 环境变量指定。

原文由 Dr. Jan-Philip Gehrcke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题