MQTT plain oder SSL

Hallo,

nachdem die MQTT-Verbindung über SSL mit ioBroker als mqtt-Server nicht zum Laufen zu bringen war, habe ich nun einen eigenen Mosquitto-Server eingerichtet und SSL dort aktiviert. Dies funktioniert auch, über MQTT-Clients kann ich topics fehlerfrei setzen und abrufen.

Die Kamera (IN-9008) verbindet sich ebenfalls fehlerfrei mit dem Server, aber nur über plain (Port 1883), nicht über SSL/TLS (Port 8883). Im Kamera-Setup sind beide Ports eingetragen (den non-SSL Port einfach leer zu lassen funktioniert nicht.) Das Log der Kamera (/tmpfs/mqtt-log) zeigt, daß sich die Kamera direkt nach Aktivieren von MQTT mit server:1883 verbindet, es gibt kein Zeichen, daß server:8883 zuvor versucht worden wäre. Der Webserver der Kamera verfügt über ein hochgeladenes Zertifikat.

Muß die Verbindung noch irgendwo manuell auf SSL umgeschaltet werden?

MfG

Hallo @150d ,

hast du schon mal probiert den nicht-TLS Port in der Kamera zu ändern? Dann kann der Broker sich nur noch über TLS verbinden und man hat sichergestellt, dass die Kommunikation immer verschlüsselt abläuft.

Hallo,

ja, habe ich: Wenn der Broker zeitweise nicht erreichbar ist, scheint die Kamera zyklisch beide Ports durchzuprobieren. Startet der Broker wieder, ist es vom Zufall abhängig, mit welchem Port die Verbindung wiederhergestellt wird.

Man könnte nun natürlich einen beliebigen Port für „plain“ eintragen, sodaß die Verbindung damit immer scheitert und früher oder später der TLS-Port benutzt wird. Schön ist das aber nicht gerade.

MfG

Huhu,

der Mqtt Service der Kamera hat eigentlich keine Logik enthalten, die dafür Sorgen könnte, dass er zwischen TLS und non TLS hin und her wechselt. Wenn das Zertifikat in der Mqtt Oberfläche hochgeladen wurde, wird versucht eine TLS Verbindung herzustellen, wenn das nicht klappt wird keine Verbindung hergestellt und eine entsprechende Fehlermeldung über das Log ausgegeben. Eine Versuch eine unverschlüsselte Verbindung herzustellen findet dann nicht statt.

Hallo,

ich bringe es nicht fertig, daß sich die Kamera über TLS verbindet. Mein Setup ist wie folgt:

  • In der 9008 ist ein Zertifikat für den Webserver installiert incl. CA (eigene CA), sodaß ich das Webinterface ohne Fehler per TLS aufrufen kann.

  • Der Mosquitto-Server hört auf die Ports 1883 (plain) und 8883 (TLS). Die Zertifikate und CA sind eingetragen.

  • In der 9008 sind beide Ports angegeben (den Plain leer zu lassen wird vom UI nicht akzeptiert.)

Ergebnis: Die 9008 verbindet sich immer mit Port 1883. Ich muß noch mit Wireshark gegenchecken, aber bisher sehe ich keine Hinweise darauf, daß eine Verbindung auf 8883 auch nur versucht wird.

Was mir extrem helfen würde wäre eine Möglichkeit, die 9008 auf plain oder auf TLS zu zwingen. Es könnte im UI bspw je einen Schalter geben für „enable plain“ (danach Eingabe Portnummer) und „enable TLS“ (danach Eingabe Portnummer).

Aus irgendeinem Grund scheint die 9008 die TLS-Verbindung gar nicht zu versuchen. Muß ich dasselbe Zertifikat, das der Webserver längst benutzt, für MQTT nochmal hochladen?

Momentan weiß ich nicht, wie ich weiterkommen soll. Hat jemand eine Idee?

MfG

Hi,

für den Webserver werden eigentlich Key + Zertifikat + Intermediates hochgeladen.
Die hochgeladene Datei dafür wird auch vom internen Broker verwendet, aber nicht vom MQTT Client.

Der MQTT Client braucht keinen Key sondern lediglich das Root Zertifikat der Zertfikatskette des Brokers, damit diese verifiziert werden kann.
Wenn kein Zertifikat in der MQTT Oberfläche hochgeladen wurde, dann wird keine TLS Verbindung aufgebaut.

Tatsächlich, das war’s.

Ich war davon ausgegangen, daß der Client auf der 9008 das Zertifikat des Servers überprüfen kann, zumal er die CA bereits vom Webserver-Certifikat her kennt. Dem war aber nicht so.

Danke!

MfG

1 Like