我使用普通的旧TCP使mosquitto工作,但我想使用SSL和TLS保护它,因此我按照以下指南为我的mosquitto代理创建证书:

https://mosquitto.org/man/mosquitto-tls-7.html

然后,将以下几行添加到配置文件中:

listener 8883
cafile /mqtt/certs/ca.crt
certfile /mqtt/certs/server.crt
keyfile /mqtt/certs/server.key
require_certificate false


但是现在当我尝试在另一台计算机上使用mosquitto_sub尝试通过端口8883(TLS)连接到mosquitto代理时,在代理上出现以下错误

New connection from XX.XXX.XXX.XXX on port 8883.
OpenSSL Error: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca
OpenSSL Error: error:140940E5:SSL routines:SSL3_READ_BYTES:ssl handshake failure
Socket error on client <unknown>, disconnecting.


我尝试通过以下方式进行mosquitto_sub的操作:

$ mosquitto_sub -h "HOST_HERE.com" -t "sup" -p 8883
$ mosquitto_sub -h "HOST_HERE.com" -t "sup" -p 8883 --cafile ca.crt
$ mosquitto_sub -h "HOST_HERE.com" -t "sup" -p 8883 --cafile ca.crt --cert client.crt --key client.key


客户端的证书是根据我前面提到的第一个链接生成的。

有人知道为什么会这样吗,我该如何解决呢?

最佳答案

这是订阅的好方法,因为您不需要客户端证书:

 mosquitto_sub -h "HOST_HERE.com" -t "sup" -p 8883 --cafile ca.crt


客户端似乎无法验证服务器证书。
您应该确保:


ca.crt在客户端和服务器端相同
服务器证书的通用名称与其主机名相对应


还要检查服务器和客户端上的openssl版本是否相同,因为如果客户端和服务器不使用通用协议或不共享任何密码,也可能发生此错误

希望对您有所帮助,否则我将很想知道您如何解决此问题

关于ssl - 如何在mosquitto(MQTT)代理上设置TLS?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35706723/

10-10 15:00