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:51] – 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í. | 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:// | ||
Řádek 92: | Řádek 129: | ||
require_certificate true | require_certificate true | ||
- | use_identity_as_username 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. | + | 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. | ||
< | < | ||
Řádek 102: | Řádek 141: | ||
+ | V dalším kroku jsem ještě editoval **docker-compose.yml** a změnil port pro mosquitto také: | ||
- | https:// | + | < |
+ | ports: | ||
+ | - " | ||
+ | </code> | ||
- | ==== 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]] přidat tyto řádky: | + | docker-compose up -d |
+ | </ | ||
+ | |||
+ | |||
+ | Pro otestování zabezpečeného připojení mi pomohl | ||
<code bash> | <code bash> | ||
- | # Types of messages to log. Use multiple log_type lines for logging | + | mosquitto_sub -h 192.168.1.22 -u ' |
- | # multiple types of messages. | + | Client (null) sending CONNECT |
- | # Possible types are: debug, error, warning, notice, information, | + | Client (null) received CONNACK (0) |
- | # none, subscribe, unsubscribe, | + | Client (null) sending SUBSCRIBE (Mid: 1, Topic: dum/ |
- | # Note that debug type messages are for decoding the incoming/outgoing | + | Client (null) received SUBACK |
- | # network packets. They are not logged in " | + | Subscribed (mid: 1): 0 |
- | log_type error | + | |
- | log_type warning | + | |
- | log_type notice | + | |
- | log_type information | + | |
</ | </ | ||
+ | |||
+ | |||
+ | === 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:// | ||
+ | |||
+ | |||
+ |