【问题标题】:Mqtt TLS certificate verify failed : self signed certificateMqtt TLS 证书验证失败:自签名证书
【发布时间】:2021-11-25 11:34:38
【问题描述】:

我正在尝试为 mqtt 实现 TLS,并已按照以下链接中的教程进行操作 http://www.steves-internet-guide.com/mosquitto-tls/

我完全按照指示使用openssl生成证书并粘贴到mqtt的位置并更改了mqtt的conf并重新启动了服务。 但是当我尝试使用 tls 连接到 mqtt 时,它会显示以下错误消息

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1124)

而python代码是

client1 = paho.Client("control1")
client1.tls_set(ca_certs="ca.crt")
client1.tls_insecure_set(True)
client1.connect("localhost", 8883)
client1.loop_forever()

ca.crt 在项目目录中的位置。

【问题讨论】:

    标签: python ssl mqtt paho


    【解决方案1】:

    您收到的消息表明代理的服务器证书不受信任(因为它是自签名的),因此没有正确告知 paho 它是可信任的。

    可能是您的伪造证书颁发机构的根证书(您提供给 paho 的 ca.crt 文件)未正确签名或生成,或者 Mosquitto 使用的证书未正确签名。无论哪种方式,您都可能需要重新开始整个过程​​,才能 100% 确定一切都正确完成。

    1. 生成虚假证书颁发机构 (CA) 的签名密钥
      $ openssl genrsa -des3 -out ca.key 2048

    2. 为伪造的 CA 生成证书签名请求
      $ openssl req -new -key ca.key -out ca-cert-request.csr -sha256

      • 为组织命名,例如“Fake Authority”,不要输入通用名称(因为您的假 CA 实际上并不存在于具有名称的服务器上)
    3. 创建假 CA 的根证书
      $ openssl x509 -req -in ca-cert-request.csr -signkey ca.key -out ca-root-cert.crt -days 365 -sha256

    4. 创建服务器/mqtt代理的密钥对
      $ openssl genrsa -out server.key 2048

    5. 使用服务器密钥创建证书签名请求以发送到假 CA 进行身份验证
      $ openssl req -new -key server.key -out server-cert-request.csr -sha256

      • 为组织命名,例如“Localhost MQTT Broker Inc.”。通用名称应为 localhost 或您用于连接到 mqtt 代理的确切域
    6. 现在作为假 CA,您收到服务器对您签名的请求。您已经验证了服务器就是它所说的身份(在 localhost 上运行的 MQTT 代理),因此请创建一个新证书并使用您的虚假授权的所有权力对其进行签名。
      $ openssl x509 -req -in server-cert-request.csr -CA ca-root-cert.crt -CAkey ca.key -CAcreateserial -out server.crt -days 360

    现在您拥有所需的一切。确保(在史蒂夫的教程中)Mosquitto 在mosquitto.conf 中加载以下内容:

    listener 8883
    cafile certs\ca-root-cert.crt
    keyfile certs\server.key
    certfile certs\server.crt
    

    确保 paho-mqtt 正在加载假 CA 的根证书。

    client1.tls_set(ca_certs="ca-root-cert.crt")
    

    这就是它如何知道 mosquitto 的 server.crt 是由“真实且受信任的权威机构”合法签名的,而不是“自签名”,因此不受信任。 Mosquitto 和 paho 现在应该能够安全地连接和通信了。

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 2021-12-06
      • 1970-01-01
      • 2017-04-18
      • 2021-11-10
      • 2023-01-03
      相关资源
      最近更新 更多