Promotic
Přihlášení logon

Komunikace komunikační protokolem MQTT

MQTT (Message Queuing Telemetry Transport) je jednoduchý "Internet of Things" komunikační protokol, který je založen na modelu publikování a odběru zpráv. Centrální prvek Broker spravuje příjem, uchování a zasílání zpráv mezi klienty.
Klient může být typu Publisher (vydavatel), typu Subscriber (odběratel) nebo dokonce Publisher a Subscriber současně.
Klient typu Publisher zasíla zpráv na určité téma (topic) Broker serveru, který plní roli prostředníka mezi vydavateli a odběrateli.
Téma je něco jako adresa doručení nebo ještě přesněji složka v počítači. Ty jsou hierarchicky uspořádána a tvoří flexibilní datovou strukturu oddělenou lomítky (např. zarizeni/senzor1/stav).
Umožňují dynamicky odebírat jak jednotlivé témata, tak celé skupiny najednou. Toho lze dosáhnout pomoci tzv. wildcard(*) (např. zarizeni/*/stav). Publisher může být například čidlo nebo měřič.
Opakem je Subscriber, který se příhlásí k odběru daného tématu. Když Publisher zašle pro stéjné téma nová data, Broker je obratem přepošle všem Subscriberum přihlášeným k odběru. Subscriber se může přihlásit k odběru libovolného počtu témat, nebo se z odběru odhlásit.
Díky tomu, že klienti komunikují pouze se zprostředkovatelem (Broker serveru), nemusí znát topologii sítě, ani nepotřebují vědět navzájem o svojí existenci. Vystačí si pouze s informací, jak se spojit s Broker serverem.

Klient se přihlašuje pomocí unikátního "ClientID" a nepovinného uživatelského jména "Username" a hesla "Password".

Protokol MQTT definuje tři úrovně potvrzení zpráv QoS (Quality of Service)
QoS 0 - zpráva je odeslána bez potvrzení a není zaručeno její doručení (at most once).
QoS 1 - zpráva je doručena alespoň jednou (at least once).
QoS 2 - zpráva je doručena pouze jednou (exactly once).


Klient typu Publisher může zasílat zprávy s příznaky Retain a DUP.
Retain - Tento příznak říká Broker serveru, aby si zprávu uložil jako poslední známý stav pro dané téma. Tato zpráva je odeslána každému novému Subscriberovi v době, kdy Publisher nezveřejníl nic nového. Pro každé téma může být nastavena jedna Retain (Uchovaná) zpráva.
(0/1 - Neuchovávat/Uchovat zprávu na Broker serveru).
DUP - Tento příznak indikuje, že zpráva je opakovaným odesláním (přeposláním) dříve odeslané zprávy
(0/1 - Odeslání nové/opakované zprávy na Broker server).


Podpora TLS v 1.3 je implementována od verze Pm9.0.35.
Zabezpečenou komunikaci zapíná konfigurátor "Zabezpečené připojení (TLS)". Dále je třeba změnit hodnotu v konfigurátoru "Číslo vzdáleného TCP/UDP portu" na 8883 pro TLS nebo 8884 pro mTLS (mutual TLS).

Podle požadované úrovně šifrování komunikace, protokol MQTT předepisuje následující 3 síťové porty:
1883 - nešifrovaný přenos (unencrypted)
8883 - šifrovaný přenos (encrypted) přes TLS/SSL je třeba mít platný certifikát Broker serveru nebo jeho certifikační autoritu nainstalovanou v Uložišti certifikátů Windows
8884 - šifrovaný přenos (encrypted) přes TLS/SSL je třeba mít platný certifikát Broker serveru nebo jeho certifikační autoritu nainstalovanou v Uložišti certifikátů Windows a Broker server musí mít nainstalovaný certifikát klienta.
 
Viz: Wikipedia: Seznam čísel portů TCP a UDP používaných protokoly pro provoz síťových aplikací.

Pokud je povolené zabezpečené připojení, pak je třeba importovat certifikáty do Uložiště certifikátů Windows. Ověřit přítomnost certifíkátu lze spuštěním certmgr.msc, který otevře Windows certificate manager. Klient musí mít ve složce Důvěryhodné kořenové certifikační autority certifikát Broker serveru případně všech článků řetezce důvěry. Na server nejsou kladeny žádné dálší nároky pro komunikaci přes TLS.
Je-li však vyžadováno mTLS, klient musí dále mít ve složce Osobní importován svůj vlastní certifikát a svou certifikační autoritu včetně klíčů. Na druhé straně server musí mít ve složce Důvěryhodné osoby importovan certifikát klienta a ve složce Důvěryhodné kořenové certifikační autority kořenový CA certifikát klienta (certifikát, který sloužil k podpisu certifikátu klienta).
Důležité: Privátní klíče nesmí nikdy opustit zařízení, ke kterému patří. Certifikáty uložene ve složce Osobní jsou opatřeny privátním klíčem (malá ikonka klíče u certifikátu). V ostatních adresářích jsou importovány bez privátního klíče.

Omezení: Pokud jsou certifikáty obou stran zastřešeny veřejně důvěryhodnou certifikační autoritou (např. Let's Encrypt, GlobalSign, PostSignum), pak není vůbec nutné importovat certifikáty opačné strany. Tyto certifikáty jsou obvykle přednastaveny. V případě potřeby je třeba provést aktualizaci Uložiště certifikátů Windows, aby obsahoval poslední verze.
V případě, že tomu tak není a vše spoléhá na tzv. self-signed certifikáty, klient musí mít nainstalovaný certifikát Broker serveru. Pro mTLS je vyžadováno oboustranné ověření identit, proto i Broker server musí mít nainstalovaný certifikát klienta.

Odkazy a návody
- Mosquitto MQTT Broker server ke stažení: https://mosquitto.org/download
- Veřejný MQTT Broker server určený k testování (online, bez stažení): https://test.mosquitto.org/; Certifikát Mosquitto Broker serveru: https://test.mosquitto.org/ssl/mosquitto.org.crt; Návod k vytvoření klientského certifikátu: https://test.mosquitto.org/ssl/


Komunikace aplikace PROMOTIC s MQTT broker serverem


V následujících předkonfiguracích je použit klient typu Publisher a Subscriber, který se připojí k Broker serveru. Následně Subscriber část se přihlásí k odběru definovaného tématu a čeká na zprávy. Naproti tomu Publisher část odesílá na Broker server data daných témat, které obratem Subscriber obdrží.
MQTT předkonfigurace:

Historie:
Pm9.00.35: Přidána podpora zabezpečeného připojení pomocí TLS v 1.3.
Pm9.00.15: Opravená chyba: Aktualizace a oprava ovladače v souladu s normou MQTT5.
Pm9.00.03: Vytvořeno
© MICROSYS, spol. s r.o.Update cookies preferences