← 中文资源

简体中文版本

requests 报 SSLError: certificate verify failed(主机名不匹配)

通过区分主机名不匹配、缺少 CA 信任与证书过期,诊断证书校验失败。

阅读英文原文

症状

请求抛出 SSLError 并报 certificate verify failed,有时附加 unable to get local issuer certificate 或 hostname mismatch。区分这些消息很重要:问题可能是缺少 CA、链不完整、名称不匹配或证书过期。设置 verify=False 或用 curl -k 后可用,说明失败出在校验而非连通性。

诊断

用 openssl s_client 查看证书链与 SAN;检查有效期与主机名;用 certifi.where() 查看客户端信任库。

openssl s_client -connect host:443 -servername host -showcerts

根因

证书校验失败,原因是所呈现的证书与主机名不匹配、客户端 CA 库不信任其签发者,或证书链不完整或无效。

修复

改用正确的主机名;安装或更新 CA 库使签发者受信任;修服务端以呈现完整链。绝不把关闭校验当作永久修复。

验证

重发请求确认在校验开启下成功,再查看证书链确认签发者受信任且主机名与证书匹配。

常见陷阱

全局设置 verify=False 会引入中间人风险;仅对已知且可信的自签环境做局部、显式的例外。