请求特定站点触发CURLE_PEER_FAILED_VERIFICATION错误原因排查
核心结论
cURL 错误60(CURLE_PEER_FAILED_VERIFICATION,对应错误提示SSL certificate problem: unable to get local issuer certificate)并非必然由发送端问题引发,接收端服务器配置错误同样会触发该报错。你遇到的仅单个特定主机HTTPS请求失败、其余所有主机访问正常的现象,结合你方未做任何代码、基础设施变更的前提,故障责任方大概率为接收端。
仅单主机触发该错误的常见原因(非发送端全局配置问题)
- 接收端证书链配置缺失:是这类场景最高发的诱因。站点部署SSL证书时必须同步配置完整的中间证书链,才能让客户端从站点证书逐级追溯到本地信任的根CA证书。如果对方运维近期更换了SSL证书,但漏配了对应的中间证书,使用较旧版本CA根证书库的客户端(你方使用的PHP 7.2、配套cURL版本发布时间较早,自带CA库版本偏旧)就会触发校验失败,该问题只会影响这一个配置错误的站点,不会波及其他HTTPS请求。
- 接收端更换了非公共信任CA签发的证书:如果对方近期将站点证书替换为内部私有CA签发、未被公共根证书库收录的证书,只有提前手动导入过该私有CA根证书的客户端才能正常通过校验,其余普通客户端访问时都会报无法找到本地签发者证书的错误,同样不会影响其他使用公共信任CA证书的站点。
- 接收端SNI配置错误:如果对方服务器的HTTPS虚拟主机规则配置有误,你方发起请求时没有拿到对应域名的正确证书,而是拿到了同IP下其他站点的自签名证书/无效证书,也会触发单站点的证书校验失败。
- 发送端针对该站点的特殊证书配置失效:属于极个别场景,如果你方之前单独给该站点导入过专属的信任根证书,近期该证书过期或被误删,也会出现单站点访问失败,但你方已排查无基础设施变更,基本可以排除该可能。
快速定责验证方法
- 在你方服务器上使用同版本cURL直接请求目标域名,同时使用其他未做过特殊证书配置的设备/公共SSL检测工具测试目标站点,如果多端均报同类证书错误,可直接判定为接收端配置故障。
- 测试时临时跳过证书校验(仅用于故障定位,禁止生产环境长期开启):执行命令
curl https://目标域名 -k,如果加参数后可以正常访问,即可确认故障出在证书校验链路,和业务代码、网络连通性无关。 - 核对你方服务器CA根证书库的更新时间,如果近期无更新记录、且其余HTTPS站点访问全部正常,可完全排除发送端全局配置问题。
内容的提问来源于stack exchange,提问作者callum
相关产品推荐
相关产品推荐

