2016-10-13 13 views
2

Я пытаюсь реализовать client.js mqtt клиент с TLS, используя пакет ниже;node.js mqtt client using TLS

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

Код для запуска клиента MQTT без TLS выглядит следующим образом;

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

Как изменить код, чтобы использовать TLS на клиенте mqtt?

Брокер mosca MQTT был запущен как автономный, используя приведенную ниже команду;

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

ответ

5

Должно быть достаточно, чтобы изменить часть URL в mqtts://

mqtts://test.mosquitto.org.

Самозаверяющих сертификаты

Вы можете передать следующую опцию функции connect при использовании собственных сертификатов (только для целей тестирования):

mqtt.connect('mqtts://test.mosquitto.org', { 
    rejectUnauthorized: false 
}); 
+0

Это не сработает, потому что брокер использует самоподписанный сертификат, чтобы клиент не знал, чтобы ему доверять. – hardillb

+1

@ user91579631 При использовании самоподписанных сертификатов вы можете передать опцию «rejectUnauthorized: false» в качестве опции. Изменить: я добавил информацию в ответ. – notion

+0

Кажется, что клиенту не нужно знать сертификат и ключ, используемые брокером. Благодарю. – user781486

3

Вы должны предоставить mqtt.connect() с объектом опций, который включает сертификат ЦС для проверки соединения.

Объект options должен содержать ключ ca, который указывает на сертификат, используемый для подписания сертификата брокеров. Похоже, что вы используете самоподписанный сертификат, это будет тот же самый, который используется брокером.

ca ключ описывается here

Или вы можете позволить любой сертификат с rejectUnauthorized ключа, как указано в ответе @ понятие в. Но это делает невозможным обнаружение, если кто-то олицетворяет вашего брокера

+0

Как я могу указать ключ 'ca' в опции? Я не мог найти опцию 'ca' [здесь] (https://www.npmjs.com/package/mqtt#client) – user3496167

+1

Но он говорит, что объект options также передается' tls.connect() ' поэтому он может содержать любой из этих вариантов. – hardillb

+0

Спасибо. Я дам ему попробовать. – user3496167

 Смежные вопросы

  • Нет связанных вопросов^_^