【发布时间】:2022-01-07 11:08:15
【问题描述】:
以下 curl cmd 按原样运行,没有任何问题,curl -H "Authorization: Bearer $AUTH" --cacert "/var/lib/myapp/server-ca.crt" https://myapp.common:2567/service -X GET
在python中实现这个,
headers = {"Authorization": "Bearer {}".format(os.getenv("AUTH"))}
cacert = "/var/lib/myapp/server-ca.crt"
url = "https://myapp.common:2567/service"
response = requests.get(url=url, headers=headers, verify=cacert)
但是它失败并出现以下错误
HTTPSConnectionPool(host='myapp.common', port=2567): Max retries exceeded with url: /service
(Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),))
对于上下文,这里的 cacert 具有以下信息:
---BEGIN CERTIFCATE---- SOMERANDOMSTRING ---END CERTIFICATE----
【问题讨论】:
-
简而言之:错误的选项。您需要使用
verify而不是cert。 -
@SteffenUllrich 感谢您指出这一点。但是在更改证书进行验证后,我仍然遇到同样的问题
-
“但是更改证书后验证” - 原来的原因解决了。随着代码的改变,这是一个不同的问题。请准确提供您正在使用的(新)代码以及您在新问题中得到的(新)错误消息。
-
@SteffenUllrich 正如前面的评论所指出的,我得到了完全相同的错误。新代码是使用
requests.get(url=url, headers=headers, verify=cacert)。鉴于我面临同样的错误,我认为不需要新问题 -
我重新打开了这个问题,但我怀疑它是否可以通过信息解决。
verify=cacert正是它应该工作的方式。如果您的文件格式错误或不包含 CA 证书,那么它也不应该与 curl 一起使用。所以请再次检查,显示的 curl 命令和 Python 代码以及错误消息是否与您正在执行的操作完全匹配。
标签: python-3.x ssl python-requests