Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Následující verze | Předchozí verze | ||
| majordomus:mosquitto [2024/10/20 14:36] – vytvořeno Petr Nosek | majordomus:mosquitto [2024/11/24 09:30] (aktuální) – [Vygenerování self-signed certifikátů] Petr Nosek | ||
|---|---|---|---|
| Řádek 36: | Řádek 36: | ||
| </ | </ | ||
| - | <adm warning> | + | <adm warning> |
| + | ===== Vygenerování self-signed certifikátů ===== | ||
| + | |||
| + | Protože budu Mosquitto provozovat pouze v domácí síti, budu potřebovat self signed certifikát. Podrobnosti [[https:// | ||
| + | |||
| + | |||
| + | K vytvoření nezbytných certifikátů pomůže tento skript, ve kterém je potřeba **změnit IP adresu** na IP adresu zařízení, | ||
| + | |||
| + | |||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | |||
| + | IP=" | ||
| + | COUNTRY=" | ||
| + | STATE=" | ||
| + | LOCALITY=" | ||
| + | ORG=" | ||
| + | |||
| + | SUBJECT_BASE="/ | ||
| + | SUBJECT_CA=" | ||
| + | SUBJECT_SERVER=" | ||
| + | SUBJECT_CLIENT=" | ||
| + | |||
| + | # Vytvořte konfigurační soubor san.cnf pro zahrnutí SAN | ||
| + | cat > san.cnf <<EOF | ||
| + | [ req ] | ||
| + | default_bits | ||
| + | distinguished_name = req_distinguished_name | ||
| + | req_extensions | ||
| + | |||
| + | [ req_distinguished_name ] | ||
| + | countryName | ||
| + | countryName_default | ||
| + | stateOrProvinceName | ||
| + | stateOrProvinceName_default = $STATE | ||
| + | localityName | ||
| + | localityName_default | ||
| + | organizationName | ||
| + | organizationName_default | ||
| + | commonName | ||
| + | commonName_default | ||
| + | |||
| + | [ req_ext ] | ||
| + | subjectAltName = @alt_names | ||
| + | |||
| + | [ alt_names ] | ||
| + | IP.1 = $IP | ||
| + | EOF | ||
| + | |||
| + | function generate_CA () { | ||
| + | echo " | ||
| + | | ||
| + | } | ||
| + | |||
| + | function generate_server () { | ||
| + | echo " | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | function generate_client () { | ||
| + | echo " | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | |||
| + | generate_CA | ||
| + | generate_server | ||
| + | </ | ||
| + | |||
| + | |||
| + | Platnost certifikátu jsem raději nastavil na 10 let. Po spuštění kódu budu mít ve více souborů. Nicméně pro MQTT server Mosquitto budu potřebovat: | ||
| + | |||
| + | * ca.crt | ||
| + | * server.crt | ||
| + | * server.key | ||
| + | |||
| + | Pro klienta (aby se připojil k MQTT serveru) mi bude stačit soubor: | ||
| + | |||
| + | * ca.crt | ||
| + | |||
| + | |||
| + | |||
| + | ===== Nastavení konfiguračního souboru Mosquitto ===== | ||
| + | |||
| + | Podle docker file je konfigurační soubor umístěn v cestě // | ||
| + | |||
| + | Do této složky nahrajeme tedy vygenerované certifikáty: | ||
| + | |||
| + | * ca.crt | ||
| + | * server.crt | ||
| + | * server.key | ||
| + | |||
| + | Dbejme zejména práva k těmto souborům. Nastavit stejně, jako má soubor // | ||
| + | |||
| + | Ve složce je také umístěný konfigurační soubor // | ||
| + | |||
| + | < | ||
| + | listener 8883 | ||
| + | |||
| + | # persistence enabled for remembering retain flag across restarts | ||
| + | # | ||
| + | persistence true | ||
| + | persistence_location / | ||
| + | |||
| + | # logging options: | ||
| + | # | ||
| + | # logs do not persist across restarts) | ||
| + | #log_dest file / | ||
| + | log_dest stdout | ||
| + | log_timestamp_format %Y-%m-%dT%H: | ||
| + | #log_type all | ||
| + | |||
| + | # password handling: | ||
| + | # | ||
| + | # open access | ||
| + | # | ||
| + | # no access | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # no access without passwords | ||
| + | # | ||
| + | # | ||
| + | password_file / | ||
| + | allow_anonymous false | ||
| + | |||
| + | # certificates | ||
| + | cafile / | ||
| + | certfile / | ||
| + | keyfile / | ||
| + | |||
| + | # | ||
| + | |||
| + | # Uncomment to enable filters | ||
| + | #acl_file / | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Komentář ke konfiguračnímu souboru ==== | ||
| + | |||
| + | Změna portu, na kterém Mosquitto běží: | ||
| + | |||
| + | < | ||
| + | listener 8883 | ||
| + | </ | ||
| + | |||
| + | Zapnutí souboru, ve kterém budou přihlašovací jména a hesla (vygenerujeme později) a zakázání anonymního připojení. | ||
| + | |||
| + | < | ||
| + | password_file / | ||
| + | allow_anonymous false | ||
| + | </ | ||
| + | |||
| + | Nastavení cest k certifikátům (cesta reflektuje, že Mosquitto poběží v Dockeru): | ||
| + | |||
| + | < | ||
| + | cafile / | ||
| + | certfile / | ||
| + | keyfile / | ||
| + | </ | ||
| + | |||
| + | Nebudeme vyžadovat, aby se klient přihlašoval svým certifikátem - museli bychom totiž vygenerovat ještě certifikáty pro klienty a zároveň bychom mohli vypnout přihlašování jménem a heslem. Takže tuto položku mějme zakomentovanou nebo nastavenou na false. | ||
| + | |||
| + | < | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Vygenerování uživatele a hesla do pwfile ===== | ||
| + | |||
| + | Připojíme do kontejneru s Mosquitto a vytvořím uživatele s heslem: | ||
| + | |||
| + | <code bash> | ||
| + | docker exec -it mosquitto sh | ||
| + | mosquitto_passwd -c / | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Ověření funkčnosti ===== | ||
| + | |||
| + | Pokud vše proběhlo správně, tak takto se připojíme na nějaký topic: | ||
| + | |||
| + | <code bash> | ||
| + | mosquitto_sub -u majordomus --pw ' | ||
| + | </ | ||
| + | |||
| + | pro zapisování: | ||
| + | |||
| + | <code bash> | ||
| + | mosquitto_pub -u majordomus --pw ' | ||
| + | </ | ||