MQTT-Sicherheit

MQTT mTLS: Mutual TLS mit X.509-Client-Zertifikaten erklärt

Mit Mutual TLS kann ein MQTT-Broker Geräte per X.509-Zertifikat authentifizieren. Erfahren Sie, wie das funktioniert, wie Sie es auf Mosquitto einrichten, was der Betrieb kostet und wann Zugangsdaten über TLS die bessere Wahl sind.

MQTT-mTLS-Illustration mit einem Gerät und einem Broker, die in einem Mutual-TLS-Handshake X.509-Zertifikate austauschen
Probieren Sie es auf Ihrem eigenen MQTT-Broker ausHolen Sie sich im Free-Tarif einen privaten, verwalteten MQTT-Broker und starten Sie mit fertigen Codebeispielen.
Kostenlos testen Codebeispiele Keine Kreditkarte erforderlich

MQTT mTLS (Mutual TLS) authentifiziert beide Seiten einer Verbindung mit Zertifikaten: Der Broker weist dem Gerät seine Identität nach, und das Gerät weist dem Broker seine Identität mit einem eigenen X.509-Client-Zertifikat nach. Dieser Artikel erklärt, wie das funktioniert, zeigt ein vollständiges Mosquitto-Setup mit OpenSSL und hilft Ihnen bei der Entscheidung, ob mTLS seinen Betriebsaufwand wert ist oder ob Benutzername und Passwort über TLS für Ihre Flotte die bessere Wahl sind.

Server-TLS vs. Mutual TLS

Beim gewöhnlichen MQTT über TLS präsentiert nur der Broker ein Zertifikat. Der Client prüft es, der Tunnel wird verschlüsselt, und dann authentifiziert sich der Client innerhalb dieses Tunnels mit den Feldern für Benutzername und Passwort im MQTT-CONNECT-Paket. So arbeiten die meisten Cloud-Broker, und das wird in unserem Leitfaden zur MQTT-TLS-Konfiguration ausführlich erklärt.

Bei Mutual TLS sendet der Broker während des Handshakes zusätzlich einen CertificateRequest. Der Client antwortet mit seinem eigenen Zertifikat und signiert einen Teil des Handshakes mit dem zugehörigen privaten Schlüssel. Der Broker prüft, ob das Client-Zertifikat zu einer vertrauenswürdigen CA führt, innerhalb seines Gültigkeitszeitraums liegt und nicht widerrufen wurde. Schlägt eine Prüfung fehl, wird die TCP-Verbindung geschlossen, bevor auch nur ein MQTT-Paket verarbeitet wird.

Aspekt Zugangsdaten über TLS Mutual TLS (mTLS)
Geräte-Geheimnis Benutzername und Passwort Privater Schlüssel + Zertifikat
Geheimnis wird über das Netzwerk gesendet Ja (im verschlüsselten Tunnel) Nein, nur eine Signatur
Abweisung nicht authentifizierter Clients Nach MQTT CONNECT Während des TLS-Handshakes
Rotation Passwort ändern Zertifikat neu ausstellen und verteilen
Widerruf Zugangsdaten deaktivieren CRL oder OCSP oder kurze Zertifikatslaufzeiten
Benötigte Infrastruktur Benutzerverwaltung des Brokers Eine CA, ein Ausstellungs- und ein Erneuerungsprozess
Hardwaregestützter Schlüsselschutz Möglich, aber unüblich Passt natürlich (Secure Elements, TPMs)

Warum Teams sich für MQTT mTLS entscheiden

Das stärkste Argument für mTLS: Das Geräte-Geheimnis verlässt das Gerät nie. Ein Passwort wird bei jedem Verbindungsaufbau übertragen, sodass ein kompromittierter Broker, ein falsch konfiguriertes Log oder ein Debugging-Proxy es abgreifen kann. Ein privater Schlüssel erzeugt nur Signaturen. Liegt der Schlüssel in einem Secure Element wie einem ATECC608 oder einem TPM, kann ihn nicht einmal die Firmware auslesen, was das Klonen eines Geräts deutlich erschwert.

