majordomus: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
majordomus:mosquitto [2024/10/20 14:55] Petr Nosekmajordomus: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í, na kterém MQTT server Mosquitto poběží. 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í, na kterém MQTT server Mosquitto poběží.
 +
  
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
- +
 IP="192.168.1.22" IP="192.168.1.22"
-SUBJECT_CA="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=CA/CN=$IP" +COUNTRY="CZ" 
-SUBJECT_SERVER="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=Server/CN=$IP" +STATE="Brno" 
-SUBJECT_CLIENT="/C=CZ/ST=Brno/L=Brno/O=majordomus/OU=Client/CN=$IP" +LOCALITY="Brno" 
- +ORG="majordomus" 
 + 
 +SUBJECT_BASE="/C=$COUNTRY/ST=$STATE/L=$LOCALITY/O=$ORG" 
 +SUBJECT_CA="$SUBJECT_BASE/OU=CA/CN=$IP" 
 +SUBJECT_SERVER="$SUBJECT_BASE/OU=Server/CN=$IP" 
 +SUBJECT_CLIENT="$SUBJECT_BASE/OU=Client/CN=$IP" 
 + 
 +# Vytvořte konfigurační soubor san.cnf pro zahrnutí SAN 
 +cat > san.cnf <<EOF 
 +[ req ] 
 +default_bits       = 2048 
 +distinguished_name = req_distinguished_name 
 +req_extensions     = req_ext 
 + 
 +[ req_distinguished_name ] 
 +countryName                = Country Name (2 letter code) 
 +countryName_default        = $COUNTRY 
 +stateOrProvinceName        = State or Province Name (full name) 
 +stateOrProvinceName_default = $STATE 
 +localityName               = Locality Name (eg, city) 
 +localityName_default       = $LOCALITY 
 +organizationName           = Organization Name (eg, company) 
 +organizationName_default   = $ORG 
 +commonName                 = Common Name (e.g. server FQDN or YOUR name) 
 +commonName_default         = $IP 
 + 
 +[ req_ext ] 
 +subjectAltName = @alt_names 
 + 
 +[ alt_names ] 
 +IP.1 = $IP 
 +EOF 
 function generate_CA () { function generate_CA () {
    echo "$SUBJECT_CA"    echo "$SUBJECT_CA"
    openssl req -x509 -nodes -sha256 -newkey rsa:2048 -subj "$SUBJECT_CA"  -days 3650 -keyout ca.key -out ca.crt    openssl req -x509 -nodes -sha256 -newkey rsa:2048 -subj "$SUBJECT_CA"  -days 3650 -keyout ca.key -out ca.crt
 } }
- +
 function generate_server () { function generate_server () {
    echo "$SUBJECT_SERVER"    echo "$SUBJECT_SERVER"
-   openssl req -nodes -sha256 -new -subj "$SUBJECT_SERVER" -keyout server.key -out server.csr +   openssl req -nodes -sha256 -new -subj "$SUBJECT_SERVER" -keyout server.key -out server.csr -config san.cnf 
-   openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650+   openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -extensions req_ext -extfile san.cnf
 } }
 +
 +function generate_client () {
 +   echo "$SUBJECT_CLIENT"
 +   openssl req -new -nodes -sha256 -subj "$SUBJECT_CLIENT" -out client.csr -keyout client.key 
 +   openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
 +}
 +
  
 generate_CA generate_CA
 generate_server generate_server
-</code> +</code>
  
  
Řádek 91: Řádek 131:
   * server.crt   * server.crt
   * server.key   * server.key
 +
 +Dbejme zejména práva k těmto souborům. Nastavit stejně, jako má soubor //mosquitto.conf//. Mosquitto v Dockeru musí mít možnost certifikáty číst.
  
 Ve složce je také umístěný konfigurační soubor //mosquitto.conf//. Ten upravíme, aby povolil SSL a bude vypadat takto: Ve složce je také umístěný konfigurační soubor //mosquitto.conf//. Ten upravíme, aby povolil SSL a bude vypadat takto:
Řádek 138: Řádek 180:
  
  
-==== Komentář ke konfiguračnímu souburu ====+==== Komentář ke konfiguračnímu souboru ====
  
 Změna portu, na kterém Mosquitto běží: Změna portu, na kterém Mosquitto běží:
Řádek 168: Řádek 210:
  
  
 +===== 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 /mosquitto/pwfile/pwfile majordomus
 +</code> 
 +
 +
 +
 +===== 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 'passw0rd' -h 192.168.1.22 -p 8883 -v -t majordomus/detskypokojRS/ --cafile ca.crt
 +</code>
 +
 +pro zapisování:
 +
 +<code bash>
 +mosquitto_pub -u majordomus --pw 'passw0rd' -h 192.168.1.22 -p 8883 -v -t majordomus/detskypokojRS/ --cafile ca.crt
 +</code>
  • majordomus/mosquitto.1729436154.txt.gz
  • Poslední úprava: 2024/10/20 14:55
  • autor: Petr Nosek