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或类似的证书),它只允许证书不具有您要以通用名称连接的主机.因此,您应确保您的证书将您的代理主机作为通用名称.
为了保护 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 代理将可公开访问。您可能还想添加授权。
| 归档时间: |
|
| 查看次数: |
26911 次 |
| 最近记录: |