Python requests 请求报 SSLError 怎么解决?
requests 报 SSLError 的常见原因:证书验证失败、证书链不完整、本地 CA 过期、代理拦截。解决方案:更新 certifi、指定 CA 包、verify=False 临时跳过(有安全风险)。本文逐一排查。
方案一:更新 CA 证书包(先试这个)
pip install -U certifi requests
本地 CA 列表过期是证书验证失败的最常见原因。
方案二:指定 CA 证书
import requests
# 使用企业 CA 或自签名证书
requests.get('https://internal.example.com', verify='/path/to/ca-bundle.crt')
方案三:跳过验证(仅临时调试)
requests.get('https://example.com', verify=False)
会输出 InsecureRequestWarning。安全风险:跳过验证意味着无法防御中间人攻击,生产环境禁用。关闭警告:
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
其他可能原因
- 服务器证书链不完整:服务器没配置中间证书(浏览器能容忍,Python 不能),让服务端修;
- 协议版本过旧:老服务器只支持 TLS 1.0/1.1,新版 OpenSSL 默认拒绝,需服务端升级;
- 系统时间错误:证书验证依赖时间,
date命令确认系统时间准确;
观测云对照
观测云 DataKit 上报数据默认走 HTTPS,企业内部 CA 场景可在 DataKit 配置中指定 CA 证书路径,保证私有化部署的证书验证正常。
常见问题(FAQ)
A:本地找不到签发者的根证书——更新 certifi,或服务器缺中间证书(用 SSL Labs 检测服务器)。
Q:浏览器访问正常,requests 报错?
A:浏览器有自己的证书缓存且会补全中间证书,Python 严格按本地 CA 验证,差异正常。
Q:Docker 容器里报 SSL 错误?
A:精简镜像(alpine 等)可能缺 ca-certificates 包,apk add ca-certificates 或 apt install ca-certificates。