Nodejs Safe MQTT Connection - PullRequest
       13

Nodejs Safe MQTT Connection

0 голосов
/ 28 октября 2019

На моем сервере я использую mqtt-брокер на основе node.js (mosca), у которого есть сертификат SSL от Certbot.

На стороне клиента я использую решение на основе node.js в качествехорошо (mqtt.js)

Теперь мой вопрос: чтобы иметь безопасное соединение, нужно ли мне иметь свойство rejectUnauthorized: true? Потому что я могу заставить его работать только при наличии самозаверяющего сертификата, что, конечно, не очень безопасно. При наличии обычного сертификата SSL на стороне сервера я не могу заставить его работать с rejectUnauthorized: true, почему?

Мои параметры сервера:

const settings = {
  port: 8883, 
  secure: {
    keyPath: '/etc/letsencrypt/live/XXX/privkey.pem',
    certPath: '/etc/letsencrypt/live/XXX/cert.pem',
  },
  https: {
    port: 443,
    bundle: true,
    static: './',
  },
};

Мои параметры подключения на стороне клиента:

const options = {
  host: "XXXXXX",
  port: 8883,
  protocol: "mqtts",
  rejectUnauthorized: true,
  username: process.env.USERNAME,
  password: process.env.PASSWORD,
};

Ошибка при получении:

Error: unable to verify the first certificate
    at TLSSocket.onConnectSecure (_tls_wrap.js:1318:34)
    at TLSSocket.emit (events.js:210:5)
    at TLSSocket._finishInit (_tls_wrap.js:792:8)
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:606:12) {
  code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
}

1 Ответ

2 голосов
/ 28 октября 2019

Обновите настройки на стороне сервера так, чтобы они указывали на fullchain.pem, а не на cert.pem файл

. Это будет включать полную цепочку доверия в том, что представляет сервер, которая должна включать сертификат корневого ЦС, который будетбыть в доверенном наборе, которое запекается в NodeJS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...