Mqtt TLS 证书验证失败:自签名证书

问题描述 投票:0回答:2

我正在尝试为 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
2个回答
8
投票

您收到的消息表明经纪人的服务器证书不受信任(因为它是自签名的),因此泛美卫生组织没有被正确告知它是值得信赖的。

您的假证书颁发机构的根证书(您提供给 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,收到服务器的签名请求。您已经验证了服务器的真实身份(在本地主机上运行的 MQTT 代理),因此创建一个新证书并使用您的虚假授权的所有权力对其进行签名。

    $ openssl x509 -req -in server-cert-request.csr -CA ca-root-cert.crt -CAkey ca.key -CAcreateserial -out server.crt -days 360

现在您拥有了所需的一切。确保(如 Steve 的教程中所示)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 现在应该能够安全地连接和通信。


0
投票

在此过程中,您能否向我解释一下 CA、客户端(在本例中为 Paho)和 Mosquitto 证书是什么?谢谢

© www.soinside.com 2019 - 2024. All rights reserved.