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

Gus*_*soh 11 encryption ssl certificate mqtt mosquitto

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

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

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

我使用mosquitto 1.3.5

Gus*_*soh 17

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

你需要设置这些:certfile keyfile cafile

可以使用上面链接中的命令生成它们.但更容易使用此脚本:https://github.com/centracks/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
Run Code Online (Sandbox Code Playgroud)

如果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可以与客户端一起分发,它将确保它所连接的服务器实际上是正确的服务器.

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


rom*_*mor 5

为了保护 Mosquitto 的 WebSocket 访问,例如使用 Let's Encrypt 证书,您的配置文件可能如下所示:

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
Run Code Online (Sandbox Code Playgroud)

确保 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
});
Run Code Online (Sandbox Code Playgroud)

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

  • 只是想补充......如果你在AWS EC2上,你需要设置你的安全组的入站规则来打开端口(在这种情况下是9001)......我真的很糟糕 (2认同)