如何在mosquitto(MQTT)代理上设置TLS?

时间:2016-02-29 18:22:31

标签: ssl server mqtt mosquitto tls1.2

我使用普通的旧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

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

任何人都知道为什么会发生这种情况以及如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

希望它可以提供帮助,否则我很想知道你是如何解决这个问题的

答案 1 :(得分:0)

尝试--insecure选项。

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