我正在尝试使用下面的包实现一个带有TLS的node.js mqtt客户端;
https://www.npmjs.com/package/mqtt#client
运行没有TLS的mqtt客户端的代码如下:
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://test.mosquitto.org')
client.on('connect', function () {
client.subscribe('presence')
client.publish('presence', 'Hello mqtt')
})
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString())
client.end()
})
如何修改上述代码以在mqtt客户端上使用TLS?
使用以下命令,mosca MQTT代理作为独立运行;
mosca --key ./tls-key.pem --cert ./tls-cert.pem --http-port 3000 --http-bundle --http-static ./ | pino
答案 0 :(得分:5)
足以将网址的protocol
部分更改为mqtts://
mqtts://test.mosquitto.org
。
自签名证书
使用自签名证书时,您可以将以下选项传递给connect
函数(仅用于测试目的):
mqtt.connect('mqtts://test.mosquitto.org', {
rejectUnauthorized: false
});
答案 1 :(得分:4)
您需要为mqtt.connect()
函数提供一个options对象,其中包含用于验证连接的CA证书。
options对象需要包含一个ca
密钥,该密钥指向用于签署代理证书的证书。看起来您使用的是自签名证书,这与经纪人使用的证书相同。
ca
键描述为here
或者您可以在@ notion的答案中提及rejectUnauthorized
密钥的任何证书。但是,这使得无法检测是否有人冒充你的经纪人