Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| it:iot:mosquitto [2023/01/04 16:21] – Petr Nosek | it: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:// | ||
| + | |||
| + | <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, | ||
| + | # Note that debug type messages are for decoding the incoming/ | ||
| + | # network packets. They are not logged in " | ||
| + | log_type error | ||
| + | log_type warning | ||
| + | log_type notice | ||
| + | log_type information | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Zabezpečení Mosquitto v Dockeru ===== | ||
| + | |||
| + | ==== Zapnutí autentizace | ||
| Vycházím z návodu [[https:// | Vycházím z návodu [[https:// | ||
| Řádek 23: | Řádek 42: | ||
| <code bash> | <code bash> | ||
| - | docker exec -it mosqutto | + | docker exec -it mosquitto |
| mosquitto_passwd -c / | mosquitto_passwd -c / | ||
| </ | </ | ||
| Řádek 44: | Řádek 63: | ||
| - | === Zapnutí komunikace přes SSL === | + | ==== Zapnutí komunikace přes SSL ==== |
| Nejprve jsem postupoval podle návodu [[https:// | Nejprve jsem postupoval podle návodu [[https:// | ||
| Řádek 75: | Řádek 94: | ||
| | | ||
| } | } | ||
| + | |||
| + | |||
| + | function generate_der () { | ||
| + | echo " | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | function generate_server_pem () { | ||
| + | echo " | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| generate_CA | generate_CA | ||
| generate_server | generate_server | ||
| generate_client | generate_client | ||
| + | generate_der | ||
| + | generate_server_pem | ||
| </ | </ | ||
| + | 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:// | ||
| - | https:// | ||
| - | ==== Podrobnější logování v Mosquitto | + | V dalším kroku jsem nahrál soubory ca.crt, server.crt a server.key do |
| - | 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]] | + | |
| + | < | ||
| + | cafile | ||
| + | certfile / | ||
| + | keyfile | ||
| + | |||
| + | require_certificate true | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | 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 | ||
| + | |||
| + | < | ||
| + | listener 8883 | ||
| + | </ | ||
| + | |||
| + | |||
| + | V dalším kroku jsem ještě editoval **docker-compose.yml** a změnil port pro mosquitto také: | ||
| + | |||
| + | < | ||
| + | | ||
| + | - " | ||
| + | </ | ||
| <code bash> | <code bash> | ||
| - | # Types of messages to log. Use multiple log_type lines for logging | + | docker-compose up -d |
| - | # multiple types of messages. | + | |
| - | # Possible types are: debug, error, warning, notice, information, | + | |
| - | # none, subscribe, unsubscribe, | + | |
| - | # Note that debug type messages are for decoding the incoming/ | + | |
| - | # network packets. They are not logged in " | + | |
| - | log_type error | + | |
| - | log_type warning | + | |
| - | log_type notice | + | |
| - | log_type information | + | |
| </ | </ | ||
| + | |||
| + | |||
| + | Pro otestování zabezpečeného připojení mi pomohl [[https:// | ||
| + | |||
| + | <code bash> | ||
| + | mosquitto_sub -h 192.168.1.22 -u ' | ||
| + | Client (null) sending CONNECT | ||
| + | Client (null) received CONNACK (0) | ||
| + | Client (null) sending SUBSCRIBE (Mid: 1, Topic: dum/ | ||
| + | Client (null) received SUBACK | ||
| + | Subscribed (mid: 1): 0 | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | === ESP8266, microPython a Mosquito př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> | ||
| + | sudo pip3 install mpfshell | ||
| + | mpfshell -c "open ttyUSB0" | ||
| + | ls | ||
| + | put cert.der | ||
| + | put key.der | ||
| + | ls | ||
| + | </ | ||
| + | |||
| + | |||
| + | Pak jsem musel upravid kód v microPythonu, | ||
| + | |||
| + | <code python> | ||
| + | with open(" | ||
| + | key = f.read() | ||
| + | | ||
| + | with open(" | ||
| + | cert = f.read() | ||
| + | |||
| + | |||
| + | ssl_params = dict() | ||
| + | ssl_params[" | ||
| + | ssl_params[" | ||
| + | |||
| + | |||
| + | mqttc = MQTTClient(CLIENT_NAME, | ||
| + | | ||
| + | </ | ||
| + | |||
| + | zdroje, ze kterých jsem čerpal: | ||
| + | |||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | |||