MQTT2_CLIENT mit TLS nutzen

Begonnen von ph0x, 15 Mai 2020, 17:51:16

Vorheriges Thema - Nächstes Thema

ph0x

Hallo!

Leider hat kein Forenbeitrag bislang eine brauchbare Lösung produziert, eventuell hat hier jemand einen wertvollen Hinweis.

Ich habe einen Mosquitto-Server, den ich per MQTT2_Client angebunden habe. Bislang funktionierte ohne TLS auf Port 1883 alles einwandfrei, aber das kann ja kein Zielzustand sein.
Also nutzt der Server jetzt TLS mit x509-Zertifikaten und die Tasmota-Steckdosen melden sich auch eifrig, wie ich mit mosquitto_sub überprüfen konnte.

Leider endet die Euphorie dann bei FHEM. Ich habe den Port im MQTT2_Client angepasst und der Server erscheint als "opened", aber natürlich kommen keine Messages an. Sobald ich
attr myBroker SSL 1
eingebe, friert FHEM ein und ich muss den Container neustarten. Dasselbe Verhalten wie damals, als ich FHEMWEB auf SSL umgestellt habe. FHEM läuft übrigens im Docker-Container mit ConfigDB.

Ich würde dem Client ja gern das CA-Zertifikat mitgeben, damit er das Zertifikat des Servers überprüfen kann, aber dazu habe ich auch im CommandRef leider nichts gefunden.

Muss ich noch etwas anderes definieren, bevor das funktionieren kann?

Funktioniert TLS mit MQTT2_Client überhaupt schon zuverlässig?


Gruß Marco

rudolfkoenig

ZitatFunktioniert TLS mit MQTT2_Client überhaupt schon zuverlässig?

Ob es zuverlaessig funktioniert kann ich nicht sagen, da ich kein MQTT2_CLIENT im Dauereinsatz habe, noch weniger mit TLS.
Ich habe aber gerade mosquitto mit aktivierten TLS gestartet, MQTT2_CLIENT damit auf Anhieb verbunden und ich bekomme Nachrichten.
Von Einfrieren kann ich nicht berichten, sowas habe ich bei FHEMWEB/SSL auch nie gesehen.

ZitatIch würde dem Client ja gern das CA-Zertifikat mitgeben, damit er das Zertifikat des Servers überprüfen kann, aber dazu habe ich auch im CommandRef leider nichts gefunden.
Geht es um ein CA oder ein Client Zertifikat? MQTT2_CLIENT unterstuetzt weder/noch, falls mosquitto mit Client-Zertifikaten konfiguriert wurde, dann wird das vermutlich die Ursache des Problems sein.

ph0x

Zitat von: rudolfkoenig am 16 Mai 2020, 14:27:43
Ich habe aber gerade mosquitto mit aktivierten TLS gestartet, MQTT2_CLIENT damit auf Anhieb verbunden und ich bekomme Nachrichten.
[...]
MQTT2_CLIENT unterstuetzt weder/noch, falls mosquitto mit Client-Zertifikaten konfiguriert wurde, dann wird das vermutlich die Ursache des Problems sein.
Ich verstehe deine Antwort nicht ganz. Wenn der Mosquitto mit TLS läuft, braucht er ja einen Key und ein Zertifikat. Das ist natürlich ein Server-Zertifikat.
Entweder man kauft jetzt eins oder generiert sich mit einer CA selber eins. Im zweiten Fall ist die CA selbstverständlich vorerst nicht vertrauenswürdig, weshalb man das CA-Zertifikat in einen Zertifikatsspeicher einbauen muss, z.B. in /etc/ssl/certs/ca-certificates.crt oder in einen eigenen (bspw. bei Firefox).
Greift MQTT2-Client auf irgendeinen Zertifikatsspeicher zurück? Falls nicht, muss ich ihm ja das CA-Zertifikat irgendwie mitgeben können, damit er die Echtheit des Server-Zertifikats von mosquitto überprüfen kann.
Wenn es bei dir auf Anhieb funktioniert hat, welche Art von Zertifikaten hast du genutzt?

