Отправка сообщения удаленному брокеру с использованием pem-сертификата - PullRequest
0 голосов
/ 20 февраля 2019

Я пишу сценарий для получения некоторых данных датчика с помощью MQTT, преобразования входного значения особым образом и передачи его в облако, которое использует зашифрованное соединение.Скрипт работает на RaspberryPi 3 (Raspbian), где Mosquitto работает как MQTT-брокер (датчики отправляют данные этому брокеру)

Пока что я получаю информацию от датчиков и могу преобразовывать контент по своему усмотрению.

Проблема в том, что когда я пытаюсь подключиться к удаленному брокеру, я получаю следующее сообщение об ошибке

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Error (native)
at Object.createSecureContext (_tls_common.js:67:17)
at Object.TLSSocket._init.ssl.onclienthello.ssl.oncertcb.exports.connect (_tls_wrap.js:1015:46)
at Object.buildBuilder (/home/pi/node_modules/mqtt/lib/connect/tls.js:13:20)
at MqttClient.wrapper [as streamBuilder] (/home/pi/node_modules/mqtt/lib/connect/index.js:135:36)
at MqttClient._setupStream (/home/pi/node_modules/mqtt/lib/client.js:246:22)
at new MqttClient (/home/pi/node_modules/mqtt/lib/client.js:227:8)
at Object.connect (/home/pi/node_modules/mqtt/lib/connect/index.js:138:10)
at Object.<anonymous> (/home/pi/GATT_server/MQTT_module.js:3:25)

Я попытался настроить Mosquitto как MQTT-мост для использования конфигурации.файл, и похоже, что он будет работать (при перезапуске службы нет сообщений об ошибках).

Проблема, когда я использую Mosquitto в качестве моста, скрипт не может подписаться на темы, опубликованные датчиками.

Я не знаком с этими сертификатами, но прочитав документацию по файлу client-options.cs, я написал следующие строки:

var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://localhost', 'port:1883');
var remoteBroker = mqtt.connect('mqtts://xxx.xxx.io', 
	{port:8883,
	protocol:'ssl', 
	username:'username', 
	password:'123password123', 
	cert:'/etc/mosquitto/certs/ca.pem'} );
                
/*....
.... many lines later
....*/
remoteBroker.publish(topicToUseOnRemoteMqttBroker, PayloadToForward); 

Я правильно делаю?Или я что-то пропустил?

Если сертификат для Mosquitto-Bridge в порядке, то и для удаленного брокера тоже будет в порядке.- Это правильно?

Если у вас есть дополнительные ссылки / статьи по этой теме - мне нравится изучать; P Google дал мне так много информации - я не знаю, с чего начать: (

1 Ответ

0 голосов
/ 20 февраля 2019

Запись для cert должна быть не путем к файлу сертификата, а фактическим сертификатом, который он сам.Вам нужно прочитать файл и передать его.

Что-то вроде этого:

var remoteBroker = mqtt.connect('mqtts://xxx.xxx.io', 
    {port:8883,
    protocol: 'ssl', 
    username: 'username', 
    password: '123password123', 
    cert: fs.readFileSync('/etc/mosquitto/certs/ca.pem')} );
...