Mosquitto

Im Folgenden finden Sie einige Beispielkonfigurationen für den Mosquitto Message Broker. Die Konfigurationen wurden auf Basis der offiziellen Mosquitto Dokumentation erstellt. Die Konfigurationsdatei (mosquitto.conf) des Brokers finden Sie im Installationsverzeichnis des Brokers (zum Beispiel C:\Program Files\mosquitto). Diese kann mit einem Texteditor Ihrer Wahl geöffnet und bearbeitet werden, zum Beispiel Notepad.

Wir empfehlen vor Änderungen an der Konfigurationsdatei ein Backup zu erstellen. Alternativ können Sie auch zusätzliche Konfigurationsdateien erstellen und diese beim Starten des Brokers über die Kommandozeile laden:

mosquitto.exe -c mosquitto.conf

Zu Debugging- und Test-Zwecken empfehlen wir den Start des Brokers in einer Kommandozeile, da hier auch die Verbose Ausgabe aktiviert werden kann:

mosquitto.exe -c mosquitto.conf -v
Mosquitto 1:

Mosquitto Start in der Kommandozeile

Bitte stellen Sie vor dem Starten des Mosquitto Brokers aus der Kommandozeile sicher, dass kein aktiver Mosquitto Prozess auf Ihrem System läuft. Dies kann zum Beispiel der Fall sein, wenn der Mosquitto Broker als Windows-Service installiert und gestartet wurde. Bitte überprüfen Sie daher den Windows Task Manager und die Windows Diensteverwaltung.

Im Folgenden finden Sie nun einige Beispielkonfigurationen für unterschiedliche Anwendungsfälle. Diese Konfigurationen wurden auf Basis des Mosquitto Message Brokers in der Version 2.0.15 erstellt und sind ebenfalls in unserem TF6701_Samples Repository auf GitHub verfügbar.

Ungesicherte Verbindung

Der folgende Inhalt der Konfigurationsdatei konfiguriert den Broker für eine ungesicherte Verbindung ohne TLS und ohne Benutzerauthentifizierung.

listener 1883
allow_anonymous true

Ungesicherte Verbindung mit Benutzerauthentifizierung

Der folgende Inhalt der Konfigurationsdatei konfiguriert den Broker für eine ungesicherte Verbindung ohne TLS, jedoch mit Benutzerauthentifizierung.

listener 1883
allow_anonymous false
password_file C:\Program Files\mosquitto\users.pwd

Die mit dem Parameter password_file spezifizierte Benutzerdatenbank kann mit dem Tool mosquitto_passwd erstellt werden, welches sich ebenfalls im Installationsverzeichnis des Brokers befindet. Der folgende Aufruf erzeugt eine neue Benutzerdatenbank und fügt den Benutzer MyUser1 mit dem Password SecurePassword hinzu:

mosquitto_passwd.exe -b -c "C:\Program Files\mosquitto\users.pwd" MyUser1 SecurePassword

Durch die Verwendung des Parameters -b kann ein Password direkt in dem Aufruf übergeben werden. Der Parameter -c erzeugt eine neue Password-Datei. Soll ein neuer Benutzer zu einer existierenden Datei hinzugefügt werden, so entfällt dieser Parameter.

mosquitto_passwd.exe -b "C:\Program Files\mosquitto\users.pwd" MyUser2 AnotherSecurePassword
Mosquitto 2:

Klartext-Übermittlung des Passwords

Bitte beachten Sie, dass im Falle einer unsicheren, d.h. nicht-verschlüsselten MQTT-Verbindung, das Password bei der Benutzerauthentifizierung im Klartext übermittelt wird. Wir empfehlen daher die Verschlüsselung der MQTT-Kommunikation mittels TLS, siehe Beispielkonfigurationen unten.

Ungesicherte Verbindung mit Benutzerauthentifizierung und ACL

Der folgende Inhalt der Konfigurationsdatei konfiguriert den Broker für eine ungesicherte Verbindung ohne TLS, jedoch mit Benutzerauthentifizierung und unter Verwendung einer Access Control List (ACL), welche den Benutzerzugriff auf bestimmte Topics reguliert.

listener 1883
allow_anonymous false
password_file C:\Program Files\mosquitto\users.pwd
acl_file C:\Program Files\mosquitto\userAccess.acl

Wie bereits im vorherigen Beispiel beschrieben, kann die als password_file referenzierte Benutzerdatenbank mit Hilfe des Tools mosquitto_passwd erzeugt werden. Die als acl_file referenzierte Zugriffslistendatei ist eine reine Textdatei, welche nach einem bestimmten Format aufgebaut wird. Dieses Format ist ebenfalls in der Mosquitto Dokumentation näher beschrieben. Die folgende Datei zeigt exemplarisch, wie eine Zugriffsliste für zwei Benutzer aussehen könnte. Jedem Benutzer wird hierbei Zugriff auf seinen eigenen Topic-Bereich gewährt. Ein Administrator-Benutzer soll jedoch Zugriff auf alle Topics bekommen.

user Admin
topic #
user MyUser1
topic users/MyUser1/#
user MyUser2
topic users/MyUser2/#
Mosquitto 3:

Zugriff auf ein nicht erlaubtes Topic

