You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mod_wsgi中HTTPS调用9090端口遇本地证书验证失败问题求助

问题解答

结论:9090端口本身不是导致证书验证失败的原因。SSL证书验证逻辑不依赖端口,只和证书本身的有效性、信任链完整性以及域名匹配有关。

你遇到的SSL: CERTIFICATE_VERIFY_FAILED错误,核心原因是Python通过certifi提供的根证书库,无法验证myexample.com:9090返回的证书信任链,常见排查和解决方向如下:

1. 检查9090端口服务返回的证书链

用OpenSSL命令直接查看目标端口返回的证书详情:

openssl s_client -connect myexample.com:9090 -showcerts

重点看输出里的证书链部分:

  • 是否包含完整的证书层级(叶子证书→中间证书→根CA证书)
  • 有没有出现unable to get local issuer certificate的提示,这通常说明服务器只返回了叶子证书,未提供中间证书,导致客户端无法完成信任链追溯。

2. 确认certifi根库是否信任证书的签发CA

certifi.where()指向的是Mozilla维护的公开根CA库,如果myexample.com:9090的证书是由私有CA、内部CA或certifi未收录的小众CA签发的,就会验证失败。

  • 可以将该CA的根证书(或完整证书链)添加到certifi的信任目录,或者在创建SSL上下文时直接指定包含该CA证书的文件:
    context = ssl.create_default_context(cafile="/path/to/your/ca-cert.pem")
    req = urlopen(url, context=context)
    

3. 验证证书的域名匹配性

虽然不涉及端口,但要确认证书的**主题备用名称(SAN)或通用名称(CN)**是否包含myexample.com(证书验证不检查端口,只校验域名)。如果证书绑定的是其他域名,也会触发验证失败。

4. 排查服务器端证书配置问题

确保9090端口的服务(比如Nginx、Apache等)配置了完整的证书链文件,而不仅仅是叶子证书。大多数Web服务器需要将叶子证书和所有中间证书合并到一个文件中,才能正确返回完整的信任链给客户端。

不推荐的临时方案的问题

你使用的ssl._create_unverified_context()会完全跳过SSL证书验证,存在中间人攻击风险,且部分场景下失败可能是因为其他网络问题(比如代理、防火墙拦截),无法从根本上解决证书信任问题。

内容的提问来源于stack exchange,提问作者peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 12:27:31