Python3 Requests指定自签名叶子证书路径验证失败求助
问题:Python Requests验证自签名叶子服务器证书失败
我们团队尝试使用Python3 Requests模块,通过服务器证书进行显式服务器身份验证。服务器使用的是自签名叶子证书(无证书链,无中间CA或根CA),证书本身有效且未过期。
已尝试的解决方案
- 参考相关技术方案,为
requests.get方法的verify参数传入CA证书包路径:
cafile = 'cacert.pem' # 官方CA证书包 r = requests.get(url, verify=cafile)
- 设置
REQUESTS_CA_BUNDLE环境变量,同时尝试将证书添加到certifi或Requests提供的默认证书路径中:
import certifi certifi.where()
或
import requests requests.certs.where()
关键注意事项
- 仅聚焦服务器端证书验证,不涉及mTLS相关内容
- 已尝试PEM和DER编码的证书(预期应为PEM编码)
- 该自签名证书无证书链
- 运行环境:Python 3.8.10、Requests 2.28.2、certifi 2022.12.7,Windows 10搭配WSL2运行Ubuntu 20.04.3 LTS
- 未找到针对单一自签名叶子证书的相关解决方案,这是本问题与其他同类帖子的核心差异点
报错信息
requests.exceptions.SSLError: HTTPSConnectionPool(host='
', port= ): Max retries exceeded with url: (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFIY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)')))
困惑与求助
看到有技术帖子评论提到使用PEM格式的根证书可成功验证,但我们使用自签名叶子证书却无法实现。虽清楚叶子证书按定义不属于CA证书包(无签名证书等扩展密钥用法),但认为仅需包含该自签名证书即可完成验证,现寻求相关建议或提示。
内容的提问来源于stack exchange,提问作者User64687984134689
相关产品推荐
相关产品推荐

