Eclipse Mosquitto je open-source MQTT broker s podporou MQTT protokolu 5.0, 3.1.1 a 3.1. Podporuje autentifikáciu, certifikáty a je malý a jednoducho konfigurovateľný. Je použiteľný aj na vytvorenie redundantného riešenia s nasledovnou konfiguráciou:
Tento dokument uvádza príklad základnej konfigurácie MQTT brokera Eclipse Mosquitto.
Príklad ukazuje konfiguráciu na Windows, cesty na OS Linux je nutné upraviť (samotný konfiguračný súbor sa môže nachádzať napr. v /etc/mosquitto/mosquitto.conf).
#MQTTS listener on port 8883 |
Poznámka: Je možné overovať MQTT klientov aj na základe mena a hesla. V tom prípade musí byť vypnuté použitie identity a zadefinovaný súbor s heslami:
use_identity_as_username false
password_file c:\Program Files (x86)\mosquitto\pwfile
V súbore pwfile je nutné zadefinovať mená a heslá užívateľov pomocou utility mosquitto_passwd. Pri prvom použití je nutné použiť prepínač -c na vytvorenie súboru, pri ďalších to už nie je potrebné. Parameter -b aktivuje dávkový režim, ktorý umožňuje zadávanie hesiel z príkazového riadku:
mosquitto_passwd.exe -b -c pwfile myuser1 mypassword1
mosquitto_passwd.exe -b pwfile myuser2 mypassword2
Upozornenie: Ak sa overujú MQTT klienti na základe mena a hesla a zároveň sú vyžadované certifikáty, nikde nie je definovaná väzba medzi užívateľom a certifikátom. Takže ak by niekto získal certifikát (a súkromný kľúč) iného užívateľa, mohol by ho použiť na pripojenie k MQTT brokeru.
Konfiguračný súbor obsahuje pravidlá pre MQTT klientov, ktoré definujú, aké MQTT topicy môžu čítať (subscribe) a zapisovať.
#user without username: anonymous is forbidden, but just to make sure: deny everything |
MQTT Host Application s certifikátom Common Name=myHost, so Sparkplug Host ID=D2000komHA
MQTT Edge Node s certifikátom Common Name=myEdge, s group_id=myGroup, s edge_node_id=myEdgeNode
#user without username: anonymous is forbidden, but just to make sure: deny everything |
Na generovanie kľúčov a TLS certifikátov a ich podpisovanie je nutné mať nainštalovaný OpenSSL balík. Na platforme Windows je možné použiť napr. Win32/Win64 OpenSSL Installation Project (na inštalovaný do c:\Program Files\OpenSSL-Win64\bin).
Nasledovný postup popisuje vytvorenie kľúčov a TLS certifikátov pre MQTT brokera, MQTT klienta myPLC (PLC alebo iné zariadenie) a MQTT klienta myD2000 (D2000 KOM proces).
Tento krok je možné preskočiť, ak už máte existujúcu certifikačnú autoritu, prípadne vaše certifikáty podpisuje niekto iný. Parametrom -days sa určuje doba platnosti certifikátu. Parameter -keyout definuje názov súboru so súkromným kľúčom (ktorý je nutné chrániť pred odcudzením) a parameter -out definuje názov certifikátu (ktorý je potrebné zverejniť).
openssl req -new -x509 -days 1000 -extensions v3_ca -keyout caMQTT.key -out caMQTT.crt
Pri vytváraní kľúča je nutné zadať heslo, ktoré je jeho ochranou.
Tento krok treba zopakovať pre každý z MQTT brokerov.
Vytvorenie kľúča (s veľkosťou 2048 bitov):
openssl genrsa -out broker.key 2048
Vytvorenie požiadavky na podpísanie (csr - certificate signing request). Je nutné zadať viacero parametrov, hodnoty udávané v príklade je nutné upraviť. Odporúčané je, aby CN (Common Name) zodpovedalo názvu počítača s MQTT brokerom.
openssl req -out broker.csr -key broker.key -new
Country Name (2 letter code) [AU]:SK
State or Province Name (full name) [Some-State]:Slovakia
Locality Name (eg, city) []:Žilina
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ipesoft
Organizational Unit Name (eg, section) []:D2000
Common Name (e.g. server FQDN or YOUR name) []:myserver
Email Address []:ipesoft@ipesoft.sk
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Tento krok treba zopakovať pre každý z MQTT brokerov.
Ak ste vyššie vytvorili certifikačnú autoritu, vytvárate certifikát (podpisujete certificate signing request). V opačnom prípade pošlete súbor broker.csr na podpis príslušnej certifikačnej autorita (napr. IT oddelenie firmy).
Parameter -days udáva dobu platnosti certifikátu v dňoch.
openssl x509 -req -in broker.csr -CA caMQTT.crt -CAkey caMQTT.key -CAcreateserial -out broker.crt -days 1000
Súbor broker.crt (certifikát MQTT brokera) je spolu so súborom broker.key (súkromný kľúč MQTT brokera) a s certifikátom certifikačnej autority (caMQTT.crt) potrebné nakopírovať na MQTT server. Súbor broker.key je navyše odporúčané chrániť (prístupovými právami, kryptovaním) tak, aby k nemu mal prístup iba užívateľ, pod ktorým beží MQTT broker.
Certifikát certifikačnej autority (caMQTT.crt) je nutné nakopírovať tak, aby k nemu mal prístup D2000 KOM (najjednoduchšie do aplikačného adresára) a nastaviť cestu k nemu ako parameter "Certifikát partnera" (#APPDIR#\caMQTT.crt) v konfigurácii linky TCP/IP-TCP Redundant.
Podobne ako pre MQTT brokera, aj pre MQTT klienta je nutné vytvoriť kľúč a požiadavku na podpísanie certifikátu. Postup je ten istý, líšia sa iba názvy súborov.
Vytvorenie kľúča (s veľkosťou 2048 bitov):
openssl genrsa -out myPLC.key 2048
Vytvorenie požiadavky na podpísanie (csr - certificate signing request). Je nutné zadať viacero parametrov, hodnoty udávané v príklade je nutné upraviť. Nutné je zadať také CN (Common Name), ktoré zodpovedá názvu MQTT užívateľa:
openssl req -out myPLC.csr -key myPLC.key -new
Country Name (2 letter code) [AU]:SK
State or Province Name (full name) [Some-State]:Slovakia
Locality Name (eg, city) []:Žilina
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ipesoft
Organizational Unit Name (eg, section) []:D2000
Common Name (e.g. server FQDN or YOUR name) []:myPLC
Email Address []:ipesoft@ipesoft.sk
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Ak ste vyššie vytvorili certifikačnú autoritu, vytvárate certifikát (podpisujete certificate signing request). V opačnom prípade pošlete súbor myPLC.csr na podpis príslušnej certifikačnej autorita (napr. IT oddelenie firmy).
Parameter -days udáva dobu platnosti certifikátu v dňoch.
openssl x509 -req -inmyPLC.csr -CA caMQTT.crt -CAkey caMQTT.key -CAcreateserial -out myPLC.crt -days 1000
Súbor myPLC.crt (certifikát MQTT klienta) je spolu so súborom myPLC.key (súkromný kľúč MQTT klienta) a s certifikátom certifikačnej autority (caMQTT.crt) potrebné nakopírovať na MQTT klienta. Súbor myPLC.key je navyše odporúčané chrániť (prístupovými právami, kryptovaním) tak, aby k nemu mal prístup iba užívateľ, pod ktorým beží MQTT klient. Súbor myPLC.crt je nutné nakopírovať aj na MQTT broker; pomocou neho bude overovaná totožnosť MQTT klienta.
Rovnako, ako bol vytvorený a podpísaný kľúč pre MQTT klienta myPLC, je nutné vytvoriť a podpísať kľúč pre MQTT klienta myD2000. Jeho verejný certifikát (myD2000.crt) je opäť nutné nakopírovať do adresára MQTT brokera. Verejný certifikát (myD2000.crt) aj súkromný kľúč (myD2000.key) je nutné nakopírovať tak, aby k ním mal prístup D2000 KOM (najjednoduchšie do aplikačného adresára) a nastaviť cestu k ním ako parametre "Môj certifikát" (#APPDIR#\myD2000.crt) a "Môj kľúč" (#APPDIR#\myD2000.key) v konfigurácii linky TCP/IP-TCP Redundant.