Python请求证书\u验证\u失败

2024-04-24 06:02:41 发布

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

我有未经公开签名的自定义证书

curl命令因ssl错误而失败

   curl: (60) Peer's Certificate issuer is not recognized.

我添加了自定义证书,如下步骤所示:

 # copied below files to /etc/pki/ca-trust/source/anchors
 ca_intermediate_certificate.pem
 ca_trusted_root.pem
 my_server.pem 
 
 # then updated 
 update-ca-trust enable
 update-ca-trust 
 update-ca-trust extract

它使用curl工具开始工作

后来,我运行了python代码,该代码在同一主机中使用请求模块进行api调用,但由于以下错误而失败

Traceback (most recent call last):
  File "/root/my_code/iconik_ingestion/crud.py", line 24, in post
    response = requests.post(url, data, headers=self.header_params)
  File "/root/pyenv/lib/python3.6/site-packages/requests/api.py", line 119, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/root/pyenv/lib/python3.6/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/root/pyenv/lib/python3.6/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/root/pyenv/lib/python3.6/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/root/pyenv/lib/python3.6/site-packages/requests/adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='myserver_domain.com', port=443): Max retries exceeded with url: /login (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:877)'),))

我可以通过传递“verify=False”或将自定义证书传递给requests模块使其工作。但我想让它在python请求模块中不需要额外设置的情况下工作,这意味着必须修复这个主机级别,这样它才能工作。有什么建议/修复为什么python请求模块失败,而curl正常工作

补充说明: 我在virtualenv中运行python代码 我正在使用Linux centos 7


Tags: inpysendpyenvurlrequestlibpackages