Zitat von: rudolfkoenig am 16 Mai 2020, 14:27:43
Von Einfrieren kann ich nicht berichten, sowas habe ich bei FHEMWEB/SSL auch nie gesehen.
Wenn man FHEMWEB auf SSL umstellt, ist die http-Adresse ja nicht mehr erreichbar und reagiert daher nicht, bis man https aufgerufen hat. Exakt so verhält es sich gerade bei meinem MQTT2-Client, wenn ich SSL auf 1 stelle ...

Gruß Marco

rudolfkoenig

ZitatIm zweiten Fall ist die CA selbstverständlich vorerst nicht vertrauenswürdig, weshalb man das CA-Zertifikat in einen Zertifikatsspeicher einbauen muss, z.B. in /etc/ssl/certs/ca-certificates.crt oder in einen eigenen (bspw. bei Firefox).
Oder man sagt: CA ist mir egal (ich trau denen eh nicht), Hauptsache ich habe eine verschluesselte Verbindung => CA Zertifikat ist unnoetig. Das ist die aktuell einzig moegliche "Einstellung" von MQTT2_CLIENT. Dieses Verhalten kann aber nicht zum Nicht-Funktionieren vom TLS-Verbindung fuehren, hoechstens zu verminderte Sicherheit. Dass MQTT2_CLIENT _zusaetzlich_ auch kein Client-Zertifikat mitschicken kann, kann allerdings sehr wohl zu einem Verbindungsproblem fuehren, da mosquitto (falls so konfiguriert), clients ohne Client-Zertifikat ablehnt.

ZitatWenn es bei dir auf Anhieb funktioniert hat, welche Art von Zertifikaten hast du genutzt?
Selbst generierte. Ist in diesem Zusammenhang aber auch irrelevant.

ZitatWenn man FHEMWEB auf SSL umstellt, ist die http-Adresse ja nicht mehr erreichbar und reagiert daher nicht, bis man https aufgerufen hat.
Das mag sein, aber das fuehrt nicht zum Verklemmen von FHEM, sondern zu einer Fehlermeldung.
Und auf diese Unterscheidung lege ich sehr viel Wert.

ph0x

Zitat von: rudolfkoenig am 16 Mai 2020, 15:55:52
Dass MQTT2_CLIENT _zusaetzlich_ auch kein Client-Zertifikat mitschicken kann, kann allerdings sehr wohl zu einem Verbindungsproblem fuehren, da mosquitto (falls so konfiguriert), clients ohne Client-Zertifikat ablehnt.
Okay, ist es nicht, der akzeptiert alles.

Zitat von: rudolfkoenig am 16 Mai 2020, 15:55:52
Das mag sein, aber das fuehrt nicht zum Verklemmen von FHEM, sondern zu einer Fehlermeldung.
Und auf diese Unterscheidung lege ich sehr viel Wert.
Ich habe auch nur den Zustand beschrieben und nicht behauptet, dass es ein Fehler sei.

Zitat von: rudolfkoenig am 16 Mai 2020, 15:55:52Das ist die aktuell einzig moegliche "Einstellung" von MQTT2_CLIENT.
Gut, das ist eine verwertbare Aussage. Leider erklärt das noch nicht, weshalb das Umstellen auf SSL meinen Container abschießt, aber von dort aus kann ich mal weitersuchen.

Gruß Marco

ph0x

Bitte vergesst alles ab "Guten Morgen".

Bei einem erneuten Versuch, hat es jetzt geklappt. Möglicherweise lag es daran, dass ich den Broker nun über den Domainnamen, der im Zertiifkat eingetragen ist, statt über seine IP-Adresse anspreche.

Trotzdem danke für die Info mit dem CA-Zertifikat, dann kann ich zumindest diese Baustelle schließen. :-)


Gruß Marco