Mosquitto MQTT Broker mit TLS lässt sich nicht starten

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich arbeite aktuell daran, eine MQTT-Verbindung zu verschlüsseln.

    Mein Broker läuft auf einem Raspberry Pi 3 Model B+, der über ein Ethernetkabel mit den Clients kommuniziert zu denen ein Arduino und probehalber mein Laptop zählt.

    Als Betriebssystem läuft gerade Linux 11 und ich habe glaube ich kein rapi-update ausgeführt.

    Unverschlüsselt hat die komplette Kommunikation bereits funktioniert, genauso wie mit einer Passwortabfrage.

    Zum erstellen der Zertifikate und allem was für die verschlüsselte Verbindung dazugehört bin ich der folgenden Anleitung gefolgt:

    https://plantprogrammer.de/mqtt-auf-dem-r…quitto-part-ii/

    Dabei habe ich aber die Schritte "Client Zertifikate" bisher übersprungen, weil das ja scheinbar fürs erste optional ist.

    Auf YouTube und Co. habe ich auch kein anderes Vorgehen finden können, außer dass die Zertifikate nicht selbst erstellt wurden.

    In dem Verzeichnis /etc/mosquitto/ca_certificates befinden sich die Dateien ca.crt, ca.key und ca.srl.

    In dem Verzeichnis /etc/mosquitto/certs liegen die Dateien mosquitto.crt, mosquitto.csr und mosquitto.key

    In der mosquitto.conf Datei habe ich folgende Zeilen ergänzt, sodass die Datei jetzt gerade so aussieht:

    Der Teil ab listener 1883 gehört noch zu den ersten unverschlüsselten Versuchen. Es sollte doch kein Problem sein, wenn der Teil weiterhin in der conf-Datei stehen bleibt oder?

    Nach der Änderung habe ich den Dienst beendet und wollte ihn anschließend wieder starten. Das habe ich mit den folgenden Befehlen probiert.

    systemctl stop mosquitto

    systemctl start mosquitto

    Der Start funktioniert aber nicht und meldet nur "Job for mosquitto.service failed because the control process exited with error code."

    Was mosquitto.log ausgibt seht ihr in diesem Bild:

    Scheinbar stimmt irgendwas mit meinem key-file nicht, aber ich komme wirklich nicht darauf, was das Problem ist. Vielleicht weiß jemand hier weiter?

    Unter journalctl -xe steht nur "mosquitto.service: Start request repeated too quickly"


    Eine weitere Vermutung habe ich noch. Den Raspberry Pi habe ich von einem Kollegen bekommen, da es sich hier um ein Versuchsprojekt in der Arbeit handelt. Allerdings habe ich nicht das passende Netzteil dazu. Könnte das ebenfalls einen Einfluss haben?

    Ich hoffe die Infos reichen so fürs Erste. Vielen Dank für Eure Hilfe!

  • Mosquitto MQTT Broker mit TLS lässt sich nicht starten? Schau mal ob du hier fündig wirst!

  • Stimmt, das habe ich bisher überlesen. Das hilft schon mal, den Fehler besser zu verstehen. :)

    Ich könnte mich zwar nicht erinnern beim Erstellen der Zertifikate Zugriffsrechte vergeben zu haben. Dazu lese ich auch nichts in dem verlinkten Tutorial heraus. Aber scheinbar ist es wirklich so. Wenn ich versuche die key-Datei im Dateimanager zu öffnen kommt ebenfalls die Info, dass ich keine Berechtigung habe.

    Ich suche jetzt auch im Internet, wie ich den Zugriff erlaube, falls aber jemand zufällig weiß wie das geht freue ich mich über Tipps. :)

  • Okay, ich habe ein kleines Update.

    Code
    setfacl -R -m u:mosquitto:rx /etc/mosquitto/certs

    Dieser Befehl löst scheinbar das Problem mit der Zugriffsberechtigung (Habe ich hier gefunden: https://github.com/eclipse/mosquitto/issues/1972)

    Der Dienst lässt sich dann starten.

    Im Log-File bleibt weiterhin ein Error stehen:

    Diesen bin ich losgeworden, in dem ich in der mosquitto.conf Datei die folgende Zeile eingefügt habe:

    Code
    tls_version tlsv1.2

    Ein letztes Problem bleibt gerade bestehen.

    Beim Subscribe Befehl wird mir mitgeteilt, dass die Substitution nicht passt. Ich habe dort die Identität von mosquitto.crt eingetragen.

    Dazu habe ich bisher nicht anderes gefunden.

    Weiß jemand, was das bedeutet? Vielen Dank!

  • Das habe ich auch aus dem Tutorial, das ich im ursprünglichen Post geteilt habe.
    Ich bin davon ausgegangen, dass das die Syntax für die sichere Verbindung ist. Dass ich das erst mal nachschauen sollte, darauf bin ich nicht gekommen. ^^ Danke für die Erklärung!


    Gestern Abend habe ich es mit der Standardsyntax -h 192.168.1.5 auch noch ausprobiert, aber dann kam wieder der Error "tlsv1 alert internal error", bei dem ich dachte, dass ich ihn gelöst hätte. Da stehe ich also weiterhin vor einem Rätsel...

  • Das habe ich auch aus dem Tutorial, das ich im ursprünglichen Post geteilt habe.

    Wenn du dort nachsiehst, siehst du, dass der Autor einer Variablen IP den Wert einer IP-Adresse zuweist

    (IP=10.0.0.34) und anschließend diese Variable ${IP} referenziert/benutzt.

    Das funktioniert nicht, wenn du statt der Variablen direkt die IP-Adresse ( ${192.x.y.z} ) dort einträgst,

    weil die Shell damit nichts anfangen kann.

    Wenn du nichts zu sagen hast, sag einfach nichts.

  • Wo hast Du denn diese komische Syntax her:

    $ leitet eine Variable ein, das kann nicht gehen, aber -h 192.168.1.5 wird es tun :)

    Das habe ich nach dem Hinweis hier auch verstanden. Aber nochmal danke für die Erklärung :)

  • Ria Ich nutze auch MQTT aber nicht mit TLS. Da mich das Thema aber interessiert werde ich bei mir mal ein Mosquitto auf einer Testraspi mit TLS aufsetzen. Dazu werde ich dem von Dir verlinkten Beitrag folgen. Mal sehen wie weit ich komme. Je nachdem was ich rausfinde kann ich Dir vielleicht weiterhelfen - oder muss auch nach der Fehlerursache suchen.

  • Jetzt habe ich mal bei mir MQTT mit TLS gemaess Deiner verlinkten Anleitung erstellt.

    Dabei sind mit folgende Dinge aufgefallen:

    1) Ich musste auch die Berechtigung von /etc/mosquitto aendern. Allerdings habe ich keine ACLs genommen. Das ist mir zu heavy weight.

    Code
    sudo chown -R mosquitto:mosquitto /etc/mosquitto/*

    2) Auch musste ich wie Du schon rausgefunden hast

    Code
    tls_version tlsv1.2

    aufnehmen in /etc/mosquitto/conf.d/020-listener-with-tls.conf

    3) Da ich auch Mosquitto Part 1 gelesen und ausgefuehrt habe musste ich bei den beiden sub und pub Befehlen noch die Userauthentication mitgeben da ich immer Connection refused: not authorized bekam.

    Ergebnis:

    Code
    IP=192.168.0.245
    mosquitto_sub -L mqtts://${IP}/topic/temperature --cafile ~/ca.crt --cert ~/client_heizung.crt --key ~/client_heizung.key -u heizung -P 12345
    27.6

    Sprich: Bei mir funktioniert es soweit mit den o.g. kleinen Aenderungen. Vielleicht probierst Du es noch mal bei Dir mit denen ;)

  • framp vielen lieben Dank für deine ausführliche Beschreibung!

    Teil 1 des Tutorials hatte ich auch gemacht und bin über das Wochenende ebenfalls darauf gekommen, dass sich

    Code
    allow_anonymous false

    in der .conf Datei auf alle listener bezieht.

    Tatsächlich habe ich dann heute nochmal alle schon erstellten Zertifikate gelöscht und bin die Anleitung noch einmal Schritt für Schritt durchgegangen. Dabei habe ich dann so wie du die Zugriffsberechtigung erteilt.

    Was ich sonst noch anders gemacht habe ist Folgendes: Letzte Woche hatte ich bei den Zertifikaten eine Gültigkeit von 1826 Tagen festgelegt, weil ich keine Lust hatte, nach einem Jahr neue Zertifikate zu erstellen. Heute habe ich es mit den 360 Tagen aus dem Tutorial ausprobiert. Ich kann mir zwar nicht vorstellen, dass es darum nicht funktioniert hat, der Vollständigkeit halber wollte ich das hier aber noch ergänzen.

    Ansonsten wüsste ich nicht, was ich anders gemacht habe, aber jetzt funktioniert die verschlüsselte Kommunikation. Und darüber bin ich gerade überglücklich. :)

    Vielen Dank für die nette Hilfe hier! Ihr habt mir wirklich sehr weitergeholfen. :)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!