Python Requests库问题:遭遇SSL证书验证失败错误
解决requests库"SSL certificate verify failed"错误
可能的原因及对应解决方案
1. 服务器使用私有CA签发证书
如果目标服务器的证书由自定义/私有CA签发,certifi默认的根证书库不会包含该CA证书,导致验证失败。
解决方案:
将私有CA的证书文件(.pem或.crt格式)路径传给verify参数:
import requests url = 'https://example.com/api' # 替换为你的私有CA证书路径 response = requests.get(url, verify='/path/to/private_ca.pem') print(response.text)
2. requests未正确读取系统根证书
certifi的证书库可能与操作系统的根证书存储不一致,导致部分系统信任的证书无法被requests识别。
解决方案:
使用系统默认的SSL上下文,强制requests加载系统根证书:
import requests import ssl url = 'https://example.com/api' context = ssl.create_default_context() # 自动加载系统根证书 response = requests.get(url, verify=context) print(response.text)
3. 网络代理替换了证书(企业环境常见)
企业网络中的代理服务器通常会替换HTTPS请求的证书,若代理的CA证书未被信任,会触发验证错误。
解决方案:
获取IT部门提供的代理CA证书,在请求中指定证书并配置代理:
import requests url = 'https://example.com/api' proxies = { 'https': 'http://your-enterprise-proxy:port' } # 替换为代理CA证书路径 response = requests.get(url, proxies=proxies, verify='/path/to/proxy_ca.pem') print(response.text)
4. 服务器证书链不完整
服务器未正确配置完整的证书链(缺少中间证书),导致客户端无法验证证书有效性。
解决方案:
用openssl命令检查证书链状态:
openssl s_client -connect example.com:443 -showcerts
若输出显示Verify return code: 20 (unable to get local issuer certificate),说明证书链不完整,需联系服务器管理员补充中间证书。
注意事项
- 不要在生产环境使用
verify=False,会导致请求完全暴露在中间人攻击风险下。
内容的提问来源于stack exchange,提问作者Kritik Grewal
相关产品推荐
相关产品推荐