Weitere Vorteile:

  • An Hardware gebundene Identität: Sie können Zertifikate im Werk ausstellen und den Common Name des Zertifikats an die Seriennummer koppeln.
  • Frühe Abweisung: Nicht authentifizierte Clients werden verworfen, bevor der Broker MQTT parst, was die Angriffsfläche verringert.
  • Standard-Tooling: X.509 wird von jeder TLS-Bibliothek, jedem Load Balancer und jedem Security-Team verstanden.

Die versteckten Kosten: der Zertifikats-Lebenszyklus

mTLS verlagert die Komplexität von der Benutzerdatenbank des Brokers in eine Public-Key-Infrastruktur. Bevor Sie es einführen, sollten Sie diese Aufgaben ehrlich einschätzen:

  1. Eine CA betreiben: den Root-Schlüssel offline halten, für die Ausstellung eine Zwischen-CA nutzen und beide schützen.
  2. Provisioning: auf jedem Gerät einen Schlüssel erzeugen (idealerweise auf dem Gerät selbst), einen CSR erstellen, ihn signieren und das Zertifikat installieren.
  3. Erneuern: Zertifikate laufen ab. Geräte brauchen einen Weg, ein neues Zertifikat zu erhalten, bevor das alte erlischt, selbst wenn sie ein Jahr lang im Regal lagen.
  4. Widerrufen: Wird ein Gerät gestohlen oder außer Betrieb genommen, muss der Broker sein Zertifikat ablehnen. Mosquitto unterstützt eine CRL-Datei; viele Teams setzen stattdessen auf kurze Zertifikatslaufzeiten.
  5. Die CA rotieren: Irgendwann muss die ausstellende CA selbst ersetzt werden. Das bedeutet, einen neuen Vertrauensanker an den Broker und neue Zertifikate an jedes Gerät zu verteilen.

Geht dabei etwas schief, entstehen Ausfälle, die wie rätselhafte Handshake-Fehler in einem Teil der Flotte aussehen. Für die meisten kleinen und mittleren Projekte bieten eindeutige Zugangsdaten pro Gerät über TLS, regelmäßig rotiert, ein besseres Verhältnis von Sicherheit zu Aufwand. Unsere Leitfäden zur MQTT-Authentifizierung mit Benutzername und Passwort und zur Rotation von MQTT-Zugangsdaten zeigen, wie das gut gelingt.

MQTT mTLS auf Mosquitto einrichten

Das folgende Labor-Setup nutzt Eclipse Mosquitto, das die Authentifizierung per Client-Zertifikat nativ unterstützt. Führen Sie es auf einem Rechner aus, den Sie kontrollieren.

Schritt 1: Eine private CA erstellen

mkdir -p ~/mqtt-pki && cd ~/mqtt-pki

# CA-Schlüssel und selbstsigniertes CA-Zertifikat (10 Jahre)
openssl genrsa -out ca.key 4096
openssl req -x509 -new -key ca.key -sha256 -days 3650 \
  -subj "/CN=Lab MQTT Root CA" -out ca.crt

Schritt 2: Das Broker-Zertifikat ausstellen

Das Broker-Zertifikat braucht einen Subject Alternative Name, der zum Hostnamen passt, den die Clients verwenden.

openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=mqtt.lab.local" -out server.csr

cat > server.ext <<'EOF'
subjectAltName = DNS:mqtt.lab.local
extendedKeyUsage = serverAuth
EOF

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -days 825 -sha256 -extfile server.ext -out server.crt

Schritt 3: Ein Gerätezertifikat ausstellen

Verwenden Sie die Geräte-ID als Common Name. In der Produktion würde der Schlüssel auf dem Gerät erzeugt, und nur der CSR würde es verlassen.

openssl genrsa -out sensor-001.key 2048
openssl req -new -key sensor-001.key -subj "/CN=sensor-001" -out sensor-001.csr

