你如何设置加密蚊子经纪人像一个有https的网页?

时间:2014-10-30 15:39:11

标签: ssl encryption certificate mqtt mosquitto

我正在尝试设置一个使用ssl / tls加密的mosquitto代理。我不想生成客户端证书。我只想要一个加密的连接。

手册页仅描述了可用的设置,而不是需要的设置以及如何使用它们。

需要哪些设置以及如何设置它们?

我使用mosquitto 1.3.5

2 个答案:

答案 0 :(得分:16)

这里有一个小指南,但没有多说:http://mosquitto.org/man/mosquitto-tls-7.html

您需要设置以下内容: certFile中 密钥文件 凭证档案错误

可以使用上面链接中的命令生成它们。但更容易使用此脚本:https://github.com/owntracks/tools/blob/master/TLS/generate-CA.sh

运行脚本并更改配置后,它看起来像这样:

listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/hostname.localdomain.crt
keyfile /etc/mosquitto/certs/hostname.localdomain.key

如果mosquitto说Unable to load server key file,则意味着运行mosquitto的用户无权读取该文件。即使你以root身份启动它,代理也可能以另一个用户启动,例如mosquitto。要解决这个问题,例如chown mosquitto:root keyfile

要连接到代理,客户端将需要ca.crt文件。如果你不提供这个,经纪人会说:

  

OpenSSL错误:错误:1408F10B:SSL例程:SSL3_GET_RECORD:版本号错误

要将其提供给mosquitto_sub命令,请使用--cafile pathToCaCrt。 ca.crt可以与客户端一起分发,它将确保它所连接的服务器实际上是正确的服务器。

mosquitto_sub的--insecure标志不会使客户端接受所有证书(例如wget或类似证书),它只允许证书没有以通用名称连接到的主机。因此,您应该确保您的证书将您的代理主机作为通用名称。

答案 1 :(得分:4)

保护Mosquitto的WebSocket访问权限,例如使用Let的加密证书,您的配置文件可能如下所示:

listener 9001
protocol websockets
certfile /etc/letsencrypt/live/yourdomain.com/cert.pem
cafile /etc/letsencrypt/live/yourdomain.com/chain.pem
keyfile /etc/letsencrypt/live/yourdomain.com/privkey.pem

确保Mosquitto可以读取这些文件(特别是Debian在mosquitto用户下运行Mosquitto,这是非特权的)。您需要使用Mosquitto 1.4来支持WebSockets。

使用Paho JavaScript客户端连接到此WebSocket:

// host and port overwritten at connect
var mqtt = new Paho.MQTT.Client("yourdomain.com", 9001, "");   

mqtt.connect({
    hosts: [ "wss://yourdomain.com:9001/" ],
    useSSL: true
});

请注意,这并不意味着任何访问控制,因此您的MQTT代理将可公开访问。您也可以添加授权。