MQTT Sicherheit

Drei Konzepte sind grundlegend für die MQTT -Sicherheit: Identität, Authentifizierung und Berechtigung. Identität bezieht sich auf die Benennung des Clients, der autorisiert und dem Berechtigung erteilt wird. Authentifizierung bezieht sich auf die Überprüfung der Identität des Clients und Autorisierung bezieht sich auf die Verwaltung der Berechtigungen, die dem Client erteilt werden.

Sicherheitsbeispiele

Identität

Geben Sie einen MQTT -Client anhand seiner Client-ID, Benutzer-ID oder des öffentlichen digitalen Zertifikats an. Eines dieser Attribute definiert die Clientidentität. Ein MQTT -Server authentifiziert das vom Client gesendete Zertifikat mit dem SSL-Protokoll oder die Clientidentität mit einem vom Client festgelegten Kennwort. Der Server steuert, auf welche Ressourcen der Client auf Basis der Clientidentität zugreifen kann.

Der MQTT -Server identifiziert sich selbst gegenüber dem Client mit seiner IP-Adresse und seinem digitalen Zertifikat. Der MQTT -Client verwendet das SSL-Protokoll, um das vom Server gesendete Zertifikat zu authentifizieren. In einigen Fällen verwendet er den DNS-Namen des Servers, um zu verifizieren, dass der Server, der ihm das Zertifikat gesendet hat, als der Zertifikatseigner registriert ist.

Sie haben folgende Möglichkeiten, die Identität des Clients festzulegen:

Client-ID
Die Klasse MqttClient (MQTTClient_create bzw. MQTTAsync_create in C) legt die Client-ID fest. Rufen Sie den Klassenkonstruktor auf, um die Client-ID als Parameter anzugeben oder eine nach dem Zufallsprinzip generierte Client-ID zurückzugeben. Die Client-ID muss unter allen Clients, die sich mit dem Server verbinden, eindeutig sein, und sie darf nicht identisch mit dem Namen des Warteschlangenmanagers auf dem Server sein. Alle Clients müssen eine Client-ID haben, auch wenn sie nicht für die Identitätsprüfung verwendet wird. Siehe Client-ID.
Benutzer-ID
Die MqttClient-Klasse (MQTTClient_create oder MQTTAsync_create in C) legt die Client-Benutzer-ID als Attribut von MqttConnectOptions (MqttClient_ConnectOptions in C) fest. Die Benutzer-ID muss für den Client nicht eindeutig sein.
Digitales Clientzertifikat
Das digitale Clientzertifikat wird im Client-Keystore gespeichert. Die Speicherposition des Keystores ist vom Client abhängig:
  • Java

    Legen Sie die Position und die Eigenschaften des Client-Keystores fest, indem Sie die Methode setSSLProperties von MqttConnectOptions aufrufen und die Keystore-Eigenschaften übergeben. Siehe SSL-Änderungen an Example.java. Das Tool keytool verwaltet Java-Schlüssel und -Keystores.

  • C

    MQTTClient_create oder MQTTAsync_create legt die Keystore-Eigenschaften als Attribute von MQTTClient_SSLOptions ssl_optsfest. Das Tool openSSL erstellt und verwaltet die Schlüssel und Keystores, auf die der MQTT -Client für C zugreift.

  • Android

    Verwalten Sie einen Android -Einheitenkeystore über das Menü Einstellungen > Sicherheit . Laden Sie neue Zertifikate von der SD-Karte.

Legen Sie die Identität des Servers fest, indem Sie seinen privaten Schlüssel im Server-Keystore speichern:

IBM WebSphere MQ
Der MQTT -Server-Keystore ist ein Attribut des Telemetriekanals, mit dem der Client verbunden ist.

Legen Sie die Keystore-Position und die Attribute mit IBM WebSphere MQ Exploreroder mit dem Befehl DEFINE CHANNEL fest (siehe DEFINE CHANNEL (MQTT)). Ein Keystore kann von mehreren Kanälen gemeinsam genutzt werden.

Authentifizierung

