症状
请求抛出 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 会引入中间人风险;仅对已知且可信的自签环境做局部、显式的例外。