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

Windows环境下MQTT连接报SSLCertVerificationError证书过期错误如何解决

问题根因

报错明确指向SSL证书校验失败,核心触发点是证书过期,结合代码此前可正常运行的前提,通常对应两类情况:

  • MQTT Broker端的服务端SSL证书已到期,运维侧未及时更新证书
  • Windows本地的根证书信任列表中,对应Broker证书的签发根证书/中间证书已过期,或是paho-mqtt依赖的CA根证书包版本过旧,内置了已过期的根证书

解决方案

按优先级依次尝试以下操作:

  1. 优先确认MQTT Broker的证书状态
    用openssl命令即可校验Broker证书有效期,执行命令:
    openssl s_client -connect [你的Broker地址]:[Broker端口] -showcerts
    查看返回结果里的证书有效期区间,若确实已过期,联系Broker运维人员更新证书即可恢复。
  2. 确认Broker证书有效的前提下,更新本地CA根证书包
    你代码里的tls_set()没有传CA证书路径,默认会读取系统或依赖库自带的CA根证书列表,Windows环境下先更新paho-mqtt默认依赖的根证书数据源certifi即可:
    pip install --upgrade certifi
  3. 本地测试场景可临时跳过证书校验(生产环境严禁使用)
    仅做本地功能调试不需要严格校验证书的话,可以修改tls_set()配置关闭校验,修改后的代码如下:
    import ssl
    client = mqtt.Client(Client_id)
    # 新增参数关闭证书校验
    client.tls_set(cert_reqs=ssl.CERT_NONE)
    # 额外关闭hostname校验避免衍生报错
    client.tls_insecure_set(True)
    client.username_pw_set(username=usename,
                           password=password)
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect(Broker, Port, Keep_Alive)
    client.loop_forever()
    
  4. 手动指定可信CA证书路径
    如果你持有Broker对应的可信CA根证书文件,直接在tls_set()中传入证书本地路径即可,优先级高于系统默认根证书列表:
    client.tls_set(ca_certs="你的CA证书文件本地存储路径")
  5. 检查Windows系统根证书更新状态
    打开Windows更新面板,确认系统的根证书更新补丁已安装,避免系统内置根证书过期导致校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:39:01