Ein MQTT -Client kann den MQTT -Server authentifizieren, zu dem er eine Verbindung herstellt, und der Server kann den Client authentifizieren, der eine Verbindung zu ihm herstellt.

Ein Client authentifiziert einen Server mithilfe des SSL-Protokolls. Ein MQTT -Server authentifiziert einen Client mit dem SSL-Protokoll und/oder mit einem Kennwort.

Wenn der Client den Server authentifiziert, aber der Server nicht den Client, wird der Client häufig als anonymer Client bezeichnet. Es ist üblich, eine anonyme Clientverbindung über SSL herzustellen und den Client dann mithilfe eines Kennworts, das von der SSL-Sitzung verschlüsselt wird, zu authentifizieren. Aufgrund der problematischen Zertifikatsverteilung und -verwaltung wird ein Client häufiger mithilfe eines Kennworts als eines Clientzertifikats authentifiziert. Clientzertifikate werden vorwiegend in hochwertigen Geräten wie Geldausgabeautomaten und Systemen für bargeldlose Bezahlung mit Chipkarte und Geheimzahl sowie in kundenspezifischen Geräten wie intelligenten Stromzählern verwendet.

Serverauthentifizierung durch einen Client
Ein MQTT -Client überprüft, ob er mit dem richtigen Server verbunden ist, indem er das Serverzertifikat mit dem SSL-Protokoll authentifiziert. Diese Form der Verifizierung ist Ihnen vertraut, wenn Sie über das HTTPS-Protokoll auf eine Website zugreifen.

Der Server sendet sein öffentliches Zertifikat, das von einer Zertifizierungsstelle signiert wurde, an den Client. Der Client prüft mithilfe des öffentlichen Schlüssels der Zertifizierungsstelle die Signatur der Zertifizierungsstelle auf dem Serverzertifikat. Außerdem überprüft er, ob das Zertifikat aktuell ist. Anhand dieser Prüfungen wird festgestellt, ob das Zertifikat gültig ist.

Zertifikate einer Zertifizierungsstelle, oft auch Stammzertifikate genannt, werden im Client-Truststore gespeichert:
  • Java

    Rufen Sie die Methode setSSLProperties von MqttConnectOptions auf und übergeben Sie die Truststore-Eigenschaften, um die Speicherposition und Eigenschaften des Client-Truststores festzulegen. Siehe SSL-Änderungen an Example.java. Verwalten Sie Zertifikate und Truststores mit dem Tool keytool.

  • C

    MQTTClient_create oder MQTTAsync_create legen Sie die Truststore-Eigenschaften als Attribute von MQTTClient_SSLOptions ssl_optsfest. Verwalten Sie Zertifikate und Truststores mit dem Tool openSSL.

  • Android

    Verwalten Sie einen Truststore für Android -Geräte über das Menü Einstellungen > Sicherheit . Laden Sie neue Stammzertifikate von der SD-Karte.

Clientauthentifizierung durch einen Server

Ein MQTT -Server überprüft, ob er mit dem richtigen Client verbunden ist, indem er das Clientzertifikat mit dem SSL-Protokoll oder die Clientidentität mit einem Kennwort authentifiziert.

