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
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: