Найти тему
lab240

Как сделать tls-бридж mosquitto

Оглавление

По мротивам https://www.onetransistor.eu/2019/05/mosquitto-mqtt-tls-certificate.html + доку на бридж mosquitto

Введение

Авторизация по логину паролю интернет устройств не очень безопасна, но очень просто программируется в них. Ососбенно в интернет розетках. Поэтому идея такая. На рапспберри пи (или любом мелком компе) поднимаем mosquitto с авторизацией по логину\парлю, а дальше делаем бридж в натсоящий mosquitto по tls (авторизация на основе сертификатов). Внутренний mosquitto недоступен извне, логины летают только внутри локальной сети, а внешний коннект в центральный mosquitto защищен.

Делаем ca.crt

openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt -subj "/C=RO/ST=Home/L=Home/O=OneTransistor/OU=OneTransistor/CN=onetransistor.eu"

На сервере

openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key -subj "/C=RO/ST=H/L=Home/O=MQTT Broker/OU=MQTT Broker/CN=mqtt-broker.lan"

Нам понадобиться ca.crt ca.key с сервер, я их забираю командой scp

scp -P port user@host:/home/pi/ca/ca.crt ./
scp -P port user@host:/home/pi/ca/ca.key ./

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
openssl rsa -in server.key -out server.key

На каждом клиенте

openssl genrsa -out client.key 2048
openssl req -new -out client.csr -key client.key -subj "/C=RO/ST=H/L=Home/O=MQTT Client/OU=MQTT Client/CN=Thing01"
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
openssl rsa -in client.key -out client.key

Mosquitto на сервере

Делаем /etc/mosquitto/conf.d/mosquitto.conf

# Certificate listener
listener 8883
cafile /etc/mosquitto/ca.crt
certfile /etc/mosquitto/server.crt
keyfile /etc/mosquitto/server.key
require_certificate true
use_identity_as_username true

Mosquitto на клиенте

Копируем в /etc/mosquitto/ca_certificates сделанные файлы

ca.crt client.crt client.key

присваеваем владельца mosquitto

sudo chown mosquitto /etc/mosquitto/ca_certificates/*

Делаем файл

/etc/mosquitto/conf.d/bridge.conf

allow_anonymous false
password_file /etc/mosquitto/passwd
connection local_remote
address ns.lab240.ru:8883
topic /donoff/# both
bridge_cafile /etc/mosquitto/ca_certificates/ca.crt
bridge_insecure true
bridge_certfile /etc/mosquitto/ca_certificates/client.crt
bridge_keyfile /etc/mosquitto/ca_certificates/client.key

Добавляем юзеров которые будут ходить на локальный mqtt по логину\паролю

mosquitto_passwd /etc/mosquitto/passwd <user>