MQTT Zertifikat nicht akzeptiert

Hallo,

ich mußte das Zertifikat meines MQTT-Brokers (mosquitto) nach Ablauf ersetzen. Nun gelingt es mir nicht, das neue Zertifikat zur Kamera 9008 hochzuladen:

  • Vorbereitung des Upload-Files:
    copy public.pem+ca.pem forinstar.pem

  • Kamera-GUI Smarthome/MQTT:
    „Datei auswählen“ → select forinstar.pem
    „Upload“ → Popup „vorhandenes Zertifikat ersetzen?“ → klick „OK“ → „Bitte warten…“ → rotes „X“

Ein „Intermediary Certificate“ gibt es bei mir nicht.

Ein anderer Client (Windows „MQTT Explorer“) akzeptiert forinstar.pem auf Anhieb.

Die Datei forinstar.pem ist genauso formatiert wie die Vorgänger-Datei (mit dem alten Broker-Zertifikat.)

Im syslog.txt der Kamera steht nichts, auch nicht nach Aktivieren im DEV-Mode: Nach Schließen des Dialogs und erneutem Aufruf steht „Konsole-Log“ wieder auf „Disabled“ - das funktioniert offenbar nicht mehr. Die Datei syslog.txt auf der Kamera hat die feste Größe 40 Byte und ändert sich nicht. Der Trick von hier funktioniert auch nicht mehr (Antwort 404/not-found.)

In mqtt-log steht nichts ausser einem Haufen Fehlern, weil die Kamera die Verbindung insecure auf Port 1883 versucht, was vom Broker abgelehnt wird.

Das Zertifikat der Kamera selbst hatte ich bei der Gelegenheit auch erneuert, diese Datei (hier natürlich inklusive des entsprechenden Private Keys) wurde anstandslos akzeptiert.

Prüfen der Datei forinstar.pem mit „openssl x509 -in forinstar.pem -text -noout“ zeigt fehlerfrei das Zertifikat des Brokers.

Zeilenende in forinstar.pem (Windows oder Unix) scheint keine Rolle zu spielen.

→ Warum wird der Upload des Broker-Zertifikats abgelehnt? Was genau wird hier überprüft und schlägt fehl?

MfG

Geht das nicht anders herum? Das Zertifikat der Kamera wird zum Broker geladen?

EDIT: Nee, es geht ja um das Client-Cert. :doh:

Jetzt bin ich platt:

Nur spaßeshalber habe ich das Zertifikat der Kamera selbst im Dialog Smarthome/MQTT nochmal hochgeladen. Und siehe da: Der Upload wird akzeptiert (grüner Haken), das Zertifikat wird angezeigt, und die Verbindung zum Broker funktioniert.

Nochmal genau:

  • Im GUI Netzwerk/SSL-Zertifikat ist ein benutzerdefiniertes Zertifikat auf „kamera.tld“ hochgeladen und ist aktiv. (Das wird mir auch vom Browser angezeigt.)

  • Im GUI Smarthome/MQTT habe ich „Download“ geklickt und das Zertifikat der Kamera bekommen. Genau diese Datei habe ich danach im selben Dialog über „Datei auswählen“/Upload wieder hochgeladen. Dort steht jetzt ebenfalls „Zertifikat: kamera.tld“

Das kann doch nicht richtig sein: Im Dialog Smarthome/MQTT sollte doch das Zertifikat des MQTT-Servers stehen, nicht das der Kamera. Und so war es mit dem alten Zertifikat auch immer.

Ist hier etwas in der Firmware durcheinandergekommen? Das Verhalten könnte ich mir erklären, wenn die Kamera selbst den MQTT-Server darstellen würde („Externen Broker verwenden = Aus“). Bei mir steht aber „Extern = An“.

MfG

Ich komme da auch durcheinander. Upload und Download der Zertifikate im Kameramenü hatte ich auch mal falsch verstanden.
Wenn mosquitto der Broker ist (anstelle der interne Broker der Kamera), dann hat er das Private und Public Cert (Client Cert). Mit dem Broker dürfen sich dann nur die Geräte verbinden, die ebenfalls das Client Cert haben. Deshalb muss das Client Cert von mosquitto zur Kamera hochgeladen werden Upload).

Den Upload des Broker-Zertifikats zur Kamera mache ich doch, damit die Kamera sich nur mit diesem einen Broker verbindet, und nicht mit einem potentiell gefälschten, der nur genauso heißt.

Momentan hat meine Kamera aber ihr eigenes Zertifikat hochgeladen und verifiziert. Sie spricht MQTT aber nicht mit sich selbst, sondern mit dem externen MQTT-Server.

Das kann doch nur heißen, daß in der Kamera die Zertifikats-Prüfung durcheinandergekommen ist. Es sollte laufen:

