Toto je starší verze dokumentu!
Mosquitto
Jak funguje MQTT
V tutoriálu je srozumitelně popsané, jak MQTT funguje.
Zabezpečení Mosquitto v Dockeru
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
Podrobnější logování v Mosquitto
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