it:iot:mosquitto

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:iot:mosquitto [2023/01/04 16:55] Petr Nosekit:iot:mosquitto [2023/02/12 08:49] (aktuální) – [Zapnutí autentizace] Petr Nosek
Řádek 7: Řádek 7:
  
  
-==== Zabezpečení Mosquitto v Dockeru ==== 
  
-=== Zapnutí autentizace ===+===== Podrobnější logování v Mosquitto  ===== 
 +Do konfiguračního souboru lze [[https://iot.stackexchange.com/questions/956/how-to-enable-detailed-logging-of-mosquitto-broker-on-windows-7|dle zdroje]] přidat tyto řádky: 
 + 
 +<code bash> 
 +# 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 
 +</code> 
 + 
 + 
 + 
 +===== Zabezpečení Mosquitto v Dockeru ===== 
 + 
 +==== Zapnutí autentizace ====
  
 Vycházím z návodu [[https://www.homeautomationguy.io/docker-tips/configuring-the-mosquitto-mqtt-docker-container-for-use-with-home-assistant/|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: [[https://techsparx.com/software-development/mqtt/mosquitto-docker.html|Deploying Mosquitto MQTT broker on Linux using Docker ]] Vycházím z návodu [[https://www.homeautomationguy.io/docker-tips/configuring-the-mosquitto-mqtt-docker-container-for-use-with-home-assistant/|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: [[https://techsparx.com/software-development/mqtt/mosquitto-docker.html|Deploying Mosquitto MQTT broker on Linux using Docker ]]
Řádek 23: Řádek 42:
  
 <code bash> <code bash>
-docker exec -it mosqutto sh+docker exec -it mosquitto sh
 mosquitto_passwd -c /mosquitto/pwfile/pwfile majordomus mosquitto_passwd -c /mosquitto/pwfile/pwfile majordomus
 </code> </code>
Řádek 44: Řádek 63:
  
  
-=== Zapnutí komunikace přes SSL ===+==== Zapnutí komunikace přes SSL ====
  
 Nejprve jsem postupoval podle návodu [[https://medium.com/himinds/mqtt-broker-with-secure-tls-and-docker-compose-708a6f483c92 Nejprve jsem postupoval podle návodu [[https://medium.com/himinds/mqtt-broker-with-secure-tls-and-docker-compose-708a6f483c92
Řádek 75: Řádek 94:
    openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365    openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
 } }
 +
 +
 +function generate_der () {
 +   echo "generate DER certificates for ESP8266"
 +   openssl x509 -in client.crt -out cert.der -outform DER
 +   openssl rsa -in client.key -out key.der -outform DER
 +}
 +
 +function generate_server_pem () {
 +   echo "generate PEM certificates for Node RED"
 +   openssl x509 -in server.crt -out server-cert.pem
 +   openssl rsa -in server.key -out server-key.pem
 +}
 +
  
 generate_CA generate_CA
 generate_server generate_server
 generate_client generate_client
 +generate_der
 +generate_server_pem
 </code> </code>
  
 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í.  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í. 
 +
 +**Dále jsem přidal kód pro vygenerování DER certifikátů serveru kvůli ESP8266.** V [[https://serverfault.com/questions/1006639/create-der-certificatekey-from-pem|diskusi]] jsem se dočetl, že DER je binární formát a ten právě potřebuje ESP8266.
  
  
Řádek 92: Řádek 129:
  
 require_certificate true require_certificate true
-use_identity_as_username true+#use_identity_as_username true
 </code> </code>
  
-A jako poslední jsem upravil port, na kterém mosquitto běží, protože zabezpečené připojení se očekává na portu 8883.+Parametr **use_identity_as_username** jsem zakomentoval. Pokud by byl aktivní, tak by nebylo potřeba používat přihlašovací jméno a heslo. Stačil by pouze klientský certifikát. Ale takové použití mi nevyhovuje a nevím, jestli by to nedělalo s ESP8266 problém, když klientský certifikát nevyužívá. 
 + 
 +Jako poslední jsem upravil port, na kterém mosquitto běží, protože zabezpečené připojení se očekává na portu 8883.
  
 <code> <code>
Řádek 109: Řádek 148:
 </code> </code>
  
 +<code bash>
 +docker-compose up -d
 +</code>
  
  
-https://medium.com/himinds/mqtt-broker-with-secure-tls-communication-on-ubuntu-18-04-lts-and-an-esp32-mqtt-client-5c25fd7afe67+Pro otestování zabezpečeného připojení mi pomohl [[https://medium.com/himinds/mqtt-broker-with-secure-tls-communication-on-ubuntu-18-04-lts-and-an-esp32-mqtt-client-5c25fd7afe67|tento návod]].
  
-==== Podrobnější logování v Mosquitto  ==== +<code bash> 
-Do konfiguračního souboru lze [[https://iot.stackexchange.com/questions/956/how-to-enable-detailed-logging-of-mosquitto-broker-on-windows-7|dle zdroje]] idat tyto řádky:+mosquitto_sub -h 192.168.1.22 -u 'majordomus' --pw 'supertajneheslo' -t 'dum/pracovna/vlhkost' -p 8883 ---cafile ca.crt --cert client.crt --key client.key 
 +Client (null) sending CONNECT 
 +Client (null) received CONNACK (0) 
 +Client (null) sending SUBSCRIBE (Mid: 1, Topic: dum/pracovna/vlhkost, QoS: 0, Options: 0x00) 
 +Client (null) received SUBACK 
 +Subscribed (mid: 1): 0 
 + 
 +</code> 
 + 
 + 
 +=== ESP8266, microPython a Mosquito es SSL === 
 + 
 +Po dlouhém bádání jsem se dopracoval k tomu, že je potřeba certifikát v binárním formátu DER. Nainstaloval jsem si mpfshell a nahrál do ESP8266 vygenerované certifikáty **cert.der** a **key.der**. Ještě je dobré si uvědomit, že by nemělo být připojeno nic jiného k portu s ESP8266, jinak to nebude fungovat.
  
 <code bash> <code bash>
-# Types of messages to log. Use multiple log_type lines for logging +sudo pip3 install mpfshell 
-# multiple types of messages. +mpfshell -c "open ttyUSB0" 
-# Possible types are: debug, error, warning, notice, information,  +ls 
-# none, subscribe, unsubscribe, websockets, all+put cert.der 
-# Note that debug type messages are for decoding the incoming/outgoing +put key.der 
-# network packetsThey are not logged in "topics"+ls
-log_type error +
-log_type warning +
-log_type notice +
-log_type information+
 </code> </code>
 +
 +
 +Pak jsem musel upravid kód v microPythonu, aby načetl certifikáty a použil je při autentizaci.
 +
 +<code python>
 +with open("key.der", 'rb') as f:
 +            key = f.read()
 +            
 +with open("cert.der", 'rb') as f:
 +            cert = f.read()
 +
 +
 +ssl_params = dict()
 +ssl_params["cert"] = cert
 +ssl_params["key"] = key
 +
 +
 +mqttc = MQTTClient(CLIENT_NAME, BROKER_ADDR, 8883, USER, PASSWORD, ssl=True, ssl_params=ssl_params, keepalive=60)
 +    
 +</code>
 +
 +zdroje, ze kterých jsem čerpal:
 +
 +  * https://github.com/peterhinch/micropython-mqtt/issues/10
 +  * https://dev.to/bassparanoya/esp32-micropython-mqtt-tls-28fd
 +  * https://forum.micropython.org/viewtopic.php?f=18&t=11906#p65746
 +  * [[https://forum.pycom.io/topic/4775/solved-mqtt-and-tls|Solved mqtt and tls - ESP32]]
 +  * [[https://microcontrollerslab.com/esp32-esp8266-micropython-mqtt-publish-subscribe-ds18b20-readings/|ESP32 ESP8266 MicroPython MQTT Publish Subscribe DS18B20 Readings]]
 +  * [[https://randomnerdtutorials.com/micropython-mqtt-publish-ds18b10-esp32-esp8266/|MicroPython: MQTT – Publish DS18B20 Temperature Readings (ESP32/ESP8266)]]
 +
 +
 +
  • it/iot/mosquitto.1672851343.txt.gz
  • Poslední úprava: 2023/01/04 16:55
  • autor: Petr Nosek