Шифрование TLS/SSL в MQTT Mosquitto не работает

#encryption #mqtt #mosquitto

Вопрос:

Я использую Mosquitto MQTT для отправки некоторых измерений мониторинга с удаленного Raspberry Pi на мой локальный Raspberry Pi. Все работает, когда трафик не зашифрован и проходит через порт 8001. Я использую пароль для аутентификации, однако, поскольку он отправляется в виде обычного текста, он не обеспечивает большой безопасности. Поэтому я хотел бы использовать шифрование TLS/SSL, которое я, к сожалению, не могу настроить.

Я не очень хорошо разбираюсь в нетворкинге, но стараюсь объяснить все как можно подробнее.

  • sudo ufw allow 8883
  • Перенаправление портов в моем маршрутизаторе из локальной сети -> WAN с 80 ->> 80, 443 ->>> 443, 8883 ->>>> 8883
  • sudo ufw allow 80 # Я думаю, что это необходимо только для получения сертификата.
  • sudo ufw allow 443 # Я не знаю, нужно ли это.
  • Я создал Let’s Encrypt сертификаты с sudo certbot certonly --standalone --preferred-challenges http -d domain.com # domain.com просто является держателем места
  • sudo systemctl status mosquitto.service бежит.

/etc/москито/mosquitto.config

 persistence false
persistence_location /var/lib/mosquitto/

listener 1883 192.168.0.235

listener 8883
certfile /etc/letsencrypt/live/domain.com/cert.pem
cafile /etc/letsencrypt/live/domain.com/fullchain.pem
keyfile /etc/letsencrypt/live/domain.com/privkey.pem
# tls_version tlsv1.2

allow_anonymous false
password_file /etc/mosquitto/passwd

log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
 

/etc/mosquitto/conf.d/по умолчанию.conf пуст.

Моя проблема в том, что публикация и подписка не работают. На Raspberry Pi с брокером, которым я управляю mosquitto_sub -h domain.com -t test --capath /etc/ssl/certs/ -d -p 8883 . Я не уверен, что она --capath должна быть /etc/ssl/certs/ или каталог из letsencrypt /etc/letsencrypt/live/domain.com/ .

На сайте публикации: Нужно ли мне копировать какие-либо сертификаты (cert.pem, fullchain.pem или privkey.pem) в Raspberry Pi для публикации? Потому что я думаю, что мне чего-то не хватает, потому mosquitto_pub -h domain.com -t test -m "Hello World!" -d -p 8883 что не работает.

Поэтому я думаю, что у меня есть все доступные фрагменты, но я неправильно собрал их вместе. Любая помощь или обратная связь высоко ценятся, и я рад помочь с дополнительной информацией или журналами. На следующем шаге я хотел бы автоматизировать его с помощью paho-mqtt на Python.

С уважением.

Комментарии:

1. Является ли издательский Ип в той же сети, что и ваш брокер? Если да, поддерживает ли ваш маршрутизатор NAT-шпильку?

2. Также отредактируйте вопрос, чтобы показать сообщения об ошибках, которые вы получаете от клиентов и журналов mosquitto при попытке подключиться.

Ответ №1:

На ваше mosquitto.conf , certfile должно указывать fullchain.pem и cafile должно указывать /etc/ssl/certs/DST_Root_CA_X3.pem .

При подключении к брокеру mosquitto_pub с помощью или mosquitto_sub вам необходимо передать корневой сертификат, чтобы клиент мог проверить сертификат брокера. Поэтому в обоих случаях вы должны пройти --cafile /etc/ssl/certs/DST_Root_CA_X3.pem (не используйте --capath , так как это не будет работать с файлами .pem).

Кроме того, у вас есть allow_anonymous false , а это значит, что брокер ожидает, что вы передадите имя пользователя и пароль при подключении. Я предлагаю изменить его на true первый, чтобы вы могли сосредоточиться на работе tls-соединения.

Можете ли вы попробовать это и поделиться, сработало ли это?