企业网络自签名CA证书Basic Constraints未标记Critical的请求报错问询
自签名证书调用接口SSL验证失败问题
报错详情
发送POST请求时触发SSL验证错误,请求代码及报错如下:
response = requests.post(self.api, headers=headers, cookies=cookies, json=silence, verify=self.certificate, timeout=(10, 10))
报错信息:
(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Basic Constraints of CA cert not marked critical (_ssl.c:1077)')))
证书配置排查
从浏览器下载的企业根证书(无修改权限)的X509v3 Basic Constraints字段配置为:
X509v3 Basic Constraints: CA:TRUE, pathlen:2
该字段未标记为Critical。
新旧版本依赖差异
旧版本(可正常运行)
Python版本:3.14.0
依赖包版本:
attrs 25.3.0 certifi 2025.1.31 cffi 1.17.1 charset-normalizer 3.4.1 h11 0.14.0 idna 3.10 outcome 1.3.0.post0 pip 25.2 pycparser 2.22 PySocks 1.7.1 requests 2.32.3 selenium 4.30.0 sniffio 1.3.1 sortedcontainers 2.4.0 trio 0.29.0 trio-websocket 0.12.2 typing_extensions 4.13.0 urllib3 2.3.0 websocket-client 1.8.0 wsproto 1.2.0
请求代码逻辑一致:
response = requests.post(self.cluster_api, headers=headers, cookies=cookies, json=request_data, verify=self.certificate, timeout=(10, 10)) #request
新版本(触发报错)
Python版本:3.14.0
依赖包版本:
attrs 26.1.0 certifi 2026.4.22 charset-normalizer 3.4.7 h11 0.16.0 idna 3.13 outcome 1.3.0.post0 pip 25.2 PySocks 1.7.1 requests 2.33.1 selenium 4.43.0 sniffio 1.3.1 sortedcontainers 2.4.0 trio 0.33.0 trio-websocket 0.12.2 typing_extensions 4.15.0 urllib3 2.6.3 websocket-client 1.9.0 wsproto 1.3.2
疑问与需求
- 旧版本脚本使用相同请求逻辑和证书可正常运行,是否由requests版本差异导致?
- 寻求无需设置
verify=False的解决方法。
内容的提问来源于stack exchange,提问作者Abílio Fonseca
相关产品推荐
相关产品推荐

