6

I am trying to implement a node.js mqtt client with TLS using the package below;

https://www.npmjs.com/package/mqtt#client

The code for running mqtt client without TLS is as follows;

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()
})

How should the above code be modified to use TLS on the mqtt client?

The mosca MQTT broker was run as a stand-alone using the command below;

mosca --key ./tls-key.pem --cert ./tls-cert.pem --http-port 3000 --http-bundle --http-static ./ | pino
4

2 回答 2

11

应该足以将protocolURL 的一部分更改为mqtts://

mqtts://test.mosquitto.org.

自签名证书

connect使用自签名证书时,您可以将以下选项传递给函数(仅用于测试目的):

mqtt.connect('mqtts://test.mosquitto.org', {
    rejectUnauthorized: false
});
于 2016-10-13T11:19:27.160 回答
5

您需要为该mqtt.connect()函数提供一个选项对象,其中包括用于验证连接的 CA 证书。

选项对象需要包含一个ca密钥,该密钥指向用于签署代理证书的证书。看起来您使用的是自签名证书,这将与经纪人使用的证书相同。

此处描述了ca密钥

rejectUnauthorized或者,您可以使用@notion 的答案中提到的密钥允许任何证书。但这使得无法检测是否有人冒充您的经纪人

于 2016-10-13T11:24:51.397 回答