blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
PHP, Arduino programátor
deadawp



Slovenský MQTT Broker - IoT Industries Slovakia II.
pridal deadawp 23.4. 2020 o 23:36



V minulom článku sme si rozobrali základné pojmy využívané v MQTT, rozobrali sme si metódy Publish / Subscribe. Dnes si ukážeme možnosti šifrovaného spojenia s MQTT Brokerom, ukážeme si pokročilé možnosti metódy Publish.

Predchádzajúca implementácia pre MQTT (nešifrovaný) protokol bola uspôsobená pre platformy Arduino + Ethernet Wiznet W5100 / W5500, ESP32, ESP8266. Nakoľko Arduino nepodporuje šifrované spojenia z hľadiska výkonu a chýbajúcich implementácii, nie je tento mikrokontróler obsiahnutý pre šifrované spojenie s MQTT Brokerom.

MQTTS (Secured MQTT) je port 8883. Tento port sa používa na šifrované spojenie s webserverom. Implementácie pre ESP8266 a ESP32 vyžadujú rozšírenie hlavičkových súborov o WiFiClientSecure.h. Tieto hlavičkové súbory umožňujú vytvoriť spojenie zabezpečeným socketom. ESP32 využíva Root CA certifikát pre šifrované spojenie, ESP8266 vyžaduje SHA1 fingerprint (odtlačok) certifikátu pre spojenie. Štandardne sa používajú pre HTTPS spojenie s webserverom, avšak je ich možné využiť i pre MQTTS. 

Root CA certifikát je možné zo vzdialeného MQTT Brokera získať napríklad nástrojom OpenSSL. OpenSSL je kryptografický nástroj (knižnica), ktorý umožňuje široké spektrum operácii. Používa sa predovšetkým pre generovanie certifikátov, ale jeho využitie je možné aj v rôznych programovacích jazykoch. 

Prostedníctvom nástroja OpenSSL je možné vypísať si certifikáty, respektíve reťaz dôvernosti - Chain of Trust v súvislosti s danou doménou. MQTT broker beží na doméne mqtt.iotindustries.sk, využijeme port 8883 pre šifrovaný MQTT protokol.
Príkazom: openssl s_client -showcerts -verify 5 -connect mqtt.iotindustries.sk:8883 < /dev/null získame Chain of Trust a môžeme skopírovať a implementovať Root CA (Koreňový certifikát certifikačnej autority) certifikát do programu pre ESP32. Root CA certifikát sa nachádza vo výpise na konci (vypíšu sa 3 certifikáty v .pem resp. .crt formáte).
 
Platforma ESP8266 vyžaduje implementáciu šifrovaného spojenia prostredníctvom odtlačku certifikátu v SHA1 formáte (hash). Pre získanie odtlačku certifikátu môžeme opäť využiť nástroj OpenSSL a príkazom: openssl s_client -connect mqtt.iotindustries.sk:8883 -showcerts < /dev/null 2>/dev/null | openssl x509 -in /dev/stdin -sha1 -noout -fingerprint získame odtlačok certifikátu v SHA1 formáte. Tento odtlačok je použitý v zdrojovom kóde pre platformu ESP8266.

Testovaný fingerprint bol pod verziou Arduino Core 2.5.0, 2.5.2. Verzie 2.6.X nemusia validne fungovať z dôvodu, že využívajú iný systém pre HTTPS spojenie (nie fingerprint), vyžaduje sa taktiež Root CA certifikát ako u ESP32.

Prostredníctvom direktív som zostavil jednoduchý program pre MQTTs spojenie pre obe platformy obsiahnuté do jedného zdrojového kódu. Na základe zvolenej platformy sa vykoná kompilácia iba pre tú danú platformu. 

Tak ako v predchadzajúcom príklade pre MQTT sa v tomto prípade Publishuje topic esp32/pocitadlo a zároveň sa odoberá - Subscribe pre overenie funkčnosti a zápisu hodnôt. Odosielanie prebieha každých 10 sekúnd. Publish prebieha bez príkazaku retain. V prípade, že mikrokontróler prestane odosielať dáta do topicu po určitej dobe tento topic (ak nebude odoberaný Subscriberom) zahodí. 

Knižnica PubSubClient, ktorá sa využíva umožňuje modifikovať pravidlá či už globálne alebo pre jednotlivé topicy. Vo funkcii client.publish(), ktorá využíva dva parametre - topic, obsah správy je možné použiť ďalšie parametre, ktoré umožňujú pridať dĺžku - lenght správy, prípadne je možné nastaviť prostredníctvom boolean parametra 0/1 retain príznak pre MQTT Broker.

V prípade viacerých topicov do ktorých mikrokontróler zapisuje je možné jednotlivo nastavovať retain príznak. Globálnejším riešením s pravidlami pre všetky odosielané topicy je možné implementovať retain príznak priamo do client.connect() funkcie. Je možné využiť údaje pre autentizáciu, nastaviť globálne pravidlá pre topicy a pod.

Dokumentáciu ku knižnici PubSubClient, ktorá sa v príkladoch využíva môžete nájsť na adrese: https://pubsubclient.knolleary.net/api.html

K programu pre MQTT a MQTTs spojenie bol vytvorený aj špeciálny zdrojový kód pre pripojenie platformy ESP32 k podnikovým WiFi sieťam pod WPA/WPA2 Enterprise - Ziggo, eduroam a ďalšie WiFi siete s prihlásením cez meno a heslo.

Všetky programové implementácie môžete nájsť na adrese: https://github.com/martinius96/MQTT-Broker-IoTIndustries 

Mnou realizované projekty je možné nájsť na: https://arduino.php5.sk



Prístupov 2068
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDOVAŤ
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Ovládanie Arduina cez UART z počítača
[ 19.11.2020] (príspevkov 0)
ArduinoJson - knižnica pre parsovanie JS...
[ 15.11.2020] (príspevkov 0)
Overenie kradnutých vozidiel - Arduino +...
[ 11.11.2020] (príspevkov 0)
Hladinomer + Zrážkomer - Arduino / ESP82...
[ 2.11.2020] (príspevkov 0)
RFID vrátnik - update Október 2020
[ 29.10.2020] (príspevkov 0)
Digitálny potenciometer, prerušenie, deb...
[ 28.10.2020] (príspevkov 0)
Integrácia zrážkomera RG-11 do projektu ...
[ 22.10.2020] (príspevkov 0)
WiFi Termostat - ESP8266 - WiFiManager -...
[ 28.9.2020] (príspevkov 0)
Izbový termostat - Portovanie programu -...
[ 22.9.2020] (príspevkov 0)
RFID vrátnik - Ukončenie projektu
[ 9.9.2020] (príspevkov 0)