РазделыНовостиПоследние новости → Клиентские сертификаты SSL / T...

Cертификаты SSL/TLS используются для шифрования связи и аутентификации с брокером.
Что мы сделаем? Создадим сертификаты (используется дистрибутив openssl. У меня он уже установлен по умолчанию).
Сертификаты будут как для сервера, так и для клиента.
Ключи не будут содержать паролей, т.к. при соединении клиентов в
данном случае может быть ошибка, но пароль будет тот, что мы установили и использовали ранее mosquitto.
Будет настроена возможность подключение к броккеру без шифрования как к порту 1883 и через WebSocket к порту 9001. Это можно использовать внутри домашней локальной сети. Так же будет настроено подключеник к портам 8883 и 9883, это то же самое , но через использование TLS/SSL. Причем будет два варианта. Один через аутентификацию с помощью логина и пароля, и шифрования канала. Второй через аутентификацию с помощью клиентского сертификата и логина с паролем.
Поехали.
Скачиваем с GitHub скрипт для создания сертификатов:
Код:

wget https://github.com/owntracks/tools/raw/master/TLS/generate-CA.sh

В нем надо отредактировать под себя следующие строки:
Код:

CA_ORG='/O=ВашДомен/OU=ВашДомен/emailAddress=ВашаПочта'

CA_DN="/CN=ИмяВашейОрганизации${CA_ORG}"
Раскоментировать следующие строки. И указать обязательно свой белый внешний IP адрес и если есть , то и домен привязанный к этому адресу. Если адресов и доменов несколько, то указать через запятую.:
Код:

IPLIST="ВашБелыйIP"

HOSTLIST="ВашДомен"
ВашДомен- это реальный домен( если есть) который привязан к Вашему внешнему IP или внешний IP.
Теперь сгенерируем сертификаты сервера.
Код:

sudo bash ./generate-CA.sh

Зайдем в домашнюю директорию пользователя и увидим , что создались шесть файлов.
Код:

ca.crt

ca
.key
ca
.srl
И фалы с названием Вашего сервера
У теня это RaspberyPi.
raspderrypi.crt
raspberrypi
.csr
raspberry
.key
Три из них скопируем в каталоги mosquitto:
Код:

sudo cp ca.crt /etc/mosquitto/ca_certificates/

sudo cp ВашХост.crt ВашХост.key /etc/mosquitto/certs/
Теперь в конце файла mosquitto.conf допишите три строки:
Код:

cafile /etc/mosquitto/ca_certificates/ca.crt

certfile 
/etc/mosquitto/certs/ВашХост.crt
keyfile 
/etc/mosquitto/certs/ВашХост.key
Перезагрузит mosquitto^
Код:

sudo service mosquitto restart

Проверьте, что он запустился и есть в процессах:
Код:

sudo ps -A

Теперь в настройках клиента попробуйте вкл/выкл режим TLS/SSL/. Вы увидите, что без шифрования клиент не подключается.
В данном случае аутентификация идёт по паролю и логину(которое мы настроиили ранее), а шифрование с помощью сертификатов.

Ну а теперь настроим mosquitto с обязательным использованием клиентских сертификатов.

Для этого надо создать для каждого клиента свой сертификат.
Название будем использовать по устройству. Например насос - nasos, а телефон- telephone.
запустим скрипт создания сертификатов с ключём client:
Код:

sudo bash ./generate-CA.sh

 client nasos
sudo bash ./generate-CA.sh client telephone
И получим сертификаты для двух клиентов.

png

Скопируем их и вставим в настройках клиентов.
Некоторые программы требуют передачи ключа клиента в зашифрованном контейнере. Берём код и вместо User вставляем название сертификата конкретного клиента:
Код:

sudo openssl pkcs12 \

   -
export \
   -
in User.crt \
   -
inkey User.key \
   -
name "User's certificate/key" \
   -
out User.p12
Здесь надо будет два раза ввести пароль от этого контейнера, не забудьте его.
И будет создан контейнер User.p12

А в файле mosquitto.conf вместо последних строчек, что мы ввели ранее введём следующие строки.
Код:

# Plain MQTT protocol

listener 1883

# End of plain MQTT configuration

# MQTT over TLS/SSL
listener 8883
cafile 
/etc/mosquitto/ca_certificates/ca.crt
certfile 
/etc/mosquitto/certs/raspberrypi.crt
keyfile 
/etc/mosquitto/certs/raspberrypi.key
require_certificate true
#use_identity_as_username true

# End of MQTT over TLS/SLL configuration

# Plain WebSockets configuration
listener 9001
protocol websockets

# End of plain Websockets configuration

# WebSockets over TLS/SSL
listener 9883
protocol websockets
cafile 
/etc/mosquitto/ca_certificates/ca.crt
certfile 
/etc/mosquitto/certs/raspberrypi.crt
keyfile 
/etc/mosquitto/certs/raspberrypi.key
require_certificate true
#use_identity_as_username true
Строки
Код:

require_certificate true

разрешают подключаться только клиентам с личными сертификатами.
Теперь по внутренней сети можно подключаться к порту 1883 и через WebSocket к порту 9001, аутентификация по логину и паролю. А из вне, при условии проброса портов через роутер, к портам 8883 и через WebSocket 9883 только при наличии у клиента серификата и логина с паролем, которые мы установили при первичной настройке брокера.



13.04.2020 16:43 Автор/источник: Николай

Комментировать

Вы не залогинены! Регистрация