cat > client.ext <<'EOF'
extendedKeyUsage = clientAuth
EOF

openssl x509 -req -in sensor-001.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -days 365 -sha256 -extfile client.ext -out sensor-001.crt

Schritt 4: Den Broker konfigurieren

# /etc/mosquitto/conf.d/mtls.conf
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key

# Ein von cafile signiertes Client-Zertifikat verlangen
require_certificate true

# Den CN des Zertifikats als MQTT-Benutzernamen verwenden (für ACLs)
use_identity_as_username true

# Optional: widerrufene Zertifikate ablehnen
# crlfile /etc/mosquitto/certs/ca.crl

Kopieren Sie die Dateien nach /etc/mosquitto/certs/, machen Sie den Schlüssel für den mosquitto-Benutzer lesbar und starten Sie den Dienst neu. Mit use_identity_as_username wird der CN sensor-001 zum Benutzernamen, sodass Sie ACL-Regeln pro Gerät schreiben können.

Schritt 5: Mit dem Client-Zertifikat verbinden

mosquitto_sub -h mqtt.lab.local -p 8883 --cafile ca.crt \
  --cert sensor-001.crt --key sensor-001.key \
  -i sensor-001 -t "lab/sensor-001/#" -v

Dieselben drei Dateien funktionieren auch im Code. In Python mit paho-mqtt 2.x:

import paho.mqtt.client as mqtt

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="sensor-001")
client.tls_set(ca_certs="ca.crt", certfile="sensor-001.crt", keyfile="sensor-001.key")
client.connect("mqtt.lab.local", 8883)
client.publish("lab/sensor-001/temp", "21.4", qos=1)
client.loop(2)
client.disconnect()

Wenn Sie sich ohne --cert und --key verbinden, schlägt der Handshake sofort fehl. So bestätigen Sie schnell, dass require_certificate aktiv ist. Labor-Setups wie dieses nutzen eine selbstsignierte Root; unser Leitfaden zu selbstsignierten Zertifikaten für MQTT behandelt die Fallstricke.

Häufige mTLS-Fehler

  • „certificate required“ oder ein Handshake-Alert vom Broker: Der Client hat kein Zertifikat gesendet. Prüfen Sie die Pfade zu Zertifikat und Schlüssel.
  • „unknown ca“: Das Client-Zertifikat wurde von einer CA signiert, die nicht in der cafile des Brokers steht.
  • „unsupported certificate purpose“: Dem Zertifikat fehlt die Extended Key Usage clientAuth.
  • Schlüssel passt nicht: Die Schlüsseldatei gehört nicht zum Zertifikat. Vergleichen Sie openssl x509 -noout -modulus -in sensor-001.crt | openssl md5 mit demselben Befehl für den Schlüssel.
  • Abgelaufenes Zertifikat: Prüfen Sie die Daten mit openssl x509 -noout -dates -in sensor-001.crt und kontrollieren Sie die Uhr des Geräts.

Wann mTLS sinnvoll ist und wann Zugangsdaten genügen

mTLS passt gut, wenn Sie den Broker selbst kontrollieren, eine hardwaregestützte Identität brauchen, in einem regulierten Umfeld arbeiten, das zertifikatsbasierte Geräteidentität vorschreibt, oder bereits eine PKI betreiben. Für Prototypen, kleine Flotten und Teams ohne Verantwortlichen für die Zertifikatserneuerung ist es meist überdimensioniert.

In der Industrieautomation ist das Zertifikatsmodell vielen Teams bereits vertraut: OPC UA authentifiziert Anwendungen mit X.509-Instanzzertifikaten, und Sicherheitskonzepte nach IEC 62443 legen Wert auf eindeutige, belastbare Geräteidentitäten. Wer im Werk ohnehin eine PKI für OPC UA betreibt, kann sie häufig auch für MQTT-Gateways nutzen. Ein Mittelständler ohne eigene PKI fährt dagegen mit Zugangsdaten pro Gerät über TLS oft besser.