Bitte beachten Sie, dass der Client bei Zugriff (Publish/Subscribe) auf ein nicht erlaubtes Topic keinerlei Rückmeldung vom Mosquitto Message Broker bekommt. Aus Client-Sicht scheint der Vorgang erfolgreich zu sein, es werden vom Broker jedoch außer den regulären MQTT Kommando-Paketen keinerlei Nachrichten an den Client übermittelt bzw. weitergeleitet.

TLS-Verbindung mit PSK

Der folgende Inhalt der Konfigurationsdatei konfiguriert den Broker für eine gesicherte Verbindung mit TLS unter Verwendung eines Pre-Shared Keys (PSK). Es wird keine Benutzerauthentifizierung konfiguriert.

listener 8883
allow_anonymous true
psk_hint TwinCATrocks
psk_file C:\Program Files\mosquitto\myKeys.psk

Die als psk_file referenzierte Datei enthält dann eine Liste mit Pre-Shared Keys. Es handelt sich hierbei um eine reine Textdatei, in welcher die PSKs im Format identity:key zeilenweise aufgelistet sind. Der Key wird hierbei im Hexadezimalformat angegeben. Zum Beispiel:

MyIdentity1:ab123456789cd
MyIdentity2:ef987654321ab

Der Parameter psk_hint ist wichtig, da er für den Listener das TLS-PSK aktiviert.

TLS-Verbindung mit Zertifikat

Der folgende Inhalt der Konfigurationsdatei konfiguriert den Broker für eine gesicherte Verbindung mit TLS unter Verwendung eines Zertifikats. Es wird keine Benutzerauthentifizierung konfiguriert.

Dieses Beispiel geht davon aus, dass Sie eine Certificate Authority (CA) besitzen, welche Serverzertifikate ausstellen kann. Es gibt diverse Tutorials im Web, welche zum Beispiel demonstrieren, wie Sie mittels OpenSSL eine solche CA erzeugen und entsprechende Zertifikate ausstellen können.

listener 8883
allow_anonymous true
cafile C:\ca\certs\fullChain.pem
crlfile C:\ca\crl\intermediateCA.crl
certfile C:\Program Files\mosquitto\certs\mosquitto.pem
keyfile C:\Program Files\mosquitto\certs\mosquitto.key

TLS-Verbindung mit Zertifikat und Benutzerauthentifizierung

Der folgende Inhalt der Konfigurationsdatei konfiguriert den Broker für eine gesicherte Verbindung mit TLS unter Verwendung eines Zertifikats. Zusätzlich wird eine Benutzerauthentifizierung unter Angabe der Benutzerdatenbankdatei konfiguriert.

Dieses Beispiel geht davon aus, dass Sie eine Certificate Authority (CA) besitzen, welche Serverzertifikate ausstellen kann. Es gibt diverse Tutorials im Web, welche zum Beispiel demonstrieren, wie Sie mittels OpenSSL eine solche CA erzeugen und entsprechende Zertifikate ausstellen können.

listener 8883
allow_anonymous false
password_file C:\Program Files\mosquitto\users.pwd
cafile C:\ca\certs\fullChain.pem
crlfile C:\ca\crl\intermediateCA.crl
certfile C:\Program Files\mosquitto\certs\mosquitto.pem
keyfile C:\Program Files\mosquitto\certs\mosquitto.key

Clients die versuchen eine Verbindung zu diesem Broker aufzubauen müssen ein gültiges Zertifikat besitzen, welches von derselben Certificate Authority ausgestellt wurde.

TLS-Verbindung mit Zertifikat, Benutzerauthentifizierung und ACL

Der folgende Inhalt der Konfigurationsdatei konfiguriert den Broker für eine gesicherte Verbindung mit TLS unter Verwendung eines Zertifikats. Zusätzlich wird eine Benutzerauthentifizierung unter Angabe der Benutzerdatenbankdatei konfiguriert, sowie eine Access Control List (ACL), welche verschiedene Zugriffsrechte für die Benutzer konfiguriert (siehe Beispiel oben).

Dieses Beispiel geht davon aus, dass Sie eine Certificate Authority (CA) besitzen, welche Serverzertifikate ausstellen kann. Es gibt diverse Tutorials im Web, welche zum Beispiel demonstrieren, wie Sie mittels OpenSSL eine solche CA erzeugen und entsprechende Zertifikate ausstellen können.

listener 8883
allow_anonymous false
use_identity_as_username true
password_file C:\Program Files\mosquitto\users.pwd
acl_file C:\Program Files\mosquitto\userAccess.acl
cafile C:\ca\certs\fullChain.pem
crlfile C:\ca\crl\intermediateCA.crl
certfile C:\Program Files\mosquitto\certs\mosquitto.pem
keyfile C:\Program Files\mosquitto\certs\mosquitto.key

Clients die versuchen eine Verbindung zu diesem Broker aufzubauen müssen ein gültiges Zertifikat besitzen, welches von derselben Certificate Authority ausgestellt wurde.

Aufbauend auf diesem Beispiel können Sie nun auch den Parameter use_identity_as_username verwenden, welcher bewirkt, dass der CommonName aus dem Clientzertifikat als Benutzername verwendet wird.