Mqtt TLS 证书验证失败:自签名证书
Mqtt TLS certificate verify failed : self signed certificate
我正在尝试为 mqtt 实施 TLS,并已遵循下面 link 中的教程
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 在项目目录中。
您收到的消息表明经纪人的服务器证书不受信任(因为它是自签名的),因此没有正确告知 paho 是值得信任的。
您的假证书颁发机构的根证书(您提供给 paho 的 ca.crt
文件)可能未正确签名或生成,或者 Mosquitto 使用的证书未正确签名。无论哪种方式,您可能都需要重新开始整个过程才能 100% 确定一切都正确完成。
生成伪造的证书颁发机构 (CA) 签名密钥
$ openssl genrsa -des3 -out ca.key 2048
为假 CA 生成证书签名请求
$ openssl req -new -key ca.key -out ca-cert-request.csr -sha256
- 给组织起一个像“Fake Authority”这样的名称,不要输入通用名称(因为您的假 CA 实际上并不存在于具有名称的服务器上)
创建伪造的 CA 根证书
$ openssl x509 -req -in ca-cert-request.csr -signkey ca.key -out ca-root-cert.crt -days 365 -sha256
创建服务器/mqtt 代理的密钥对
$ openssl genrsa -out server.key 2048
使用服务器密钥创建证书签名请求发送给假 CA 进行身份验证
$ openssl req -new -key server.key -out server-cert-request.csr -sha256
- 为组织命名,例如“Localhost MQTT Broker Inc.”。并且通用名称应该是
localhost
或您用来连接到 mqtt 代理的确切域
现在作为假 CA,您收到服务器的签名请求。您已验证服务器是它所说的(在本地主机上运行的 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 现在应该能够安全地连接和通信。
我正在尝试为 mqtt 实施 TLS,并已遵循下面 link 中的教程 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 在项目目录中。
您收到的消息表明经纪人的服务器证书不受信任(因为它是自签名的),因此没有正确告知 paho 是值得信任的。
您的假证书颁发机构的根证书(您提供给 paho 的 ca.crt
文件)可能未正确签名或生成,或者 Mosquitto 使用的证书未正确签名。无论哪种方式,您可能都需要重新开始整个过程才能 100% 确定一切都正确完成。
生成伪造的证书颁发机构 (CA) 签名密钥
$ openssl genrsa -des3 -out ca.key 2048
为假 CA 生成证书签名请求
$ openssl req -new -key ca.key -out ca-cert-request.csr -sha256
- 给组织起一个像“Fake Authority”这样的名称,不要输入通用名称(因为您的假 CA 实际上并不存在于具有名称的服务器上)
创建伪造的 CA 根证书
$ openssl x509 -req -in ca-cert-request.csr -signkey ca.key -out ca-root-cert.crt -days 365 -sha256
创建服务器/mqtt 代理的密钥对
$ openssl genrsa -out server.key 2048
使用服务器密钥创建证书签名请求发送给假 CA 进行身份验证
$ openssl req -new -key server.key -out server-cert-request.csr -sha256
- 为组织命名,例如“Localhost MQTT Broker Inc.”。并且通用名称应该是
localhost
或您用来连接到 mqtt 代理的确切域
- 为组织命名,例如“Localhost MQTT Broker Inc.”。并且通用名称应该是
现在作为假 CA,您收到服务器的签名请求。您已验证服务器是它所说的(在本地主机上运行的 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 现在应该能够安全地连接和通信。