ConnectMQ verfolgt den Ansatz „Zugangsdaten über TLS“: Der Broker präsentiert ein öffentlich vertrauenswürdiges Let's-Encrypt-Zertifikat, und jeder Client authentifiziert sich mit Benutzername, Passwort und Client ID, die im Portal generiert werden. Client IDs sind an die ausgestellten Zugangsdaten gebunden, und wiederholte fehlgeschlagene Logins führen zu IP-Sperren. ConnectMQ bietet keine Authentifizierung per Client-Zertifikat an. Wenn mTLS eine harte Anforderung ist, brauchen Sie einen Broker, den Sie selbst konfigurieren, etwa Mosquitto wie oben gezeigt. Für die Mehrheit der Projekte beseitigt ein verwalteter MQTT-Broker mit starken Zugangsdaten pro Gerät jedoch weit mehr Betriebsrisiko, als mTLS hinzufügt. Das Gesamtbild behandeln unsere Best Practices für MQTT-Sicherheit.

Starten Sie mit ConnectMQ

Wenn Zugangsdaten über TLS zu Ihrem Bedrohungsmodell passen, bietet Ihnen ConnectMQ einen abgesicherten Broker, ohne dass Sie eine PKI betreiben müssen. Registrieren Sie sich unter app.connectmq.com, wählen Sie den kostenlosen Serverless-Plan ohne Kreditkarte, erstellen Sie einen Broker und verbinden Sie sich auf Port 8883 mit den generierten Zugangsdaten. Sie können zunächst auf dem öffentlichen MQTT-Broker unter broker.connectmq.com mit Testdaten prototypen und beim Go-live auf private Zugangsdaten umsteigen.

Häufig gestellte Fragen

Ist mTLS sicherer als Benutzername und Passwort über TLS?

Es entfernt das gemeinsame Geheimnis aus der Übertragung und harmoniert gut mit hardwaregestützter Schlüsselspeicherung, daher widersteht es dem Diebstahl von Zugangsdaten besser. Der Preis dafür ist ein Zertifikats-Lebenszyklus, den Sie zuverlässig betreiben müssen.

Kann ich mTLS und Benutzername plus Passwort zusammen verwenden?

Ja. Mosquitto kann zum Beispiel ein Client-Zertifikat verlangen und trotzdem MQTT-Benutzername und -Passwort prüfen, was zwei unabhängige Faktoren ergibt.

Unterstützt ConnectMQ die Authentifizierung per Client-Zertifikat?

Nein. ConnectMQ authentifiziert Clients mit generiertem Benutzernamen, Passwort und Client ID, die über TLS übertragen werden. Nutzen Sie einen selbst betriebenen Broker, wenn Sie ausdrücklich mTLS benötigen.

Wie lange sollten Gerätezertifikate gültig sein?

Darauf gibt es keine pauschale Antwort. Kürzere Laufzeiten verringern die Abhängigkeit vom Widerruf, erfordern aber eine zuverlässige automatische Erneuerung; wählen Sie den kürzesten Zeitraum, den Ihr Erneuerungsprozess bewältigt, ohne dass Zertifikate im Feld ablaufen.

Verwandte Artikel

MQTT-Zugangsdaten ohne Ausfallzeit rotieren

Eine Schritt-für-Schritt-Strategie mit zwei parallelen Zugangsdaten, um MQTT-Benutzernamen und -Passwörter in einer Geräteflotte zu rotieren: neue Zugangsdaten bereitstellen, mit Fallback umschalten, prüfen und erst dann die alten widerrufen.

7 Min. Lesezeit

MQTT-Zugangsdaten sicher auf Embedded-Geräten speichern

Ein praxisnaher Vergleich der Möglichkeiten, MQTT-Benutzernamen und -Passwörter auf ESP32- und Linux-Geräten zu schützen, von verschlüsseltem NVS und Flash-Verschlüsselung bis zu Secure Elements und TPM-gestützten systemd-Credentials.

8 Min. Lesezeit

Alle Artikel →

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.