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 | ||
| majordomus:mosquitto [2024/10/20 14:45] – Petr Nosek | majordomus:mosquitto [2024/11/24 09:30] (aktuální) – [Vygenerování self-signed certifikátů] Petr Nosek | ||
|---|---|---|---|
| Řádek 45: | Řádek 45: | ||
| 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í, | 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> | <code bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| - | + | ||
| IP=" | IP=" | ||
| - | SUBJECT_CA="/C=CZ/ST=Brno/L=Brno/O=majordomus/ | + | COUNTRY=" |
| - | SUBJECT_SERVER=" | + | STATE=" |
| - | SUBJECT_CLIENT=" | + | LOCALITY=" |
| - | + | ORG=" | |
| + | |||
| + | SUBJECT_BASE="/C=$COUNTRY/ST=$STATE/L=$LOCALITY/O=$ORG" | ||
| + | SUBJECT_CA=" | ||
| + | SUBJECT_SERVER=" | ||
| + | SUBJECT_CLIENT=" | ||
| + | |||
| + | # Vytvořte konfigurační soubor san.cnf pro zahrnutí SAN | ||
| + | cat > san.cnf << | ||
| + | [ 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 () { | function generate_CA () { | ||
| echo " | echo " | ||
| | | ||
| } | } | ||
| - | + | ||
| function generate_server () { | function generate_server () { | ||
| echo " | echo " | ||
| - | | + | |
| - | | + | |
| } | } | ||
| + | |||
| + | function generate_client () { | ||
| + | echo " | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| generate_CA | generate_CA | ||
| generate_server | generate_server | ||
| - | </ | + | </ |
| Řádek 82: | Řádek 122: | ||
| + | ===== 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 ' | ||
| + | </ | ||