Как настроить Mosca для mqtts без клиента, имеющего сертификат? - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть брокер Mosca MQTT, работающий на экземпляре узла, и я хотел бы зашифровать все входящие соединения с помощью SSL / TLS (протокол MQTTs), но без необходимости связывать какой-либо сертификат с подключением (я полагаю, это должно делать с самоподписанными сертификатами) так же, как работает https. Я хочу, чтобы все мои клиенты подключались только с учетными данными, указывающими протокол MQTT, и связь может быть зашифрована. Я использовал Amazon MQ как раз раньше, и вот как это работает, поэтому я хочу то же самое.

Я не могу понять, как правильно настроить Mosca для этого, я не знаю, какой сертификат я должен использовать.

  • Я добавил защищенное поле в конфигурации, как показано здесь

  • Для сертификата я попытался создать самозаверяющий сертификат, как показано здесь

  • Я также пытался использовать сертификаты certbot (Let's Encrypt), зарегистрированные для моего доменного имени: mq.xxx.com.

Я запускаю все на ec2 (ubuntu 18), и моя сеть и брандмауэр открыты для 1883 и 8883. Мой ключ и сертификат находятся в корне моего проекта, где работает демон с хорошими правами и правами собственности. Я знаю, что мой экземпляр правильно обращается к ним.

new mosca.Server({
   port: 1883,
   secure: {
      keyPath: "./privkey.pem",
      certPath: "./cert.pem"
   },
   backend: {
      type: 'redis',
      redis: require('redis'),
      host: "localhost",
      port: 6379,
      db: 0,
      return_buffers: true,
   },
   persistence: {
      factory: mosca.persistence.Redis
   }
});

Мой сервер работает и работает с простым mqtt на порту 1883, но когда я пытаюсь соединиться с ssl / tls с клиентом на порту 8883, указывающем, что сервер использует самозаверяющие сертификаты (я пробовал с MQTT.fx), это терпит неудачу поговорка: "невозможно найти действительный путь сертификации для запрошенной цели" .

Я не могу обойти эту проблему, я думаю, что клиент почему-то не может "принять" или "проверить" предоставленный сертификат. Может быть, я предоставляю неправильный ключ или сертификат для Mosca, но есть только один из всех полученных openssl или certbot. Может быть, я создал неправильно, но я следую многим учебникам по той же теме, например этот

Какой сертификат мне нужен?

Есть что-то еще с ними делать?

Спасибо.

1 Ответ

1 голос
/ 05 апреля 2019

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

Если вы не хотите / не можете распространять сертификат, вам нужно будет использовать сертификат для вашего брокера, который выдается CA (Certificate Authority), который подписывает уже имеющийся сертификат (связанный с ОС / клиентом, который вы используете).

Сертификаты подписи Lets Encrypt уже должны быть включены в большинство операционных систем, но они также перекрестно подписаны IdenTrust, чьи сертификаты должны быть связаны с большинством операционных систем. Если у вас возникли проблемы с сертификатами Lets Encrypt, то я предлагаю вам задать новый вопрос с точными сведениями о том, как вы настроили mosca с этими сертификатами, и более подробную информацию о том, как вы настраиваете MQTT.fx, и об ошибках, которые вы получаете.

...