使用TLS

时间:2016-10-13 10:44:13

标签: node.js ssl mqtt tls1.2 mosca

我正在尝试使用下面的包实现一个带有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

2 个答案:

答案 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密钥的任何证书。但是,这使得无法检测是否有人冒充你的经纪人