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

DST Root CA X3过期后Python WebSocket客户端连接API出现证书问题

问题原因及解决方案

可能的原因

  • Python默认使用独立的证书信任体系,和Windows系统、Chrome浏览器的信任存储不互通。你修改系统证书存储的操作对Python程序无效,Python默认使用certifi包提供的根证书列表,而非系统的信任证书。
  • 你使用的websocket客户端库依赖的根证书列表未更新,仍包含过期的DST Root CA X3证书,或者未正确匹配Globalsign Root CA R1的信任链,导致证书验证失败。
  • 部分旧版本的Python ssl模块在Windows下默认没有优先读取系统信任证书,即使你已经在系统中禁用了过期根证书,Python的ssl验证逻辑仍会走旧的信任链校验。

解决方法

方案1:更新相关依赖包

优先升级certifi根证书包和你使用的websocket客户端库,以websocket-client为例,执行以下命令:
pip install --upgrade certifi websocket-client
升级完成后重启程序即可,新版本的certifi已经移除了过期的DST Root CA X3,且已收录有效的Globalsign Root CA R1根证书。

方案2:强制Python读取系统信任证书

在websocket连接时手动指定使用系统默认的ssl上下文,示例代码如下:

import ssl
import websocket

# 创建系统默认ssl上下文,会读取Windows系统的信任证书
context = ssl.create_default_context()
# 连接时传入ssl上下文
ws = websocket.WebSocket()
ws.connect("wss://你的API地址", sslopt={"context": context})

也可以在运行程序前设置系统环境变量SSL_CERT_FILE指向系统CA证书路径,无需修改代码即可生效。

方案3:手动指定有效根证书

如果上述方案无效,可以手动导出Chrome浏览器中保存的Globalsign Root CA R1证书(PEM格式),在连接时手动指定该证书路径:

import websocket

ws = websocket.WebSocket()
ws.connect("wss://你的API地址", sslopt={"ca_certs": "path/to/globalsign_r1.pem"})

方案4:临时测试方案(仅用于验证问题,禁止在生产环境使用)

可以临时关闭证书验证快速定位问题,如果关闭后可以连接,即可确认是证书信任问题:

import ssl
import websocket

ws = websocket.WebSocket()
ws.connect("wss://你的API地址", sslopt={"cert_reqs": ssl.CERT_NONE})

验证完成后务必改回正常的证书验证逻辑,避免出现安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:24:04