MQTT ist TLS mit ESP32 und Mongoose-OS

Mongoose-OS bettet einen MQTT-Client mit TLS-Unterstützung ein. Dies ermöglicht uns einerseits, den Server zu authentifizieren, und andererseits, dass die Serverinfrastruktur die Identität dieser Verbindungen authentifizieren kann, das heißt, dass es sich wirklich um autorisierte Benutzer handelt.

Weitere Informationen zum MQTT-Client und Betrieb ohne TLS gibt es Dieser Artikel. Weitere Informationen zu TLS finden Sie unter Ost.

Einstellung

Wir haben den ESP32 mit Mongoose-OS so konfiguriert, dass er einen MQTT-Client hat und sich als Client mit einem WiFi-Netzwerk verbindet. Da wir uns mit einem Server verbinden müssen, ist dies vielleicht der schnellste und einfachste Weg, um die Tests durchzuführen und die Funktionsweise zu erklären. Die Konfiguration kann manuell über RPC in einer JSON-Konfigurationsdatei erfolgen; oder definieren Sie es in der YAML-Datei, die das Projekt beschreibt. Für die Tests haben wir diese letzte Option gewählt.

libs:
  - origin:  # incorpora el cliente MQTT
config_schema:
  - ["mqtt.enable", true] # Habilita el cliente MQTT
  - ["mqtt.server", "address:port"] # Dirección IP del broker a utilizar
  - ["mqtt.ssl_ca_cert", "ca.crt"] # Certificado del broker, requerido
  - ["mqtt.ssl_cert", "sandboxclient.crt"] # nuestro certificado, para autenticación mutua
  - ["mqtt.ssl_key", "sandboxclient.key"] # nuestra clave, para autenticación mutua

Der häufig verwendete Port ist 8883. Der Broker kann auch verlangen, dass wir Benutzername und Passwort verwenden, die Details der vollständigen Konfiguration finden Sie in die Mongoose-OS-Seite. Schließlich entscheidet der Broker, welche Art der Authentifizierung (einfach oder gegenseitig) wir verwenden, obwohl wir das Zertifikat bei Bedarf bereitstellen müssen.

Betrieb

Vor dem Kompilieren und Ausführen ist es zweckmäßig, einen Client mit dem Broker zu verbinden, um die zur Verbindungszeit gesendete Nachricht beobachten zu können. Wir haben einen in unserem Labor installierten Broker verwendet und stellen ohne Authentifizierung eine Verbindung zu ihm her, was in gezeigt wird den Artikel über MQTT auch gut für diesen

Nachdem der Code kompiliert ist (Mos bauen) und den Mikrocontroller aufgezeichnet (mos blinken) durch Mos-Tool, werden wir im Protokoll beobachten, ob alles so funktioniert, wie es sollte, oder welche Fehler aufgetreten sind. Denken Sie daran, dass wir die Anmeldeinformationen für die Verbindung über WLAN mit unserem Netzwerk (SSID und Schlüssel) sowie die Adresse und den Port des MQTT-Brokers konfigurieren müssen, den wir verwenden werden. Am Ende des Hinweises kommentieren wir die Verwendung von Mosquitto.

einfache Authentifizierung

Auf diese Weise authentifizieren wir den Server, das heißt, wir können darauf vertrauen, dass es das ist, was wir erwarten, aber der Server hat keine Ahnung, wer wir werden können.

Dies ist die einfachste Konfiguration, und wir sollten keine Vorkehrungen treffen, außer den Namen der Datei mitzuteilen, die das im Verzeichnis gespeicherte CA-Zertifikat enthält fs im Parameter ssl_ca_certgibt dies an, dass der Broker validiert werden sollte.

[Mar 31 17:21:18.360] mgos_mqtt_conn.c:435 MQTT0 connecting to 192.168.5.3:8883
[Mar 31 17:21:18.585] mongoose.c:4906 0x3ffca41c ciphersuite: TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
[Mar 31 17:21:20.404] mgos_mqtt_conn.c:188 MQTT0 TCP connect ok (0)
[Mar 31 17:21:20.414] mgos_mqtt_conn.c:235 MQTT0 CONNACK 0
[Mar 31 17:21:20.423] init.js:34 MQTT connected
[Mar 31 17:21:20.437] init.js:26 Published:OK topic:/this/test/esp32_807A98 msg:CONNECTED!

gegenseitige Authentifizierung

Auf diese Weise authentifizieren wir sowohl den Server als auch den Client, d. h. der Server weiß jetzt, dass wir die sein sollen, die unser Zertifikat vorgibt. Dieser doppelte Prozess erfordert viel Verarbeitung und wir werden es beim Verbindungsaufbau bemerken. In dieser Konfiguration müssen wir unser Zertifikat und unseren Schlüssel im Verzeichnis bereitstellen fsNeben der Einstellung der Parameter ssl_cert j ssl_key; Andernfalls gibt uns der Broker möglicherweise einen Hinweis im Protokoll, wie es Mosquitto tut:

Mar 31 17:30:52 Server mosquitto[2694]: OpenSSL Error: error:140890C7:SSL routines:ssl3_get_client_certificate: **peer did not return a certificate**

Makler: Moskito

Als Anleitung und als schnelle Hilfe führen wir die Mindestkonfigurationen auf, die für den Betrieb in Mosquitto erforderlich sind. Die Pfade sind im GNU/Linux-Format und es wird erwartet, dass wir unsere Zertifikate dort ablegen.

Einfache Authentifizierung (vom Broker)

listener 8883 192.168.5.1
log_dest syslog
**cafile /etc/mosquitto/certs/ca.crt**
 **certfile /etc/mosquitto/certs/server.crt**
 **keyfile /etc/mosquitto/certs/server.key**

gegenseitige Authentifizierung

listener 8883 192.168.5.1
log_dest syslog
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
**require\_certificate true**

Beispiel

Der Beispielcode ist auf Github, hier j hier. Wir werden auch die Server-Anmeldeinformationen benötigen, ich habe einige hinterlassen hier um die Bedienung zu vereinfachen.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *