Bastelprojekt: Wie man eine per ESP-gesteuerte Lampe fĂĽr Verliebte baut
Seite 4: Sicherheit durch TLS
Da die LoversLamp über das Internet kommuniziert, müssen wir sicherstellen, dass die gesendeten Daten vor Angriffen geschützt sind. Ohne Verschlüsselung könnten Dritte die MQTT-Nachrichten abfangen und möglicherweise sogar manipulieren. Hier kommt TLS (Transport Layer Security) ins Spiel, ein Standardprotokoll zur Verschlüsselung von Internetkommunikation.
TLS stellt sicher, dass die DatenĂĽbertragung zwischen dem ESP32 und dem MQTT-Broker verschlĂĽsselt und sicher ist. Verbindet man sich mit einem Server mittels TLS, erfolgt als Erstes eine bestimmte Abfolge von Aktionen. Diese Aktionen bilden den sogenannten TLS-Handshake:
- Client Hello: Der ESP32 schickt eine Nachricht an den Server, in der er angibt, welche Verschlüsselungsmethoden er unterstützt. Außerdem wird eine zufällige Zahl generiert, die später für die Verschlüsselung genutzt wird.
- Server Hello: Der MQTT-Server antwortet mit seiner eigenen Liste unterstĂĽtzter VerschlĂĽsselungsmethoden und sendet sein SSL-Zertifikat, das von einer vertrauenswĂĽrdigen Zertifizierungsstelle (CA) signiert wurde.
- ZertifikatsprĂĽfung: Der ESP32 ĂĽberprĂĽft, ob das Zertifikat des Servers gĂĽltig ist, indem er es mit einer gespeicherten Liste vertrauenswĂĽrdiger Zertifikate vergleicht. Falls das Zertifikat nicht stimmt, wird die Verbindung abgelehnt.
- Schlüsselaustausch: Der ESP32 und der Server erzeugen nun mit mathematischen Verfahren einen gemeinsamen geheimen Schlüssel aus dem Public Key des Servers. Dieser Schlüssel wird für die spätere Datenverschlüsselung genutzt.
- Datenverschlüsselung beginnt: Ab diesem Punkt werden alle Daten verschlüsselt übertragen, sodass niemand die Nachrichten mitlesen oder verändern kann.
Ohne TLS könnten Angreifer in öffentlichen oder unsicheren Netzwerken die Datenpakete der LoversLamp mitlesen und sogar manipulieren. Ein Hacker könnte beispielsweise falsche MQTT-Nachrichten senden und die Lampen nach Belieben ein- oder ausschalten. Mit TLS ist die gesamte Kommunikation verschlüsselt und abgesichert, sodass nur der ESP32 und der HiveMQ-Server die Nachrichten entschlüsseln können.
TLS fĂĽr die LoversLamp einrichten
Um TLS mit dem ESP32 zu nutzen, benötigen wir das Root-Zertifikat des MQTT-Servers. Dieses Zertifikat dient dazu, den Server zu identifizieren und sicherzustellen, dass wir uns mit dem richtigen Broker verbinden. Daneben steckt in dem Zertifikat der öffentliche Schlüssel, mit dem später der Schlüsselaustausch für TLS geschützt wird.
HiveMQ stellt ein öffentliches Root-Zertifikat zur Verfügung, das wir in unseren Code einbinden müssen. Der ESP32 nutzt dann WiFiClientSecure, um eine verschlüsselte Verbindung zum MQTT-Server herzustellen. Wieso WiFiClientSecure benötigt wird, erklären wir später.