11

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

手册页只描述了可用的设置,而不是需要的设置以及它们的使用方式。

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

我用蚊子 1.3.5

4

2 回答 2

19

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

您需要设置这些: certfile keyfile cafile

它们可以使用上面链接中的命令生成。但更简单的是使用这个脚本: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 或类似的),它只是允许证书不具有您要连接的主机的通用名称。因此,您应该确保您的证书将您的代理主机作为通用名称。

于 2014-10-30T15:39:11.223 回答
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

确保 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 代理将可公开访问。您可能还想添加授权。

于 2015-12-17T11:54:26.470 回答