if (uploaded_cert_name == configured_server_name) then
if (server_presented_certificate == uploaded_certificate) then
ok

Statt dessen scheint aber das zu laufen:

if (uploaded_cert_name == my_name) then
if (server_presented_certificate == whatever) then
ok

Das stimmt doch nicht…?

?
Wie erneuert? Wo bzw. bei wem? Du verteilst doch nur die Public Cert von mosquitto an die anderen? Mehr wird eigentlich nicht gebraucht.

Die ganze Aktion musste ich starten, weil das Zertifikat im Broker abgelaufen war. Und wo ich schon am Werk war, habe ich das Zertifikat der Kamera auch gleich erneuert, das ohnehin demnächst fällig gewesen wäre.

Jetzt haben sowohl Broker als auch die Kamera neue Zertifikate, beide funktionieren. Aber ich kann das neue Zertifikat des Brokers nicht in die Kamera (unter Smarthome/MQTT) hochladen. Darum geht’s.

Da sollte dann am besten mal @INSTAR draufschauen, ob in der Firmware etwas nicht passt.

Hm, Zertifikate haben doch auch eine Gültigkeit/Laufzeit. Gibt es evtl. eine falsche Jahreszeit im Broker oder der Kamera, so dass diese das Zertifikat nicht akzeptiert?

Broker glaube ich nicht, weil die identische Zertifikats-Datei in einem anderen Client (ggü. ein und demselben Broker) funktioniert hat. Wenn die Broker-Zeit falsch wäre, dürfte das ja auch nicht klappen.

Uhrzeit und Zeitzone in der Kamera stimmen auch.

Das ganze ist leider auch nicht sehr intuitiv einzurichten… Aber wir haben hier eine Anleitung die mit einer Full HD Kamera erstellt wurde. Das sollte auf jeden Fall funktionieren:

In dieser Anleitung werden zwei Kameras verwendet - eine als Broker die andere als Client konfiguriert. Bei einem externen Broker muß das Broker Cert entsprechend dort hochgeladen werden.

Moin,

das Hochladen Feld im Dialog Smarthome/MQTT ist für den Trusted Store des Clients. Die FullHD hatte leider noch keinen eigenen CA Store deshalb muss man den hier für MQTT extra hochladen.
Das heißt, du musst hier das Root und Intermediate Certificate (Falls vorhanden), die verwendet wurden um dein Broker Key/Zertifikat zu signieren, hochladen. Im Falle eines selbst signierten Zertifikats musst du dieses hochladen.

Die Anleitung kenne ich schon: So habe ich das ja auch schon mehrere Male (bei früherem Austausch der Zertifikate) durchgeführt.

Aber früher ging’s, und jetzt geht’s auf einmal nicht mehr. Die Zertifikate zwischen früher und jetzt habe ich verglichen (Parameter, Format, bis hinunter zu den Windows/UNIX Zeilenenden), und das ist alles wie früher.

Ausserdem akzeptiert die Kamera ein Zertifikat, das sie nicht als Broker akzeptieren sollte (nämlich ihr eigenes, während „Externer Broker“ auf „an“ steht), arbeitet danach aber trotzdem mit dem externen Broker, dessen Zertifikat sie gar nicht hat - irgendwo ist da der Wurm drin.

Ist vielleicht irgendwann zwischendrin etwas schiefgegangen beim Umstellen auf eine gemeinsame Codebase mit den neuen 2k-Kameras…?

Gibt es hierzu vielleicht inzwischen ein Update von @INSTAR ?

Ein einfaches „nein, kann nicht sein“ genügt schon, dann weiß ich immerhin, daß ich woanders weitersuchen muß.

Bei den Full HDs steht noch ein Update aus. Aber ich meine da ist noch nichts rausgegangen, oder @Raphael ?

D.h. auf der Kamera-seite hätte sich dann nichts geändert, seitdem das oben verlinkte FAQ geschrieben wurde.

Nach Eurer letzten Rückmeldung habe ich weiter bei mir nachgeforscht und den Fehler jetzt endlich gefunden:

Meine PEM-Datei enthielt hinter dem Content ein 0x001a (in einer eigenen Zeile.) Das ist das Unicode SUB-Zeichen. Das genügte offenbar, um die Datei abzulehnen.

Und wo kam das Zeichen her? Ganz einfach:

copy ca.txt+public.txt cert.pem
→ letzte Zeile enthält ein SUB-Zeichen

copy /b ca.txt+public.txt cert.pem
→ letzte Zeile enthält kein SUB.

Meine Güte, auf sowas muß man erst einmal kommen.

Jedenfalls tl;dr:

Erledigt, kein Fehler in der Kamera/Firmware.

MfG

3 Likes

Dieses Thema wurde automatisch 2 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.