certificate_verify_failed 错误源于python无法验证https服务器身份,需通过openssl命令定位证书链问题,优先使用certifi包更新根证书而非禁用验证。

CERTIFICATE_VERIFY_FAILED 错误不是代码写错了,而是 Python 拒绝连接一个它无法确认身份的 HTTPS 服务器。直接关验证能跑通,但等于把门敞开让中间人进来——尤其在调用支付、登录、API 密钥等场景,风险极高。真正该做的是定位原因,再选对应解法。
urlopen() 报错时怎么快速定位证书问题?
先别急着改代码,用命令行看证书链是否完整:
openssl s_client -connect example.com:443 -showcerts
常见线索包括:
- 输出里出现
Verify return code: 21 (unable to verify the first certificate)→ 根证书缺失 - 证书信息中
subject=CN=*和你访问的域名不一致 → 主机名不匹配 - 看到
issuer=CN=Self-Signed Certificate→ 自签名证书 - 有效期字段显示
notAfter=... → 证书已过期
如果命令本身报 command not found,说明系统没装 openssl,macOS 可用 brew install openssl,Linux 用 apt install openssl 或 yum install openssl。
requests.get() 里 verify=False 是临时方案,但必须加警告抑制
仅限本地调试、内网测试环境,且必须显式压制警告,避免误入生产:
import requestsimport urllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)response = requests.get("https://test.internal", verify=False)
注意三点:
-
verify=False不影响加密传输,只跳过身份校验 - 不加
urllib3.disable_warnings()会在控制台刷屏警告,掩盖真实日志 - 绝对不能在 CI/CD 流水线、Docker 容器或任何可外网访问的服务里保留这行
certifi 包是 Python 环境最稳妥的证书源
系统自带证书库(如 macOS 的 Keychain、Linux 的 /etc/ssl/certs)更新滞后,而 certifi 每月同步 Mozilla 根证书列表,适配性更好:
pip install --upgrade certifi
生效方式分两种:
- 对
requests:设置环境变量os.environ["REQUESTS_CA_BUNDLE"] = certifi.where() - 对
urllib:创建 SSL 上下文时传入cafile=certifi.where() - 全局生效(慎用):猴子补丁
ssl._create_default_https_context = ssl.create_default_context(cafile=certifi.where())
验证是否生效:python -c "import certifi; print(certifi.where())" 输出路径应存在且非空。
macOS 上 Python.org 安装包特有的证书问题
从 python.org 下载的 macOS Python 安装包,默认不链接系统证书,且自带的 Install Certificates.command 脚本常被忽略:
路径示例:/Applications/Python\ 3.11/Install\ Certificates.command
执行前确认:
- 脚本存在且有可执行权限(
chmod +x) - 终端用的是默认 shell(zsh),不是 fish 或 bash 配置冲突
- 执行后检查
python -c "import ssl; print(ssl.get_default_verify_paths())"中cafile是否指向新路径
这个步骤比改代码更关键——很多报错根本不是网站证书问题,而是本地 Python 根本没加载任何可信 CA。
真正麻烦的从来不是报错本身,而是错误背后混杂了系统配置、网络环境、服务端证书状态三重因素。每次遇到CERTIFICATE_VERIFY_FAILED,优先查 openssl 输出和 certifi.where() 路径,比盲目加 verify=False 节省至少两小时调试时间。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











