Cертификаты SSL/TLS используются для шифрования связи и аутентификации с брокером.
Что мы сделаем? Создадим сертификаты (используется дистрибутив openssl. У меня он уже установлен по умолчанию).
Сертификаты будут как для сервера, так и для клиента.
Ключи не будут содержать паролей, т.к. при соединении клиентов в
данном случае может быть ошибка, но пароль будет тот, что мы установили и использовали ранее mosquitto.
Будет настроена возможность подключение к броккеру без шифрования как к порту 1883 и через WebSocket к порту 9001. Это можно использовать внутри домашней локальной сети. Так же будет настроено подключеник к портам 8883 и 9883, это то же самое , но через использование TLS/SSL. Причем будет два варианта. Один через аутентификацию с помощью логина и пароля, и шифрования канала. Второй через аутентификацию с помощью клиентского сертификата и логина с паролем.
Поехали.
Скачиваем с GitHub скрипт для создания сертификатов:
Раскоментировать следующие строки. И указать обязательно свой белый внешний IP адрес и если есть , то и домен привязанный к этому адресу. Если адресов и доменов несколько, то указать через запятую.:
Код:
IPLIST="ВашБелыйIP"
HOSTLIST="ВашДомен"
ВашДомен- это реальный домен( если есть) который привязан к Вашему внешнему IP или внешний IP.
Теперь сгенерируем сертификаты сервера.
Код:
sudo bash ./generate-CA.sh
Зайдем в домашнюю директорию пользователя и увидим , что создались шесть файлов.
Код:
ca.crt
ca.key
ca.srl
И фалы с названием Вашего сервера. У теня это RaspberyPi.
raspderrypi.crt
raspberrypi.csr
raspberry.key
Теперь в настройках клиента попробуйте вкл/выкл режим TLS/SSL/. Вы увидите, что без шифрования клиент не подключается.
В данном случае аутентификация идёт по паролю и логину(которое мы настроиили ранее), а шифрование с помощью сертификатов.
Ну а теперь настроим mosquitto с обязательным использованием клиентских сертификатов.
Для этого надо создать для каждого клиента свой сертификат.
Название будем использовать по устройству. Например насос - nasos, а телефон- telephone.
запустим скрипт создания сертификатов с ключём client:
Скопируем их и вставим в настройках клиентов.
Некоторые программы требуют передачи ключа клиента в зашифрованном контейнере. Берём код и вместо User вставляем название сертификата конкретного клиента:
разрешают подключаться только клиентам с личными сертификатами.
Теперь по внутренней сети можно подключаться к порту 1883 и через WebSocket к порту 9001, аутентификация по логину и паролю. А из вне, при условии проброса портов через роутер, к портам 8883 и через WebSocket 9883 только при наличии у клиента серификата и логина с паролем, которые мы установили при первичной настройке брокера.