我正在尝试设置一个使用ssl / tls加密的mosquitto代理。我不想生成客户端证书。我只想要一个加密的连接。
手册页仅描述了可用的设置,而不是需要的设置以及如何使用它们。
需要哪些设置以及如何设置它们?
我使用mosquitto 1.3.5
答案 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代理将可公开访问。您也可以添加授权。