使用证书订阅MQTT主题时mosquitto_sub报证书验证失败错误
MQTT订阅SSL证书验证失败(error:0A000086)排查方案
针对你遇到的error:0A000086:SSL routines::certificate verify failed错误,在已确认证书路径和权限无误的前提下,可按以下方向排查:
参数使用错误:
--capathvs--cafile--capath要求指向存放CA证书的目录,且目录内证书需通过c_rehash生成哈希链接;如果你用的是单个CA证书文件,应该改用--cafile参数。修正后的命令示例:mosquitto_sub -d -v --cafile <path_to_file>/xxx.pem --cert <path_to_file>/yyy.pem.crt --key <path_to_file>/zzz.pem.key -h "<my_endpoint>" -p 8883 -t "<my_topic>"CA证书链不完整
若MQTT服务器证书由中间CA签发,仅提供根CA证书无法完成验证。需将根CA与所有中间CA证书内容合并到同一个.pem文件中,再通过--cafile指定该文件。证书域名/IP不匹配
客户端会验证服务器证书的CN(通用名称)或SAN(主题备用名称)是否与你指定的<my_endpoint>一致:- 用
openssl x509 -in <服务器证书文件> -noout -text查看证书的CN和SAN字段; - 若用IP连接,确认证书SAN包含该IP;
- 测试环境可临时添加
--insecure跳过域名验证(生产环境禁止使用)。
- 用
证书有效期异常
检查证书是否过期或未生效:openssl x509 -in <path_to_file>/yyy.pem.crt -noout -dates确保
notBefore早于当前时间,notAfter晚于当前时间。证书与私钥不配对
验证客户端证书和私钥是否匹配:# 提取证书公钥 openssl x509 -in <path_to_file>/yyy.pem.crt -noout -pubkey # 提取私钥对应公钥 openssl rsa -in <path_to_file>/zzz.pem.key -pubout两个输出的公钥内容必须完全一致,否则需更换匹配的证书/私钥对。
内容的提问来源于stack exchange,提问作者prime_mover
相关产品推荐
相关产品推荐

