Moin,
gegeben ist:
- meine zigbee2mqtt Instanz läuft als subdomain mit einem SSL-Zertifikat von Letsencrypt
- mein mqtt Server läuft ebenfalls als subdomain mit einem SSL-Zertifikat von Letsencrypt
- der Verbindungsaufbau zum mqtt Server mit einem selbstsignierten Client-Zertifikat funktioniert grundsätzlich, z.B. verbindet sich FHEM problemlos mit dem Zertifikat
So weit, so gut.
Nun versuche ich schon länger, den Verbindungsaufbau von z2m nach mqtt mit einem Client Zertifikat abzusichern. Und da geht das Problem los: es funktioniert nicht.
Dec 30 11:14:10 z2m node[1384]: {"level":"info","message":"z2m: Connecting to MQTT server at mqtts://<...>:8883","timestamp":"2025-12-30 11:14:10"}
Dec 30 11:14:10 z2m node[1384]: {"level":"error","message":"z2m: MQTT failed to connect, exiting... (unable to get local issuer certificate)","timestamp":"2025-12-30 11:14:10"}
Der Pfad zur CA aus der das Client-Zertifikat stammt, ist korrekt eingetragen.
Die einzige Erklärung, die ich im Moment habe: z2m kommt nicht damit klar, wenn das eigene Server-Zertifikat und ein Client-Zertifikat von unterschiedlichen CA signiert sind. Und in der z2m-Konfiguration gibt es nur ein einziges Feld für ein CA-Zertifikat.
Hat diese Konstellation mit unterschiedlichen CA schon irgendjemand zum Laufen bekommen?
Erkläre mal deine Konfiguration ein bisschen genauer, welches Zertifikat von welcher CA bzw. welcher Schlüssel ist wie bei wem hinterlegt? Im Zweifel fehlt da irgendwo eine "chain"-Datei?
Zitat von: betateilchen am 30 Dezember 2025, 13:14:51z2m kommt nicht damit klar, wenn das eigene Server-Zertifikat und ein Client-Zertifikat von unterschiedlichen CA signiert sind. Und in der z2m-Konfiguration gibt es nur ein einziges Feld für ein CA-Zertifikat.
Das hier kann ich mir eigentlich nicht vorstellen, weil das ja quasi der Regelfall ist, dass das unterschiedliche CAs sind. LE bietet ja (bald?) z.B. gar keine Zertifikate mehr für mTLS an.
Zitat von: passibe am 30 Dezember 2025, 15:51:19Erkläre mal deine Konfiguration ein bisschen genauer, welches Zertifikat von welcher CA
Und ich habe mir oben schon solche Mühe gegeben... ok, ich probiere es nochmal.
- Der mqtt-Server hat ein SSL-Zertifikat von Letsencrypt, also signiert von einer Letsencrypt CA, die allgemein bekannt ist.
- Der zigbee2mqtt-Server hat ein SSL-Zertifikat von Letsencrypt, also signiert von einer Letsencrypt CA, die allgemein bekannt ist.
Gesicherte Verbindungen zu diesen beiden Servern funktionieren einwandfrei:
- mqtts clients über port 8883 zum mqtt-Server
- FHEM mit MQTT2_CLIENT über port 8883 zum mqtt-Server
- https clients über port 8080 zum zigbee2mqtt-Server
Dazu habe ich ein selbstsigniertes Client-Zertifikat von einer selbst erstellten CA.
- Es existieren drei Dateien: "udo.crt", "udo.key" und "ca.crt"
- Die CA-Zertifikatsdatei ca.crt ist auf dem mqtt-Server vorhanden.
- In MQTT2_CLIENT ist im Attibut 'sslargs' hinterlegt:
attr ... sslargs SSL_cert_file:./certs/udo.crt SSL_key_file:./certs/udo.key
Damit funktioniert die Verbindung zwischen FHEM und dem mqtt-Server ohne Username/Passwort perfekt.
In zigbee2mqtt habe ich dann versucht, ebenfalls eine Verbindung zum mqtt-Server mittels dieser Zertifikate herzustellen. Dazu habe ich in den Eingabefeldern
- für 'cert' (Absoluter Pfad zum SSL/TLS Zertifikat für Client-Authentifizierung) die Datei 'udo.crt' mit Pfad angegeben
- für 'key' (Absoluter Pfad zum SSL/TLS Key für Client-Authentifizierung) die Datei 'udo.key' mit Pfad angegeben
Nachdem das nicht funktioniert hatte, habe ich noch das Feld 'ca' (Absoluter Pfad zum SSL/TLS CA-Zertifikat) mit 'ca.crt' inkl. Pfad eingetragen - hat aber auch nicht funktioniert.
Da die SSL-Verbindung zum zigbee2mqtt-Frontend OHNE einen Eintrag für 'ca' funktioniert (die Letsencrypt CA ist eben bekannt) kam ich auf die Vermutung, dass beim Ausfüllen dieses Feldes die CA sowohl für die Server- als auch für die Client-Authentifizierung verwendet werden könnte.
Zitat von: passibe am 30 Dezember 2025, 15:51:19Das hier kann ich mir eigentlich nicht vorstellen, weil das ja quasi der Regelfall ist, dass das unterschiedliche CAs sind.
Ja - ich denke, wenn das "bekannte" CAs sind, wird das wohl auch kein Problem sein, die muss man ja nicht explizit benennen. Aber die Kombination aus "bekannter" CA und "selbstgebauter" CA könnte halt schwierig sein.