使用Python Requests调用内部API遇SSL证书验证失败求助
问题原因分析
- 内部API的SSL证书更换为自签名证书,而你的本地环境未信任该证书,导致验证失败
- 此前正常运行的环境可能存在过证书信任配置(比如手动添加过证书、代码里跳过验证),后续环境变更(Python/requests版本升级、系统证书存储更新、网络代理调整)导致原有配置失效
- 网络层新增了代理设备,代理拦截请求后替换了证书,且该代理证书未被本地信任
解决方法
1. 临时跳过证书验证(仅用于测试/内部可信场景)
在请求中添加verify=False参数关闭SSL验证:
x1 = requests.post(url, json=data, headers=headers, verify=False)
如果出现InsecureRequestWarning警告,可添加代码禁用:
import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning # 禁用不安全请求警告 requests.packages.urllib3.disable_warnings(InsecureRequestWarning) x1 = requests.post(url, json=data, headers=headers, verify=False)
⚠️ 注意:此方法会关闭SSL安全校验,禁止在生产环境使用。
2. 信任自签名证书(推荐的合规方案)
方法A:请求中指定证书文件
将内部API的自签名证书文件(格式为PEM,比如internal_api_cert.pem)保存到本地,请求时指定证书路径:
x1 = requests.post(url, json=data, headers=headers, verify='/path/to/internal_api_cert.pem')
方法B:添加到系统信任根存储
将证书添加到操作系统的根证书信任列表:
- Windows:打开「证书管理器」,导入证书到「受信任的根证书颁发机构」
- Linux:将证书复制到
/usr/local/share/ca-certificates/,执行update-ca-certificates命令 - macOS:打开「钥匙串访问」,将证书添加到「系统」钥匙串,并设置为「始终信任」
3. 排查环境变更因素
- 检查Python、requests库版本是否有更新,新版本可能强化了证书验证逻辑
- 确认网络环境是否新增代理,若有,需配置requests使用代理并信任代理证书,或联系运维调整代理规则放行该API请求
内容的提问来源于stack exchange,提问作者Gaurav
相关产品推荐
相关产品推荐

