it:iot:mosquitto

Toto je starší verze dokumentu!


Mosquitto

V tutoriálu je srozumitelně popsané, jak MQTT funguje.

Zapnutí autentizace

Vycházím z návodu Configuring the Mosquitto MQTT Docker container for use with Home Assistant, který popisuje zapnutí autentizace pro Mosquitto. Další informace jsem pak čerpal z tohoto článku: Deploying Mosquitto MQTT broker on Linux using Docker

V konfiguračním souboru mosquitto.conf nastavím/změním toto:

password_file /mosquitto/pwfile/pwfile
allow_anonymous false

Pak se připojím do kontejneru s mosquitto a vytvořím uživatele s heslem:

docker exec -it mosqutto sh
mosquitto_passwd -c /mosquitto/pwfile/pwfile majordomus

Nakonec retartovat kontejner s Mosquitto.

Příkaz pro čtení s autentizací:

$ mosquitto_sub -u henry --pw 'passw0rd' -h localhost -p 1883 -v -t test/message

Příkaz pro publikaci s autentizací:

$ mosquitto_pub -u henry -P 'passw0rd' -h localhost -p 1883 -t test/message -m 'Hello World!'

Zapnutí komunikace přes SSL

Nejprve jsem postupoval podle návodu Secure MQTT broker (TLS) and Docker Compose.

Jako první jsem použil tento skript pro vygenerování certifikátů:

#!/bin/bash
 
IP="192.168.1.22"
SUBJECT_CA="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=CA/CN=$IP"
SUBJECT_SERVER="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=Server/CN=$IP"
SUBJECT_CLIENT="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=Client/CN=$IP"
 
function generate_CA () {
   echo "$SUBJECT_CA"
   openssl req -x509 -nodes -sha256 -newkey rsa:2048 -subj "$SUBJECT_CA"  -days 365 -keyout ca.key -out ca.crt
}
 
function generate_server () {
   echo "$SUBJECT_SERVER"
   openssl req -nodes -sha256 -new -subj "$SUBJECT_SERVER" -keyout server.key -out server.csr
   openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
}
 
function generate_client () {
   echo "$SUBJECT_CLIENT"
   openssl req -new -nodes -sha256 -subj "$SUBJECT_CLIENT" -out client.csr -keyout client.key 
   openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
}
 
generate_CA
generate_server
generate_client

Kód jsem si trochu upravil. Určitě je potřeba tam dát IP adresu zařízení serveru a dále jsem změnil to, že certifikáty se vygenerují s platností na delší dobu než 365 dní.

V dalším kroku jsem nahrál soubory ca.crt, server.crt a server.key do konfigurační složky mosquitto a nastavil konfigurační soubor:

cafile /mosquitto/config/ca.crt
certfile /mosquitto/config/server.crt
keyfile /mosquitto/config/server.key

require_certificate true
use_identity_as_username true

A jako poslední jsem upravil port, na kterém mosquitto běží, protože zabezpečené připojení se očekává na portu 8883.

listener 8883

V dalším kroku jsem ještě editoval docker-compose.yml a změnil port pro mosquitto také:

   ports:
   - "8883:8883"

https://medium.com/himinds/mqtt-broker-with-secure-tls-communication-on-ubuntu-18-04-lts-and-an-esp32-mqtt-client-5c25fd7afe67

Do konfiguračního souboru lze dle zdroje přidat tyto řádky:

# Types of messages to log. Use multiple log_type lines for logging
# multiple types of messages.
# Possible types are: debug, error, warning, notice, information, 
# none, subscribe, unsubscribe, websockets, all.
# Note that debug type messages are for decoding the incoming/outgoing
# network packets. They are not logged in "topics".
log_type error
log_type warning
log_type notice
log_type information
  • it/iot/mosquitto.1672851343.txt.gz
  • Poslední úprava: 2023/01/04 16:55
  • autor: Petr Nosek