Er authentifiziert den Client mit dem Kennwort, das vom Client an den Server in einem Header MQTT protocol gesendet wird. Der Server kann wählen, ob er die Client-ID, Benutzer-ID oder das Zertifikat mithilfe des Kennworts authentifiziert. Dies ist vom Server abhängig. Üblicherweise authentifiziert der Server die Benutzer-ID. Überprüfen Sie Kennwörter über eine SSL-Verbindung, die durch eine Verifizierung des Servers gesichert ist, um zu verhindern, dass Kennwörter als Klartext gesendet werden.
  • IBM WebSphere MQ

    IBM WebSphere MQ authentifiziert ein Clientzertifikat mit dem SSL-Protokoll. Speichern Sie Stammzertifikate im IBM WebSphere MQ Telemetry -Keystore. Ein Clientzertifikat kann nur im Rahmen einer gegenseitigen SSL-Authentifizierung authentifiziert werden. Das heißt, Sie müssen dem Client das öffentliche Serverzertifikat und dem Server das öffentliche Clientzertifikat zur Verfügung stellen.

    IBM WebSphere MQ Telemetry uses the same store for both its own private and public certificate, and other public certificates, such as the root certificates provided by certificate authorities.

    Legen Sie die Keystore-Position und die Attribute mit IBM WebSphere MQ Exploreroder mit dem Befehl DEFINE CHANNEL fest (siehe DEFINE CHANNEL (MQTT)). Ein Keystore kann von mehreren Kanälen gemeinsam genutzt werden.

    IBM WebSphere MQ authentifiziert die Clientbenutzer-ID oder die Client-ID, indem der Java -Authentifizierungs-und Berechtigungsservice (JAAS) aufgerufen wird.

    Konfigurieren Sie JAAS in einer MQXRConfig-Konfigurationszeilengruppe, die in der Datei jaas.config gespeichert ist. Die Datei wird im Verzeichnis qmgrs\QmgrName\mqxr im Datenpfad IBM WebSphere MQ gespeichert.

    Überprüfen Sie die Authentizität des Clients, indem Sie eine login-Methode für das Modul JAASLoginModule schreiben. Siehe Konfiguration des Telemetriekanals JAAS.

    IBM WebSphere MQ Telemetry übergibt die Methode JAASLoginModule.login an die folgenden Parameter:
    • Benutzer-ID
    • Kennwort
    • Client-ID
    • Netzwerk-ID
    • Kanalname
    • ValidPrompts

Autorisierung

Die Berechtigung ist nicht Teil von MQTT protocol. Sie wird von MQTT -Servern bereitgestellt. Was autorisiert wird, hängt davon ab, was der Server tut. MQTT -Server sind Publish/Subscribe-Broker und nützliche MQTT -Berechtigungsregeln steuern, welche Clients eine Verbindung zum Server herstellen können und zu welchen Themen ein Client veröffentlichen oder subskribieren kann. Wenn ein MQTT -Client den Server verwalten kann, steuern weitere Berechtigungsregeln, welche Clients verschiedene Aspekte des Servers verwalten können.

Die Anzahl der möglichen Clients ist so groß, dass es nicht möglich ist, jeden Client separat zu autorisieren. Ein MQTT -Server kann Clients nach Profilen oder Gruppen gruppieren.

Die Identität eines Clients ist aus Sicht des Zugriffs und der Berechtigung nicht eindeutig für einen MQTT -Client. Verwechseln Sie die Identität eines Clients nicht mit der Client-ID. Sie können identisch sein, unterscheiden sich aber in der Regel. Beispielsweise haben Sie wahrscheinlich einen Benutzernamen, der für mehrere Services gültig ist, wobei einige dieser Services im Rahmen des Single Sign-on zusammenarbeiten. Ein auf Unternehmen abgestimmtes MQTT -Server ruft wahrscheinlich einen Berechtigungsservice auf, der allgemeine Identitäten und Berechtigungen für verschiedene Anwendungen bietet.

IBM WebSphere MQ

IBM WebSphere MQ verfügt über einen Plug-in-Berechtigungsservice. Der Standardberechtigungsservice, der unter Windows und Linux® bereitgestellt wird, ist der Objektberechtigungsmanager (OAM). Siehe Zugriff auf Objekte mithilfe des OAM auf UNIX-, Linux -und Windows-Systemen steuern. Er ordnet Betriebssystembenutzer-IDs und -gruppen Operationen für IBM WebSphere MQ -Objekte wie Themen und Warteschlangen zu.

Sie können einen Telemetriekanal für den Zugriff auf IBM WebSphere MQ mit einer festen Benutzer-ID konfigurieren. So ist auch der Beispielkanal konfiguriert. Sie können auch mit der vom MQTT -Client festgelegten Benutzer-ID auf IBM WebSphere MQ zugreifen. Unter MQTT-Clients für den Zugriff auf WebSphere MQ -Objekte berechtigen wird beschrieben, wie IBM WebSphere MQ Telemetry für eine einfache, mittlere und differenzierte Clientzugriffssteuerung eingerichtet wird.