Node-RED

Node-RED MQTT TLS: Den Broker-Node sicher konfigurieren

Konfigurieren Sie den mqtt-broker-Node von Node-RED für eine verschlüsselte Verbindung auf Port 8883, mit Zertifikatsprüfung, Zugangsdaten, MQTT-5-Optionen und einem importierbaren Flow, dazu Lösungen für die Fehler, die Ihnen am wahrscheinlichsten begegnen.

Illustration zu Node-RED MQTT TLS mit einem Node-RED-Flow, der sich über eine verschlüsselte, mit einem Schloss gesicherte Verbindung auf Port 8883 mit einem MQTT-Broker verbindet
Probieren Sie es auf Ihrem eigenen MQTT-Broker ausHolen Sie sich im Free-Tarif einen privaten, verwalteten MQTT-Broker und starten Sie mit fertigen Codebeispielen.
Kostenlos testen Codebeispiele Keine Kreditkarte erforderlich

Die TLS-Konfiguration für MQTT in Node-RED dauert nur wenige Minuten, doch ein paar leicht übersehene Felder entscheiden darüber, ob Ihre Verbindung wirklich sicher oder nur verschlüsselt ist. Dieses Tutorial konfiguriert den mqtt-broker-Konfigurations-Node für Port 8883 mit Zertifikatsprüfung, Zugangsdaten und MQTT 5, liefert einen importierbaren Flow und erklärt die Fehler, die Ihnen dabei begegnen können.

Wie TLS in Node-RED funktioniert

Die MQTT-Nodes von Node-RED basieren auf MQTT.js und dem TLS-Stack von Node.js. Drei Bausteine sind beteiligt:

  • mqtt-broker-Konfigurations-Node: enthält Server, Port, Client ID, Protokollversion, Zugangsdaten und eine Checkbox „Use TLS“.
  • tls-config-Node: ein separater Konfigurations-Node mit TLS-Optionen wie CA-Zertifikat, Client-Zertifikat, Servername und der Einstellung, ob das Serverzertifikat geprüft wird.
  • mqtt-in- / mqtt-out-Nodes: verweisen auf den Broker-Node; sie haben keine eigenen TLS-Einstellungen.

Wenn der Broker ein Zertifikat einer öffentlich vertrauenswürdigen CA verwendet, vertraut Node.js ihm bereits über die mitgelieferte Mozilla-Root-Liste. Der ConnectMQ-Broker nutzt ein Let's-Encrypt-Zertifikat, Sie müssen also keine CA-Datei hochladen; Sie müssen nur TLS aktivieren und die Prüfung eingeschaltet lassen.

Wenn Node-RED noch nicht installiert ist, folgen Sie zuerst unserer Anleitung, um Node-RED zu installieren.

Port- und Protokollwahl

Option Feld „Server“ Port Wann verwenden
MQTT über TLS broker.connectmq.com 8883 Standard für Node-RED auf Servern, PCs und Gateways
Secure WebSocket wss://broker.connectmq.com:8084/mqtt 8084 Netzwerke, die 8883 blockieren, aber HTTPS-artigen Verkehr zulassen
Reines MQTT broker.connectmq.com 1883 Nur für lokale Tests auf dem öffentlichen Broker

Node-RED MQTT TLS Schritt für Schritt konfigurieren

Schritt 1: Den Broker-Node erstellen

Ziehen Sie einen mqtt in-Node auf den Arbeitsbereich und doppelklicken Sie darauf. Wählen Sie neben Server die Option Add new mqtt-broker und klicken Sie auf das Stiftsymbol.

Auf dem Tab Connection:

  1. Server: broker.connectmq.com
  2. Port: 8883
  3. Connect automatically: aktiviert
  4. Use TLS: aktiviert
  5. Protocol: MQTT V5 (oder V3.1.1, falls Ihre anderen Clients das brauchen)
  6. Client ID: die im Broker-Portal generierte Client ID (YOUR_CLIENT_ID). Lassen Sie sie bei einem privaten Broker nie leer und verwenden Sie sie nie in einem anderen Client, sonst trennen sich die beiden Verbindungen ständig gegenseitig.
  7. Keep Alive: 60 Sekunden sind ein sinnvoller Standard.

Schritt 2: Die TLS-Konfiguration hinzufügen

Wenn Sie Use TLS anhaken, erscheint ein Feld TLS Configuration. Wählen Sie Add new tls-config und klicken Sie auf das Stiftsymbol:

  • Certificate / Private Key: leer lassen. Diese Felder dienen der Authentifizierung per Client-Zertifikat (Mutual TLS), die ConnectMQ nicht verwendet; ConnectMQ authentifiziert mit Benutzername und Passwort über TLS.
  • CA Certificate: bei öffentlich vertrauenswürdigen Brokern leer lassen. Laden Sie Ihre CA-Datei nur für einen privaten Broker mit eigener CA hoch.
  • Verify server certificate: aktiviert. Das ist die wichtigste Checkbox auf der Seite.
  • Server Name: broker.connectmq.com. Node.js leitet SNI normalerweise aus dem Serverfeld ab, aber eine explizite Angabe vermeidet Überraschungen.
  • Name: eine aussagekräftige Bezeichnung wie Cloud broker TLS, damit Sie den Node in anderen Broker-Konfigurationen wiederverwenden können.

Klicken Sie auf Add, um zum Broker-Node zurückzukehren.

Schritt 3: Zugangsdaten eingeben

Geben Sie auf dem Tab Security des Broker-Nodes den Username und das Password aus dem Portal ein. Node-RED speichert diese getrennt vom Flow in flows_cred.json, und sie werden beim Exportieren von Flows nie mitgenommen. Setzen Sie credentialSecret in settings.js, damit diese Datei mit einem Schlüssel verschlüsselt wird, den Sie kontrollieren, und nicht mit einem automatisch erzeugten; andernfalls können Sie nach dem Umzug des Projekts auf einen anderen Rechner mit unlesbaren Zugangsdaten dastehen.

Schritt 4: Optionale MQTT-5-Einstellungen

Wenn MQTT V5 ausgewählt ist, erscheinen zusätzliche Optionen:

  • Session Expiry am Broker-Node: wie lange der Broker Ihre Subscriptions und eingereihten QoS-1/2-Nachrichten nach einer Trennung aufbewahrt. In Kombination mit einer festen Client ID und deaktiviertem Clean Start kann eine neu gestartete Node-RED-Instanz verpasste Nachrichten nachholen.
  • Tab Messages: Birth-, Close- und Will-Nachrichten. Eine Retained-Birth-Nachricht wie {"status":"online"} und eine Will-Nachricht {"status":"offline"} auf einem Status-Topic liefern Ihnen einen einfachen Gesundheitsindikator.
  • Optionen für mqtt in: Retain Handling, „no local“ (eigene Publikationen nicht empfangen) und „retain as published“.
  • Optionen für mqtt out: Message Expiry, Content Type, Response Topic, Correlation Data und User Properties.

Unser Überblick über die Funktionen von MQTT 5 erklärt jede dieser Optionen ausführlicher.

Schritt 5: Deployen und prüfen

Richten Sie den mqtt in-Node auf ein Topic wie factory/line1/# aus, verbinden Sie ihn mit einem debug-Node und klicken Sie auf Deploy. Innerhalb weniger Sekunden sollte der Node-Status auf ein grünes „connected“ wechseln. Zeigt er dauerhaft „connecting“ oder „disconnected“, springen Sie zum Abschnitt zur Fehlerbehebung weiter unten.

Importierbarer Beispiel-Flow

Importieren Sie diesen Flow (Menü, Import, einfügen), um in einem Schritt ein vollständiges TLS-Setup zu erhalten. Er nutzt den öffentlichen MQTT-Broker, der für Tests und Prototypen gedacht ist, über TLS mit anonymem Zugriff und funktioniert daher sofort. Ersetzen Sie 8b2f durch eigene zufällige Zeichen; für einen privaten Broker ändern Sie die Client ID und tragen Zugangsdaten auf dem Tab Security ein.

[
  {
    "id": "f1e2d3c4b5a69701",
    "type": "tls-config",
    "name": "ConnectMQ TLS",
    "cert": "",
    "key": "",
    "ca": "",
    "certname": "",
    "keyname": "",
    "caname": "",
    "servername": "broker.connectmq.com",
    "verifyservercert": true,
    "alpnprotocol": ""
  },
  {
    "id": "f1e2d3c4b5a69702",
    "type": "mqtt-broker",
    "name": "ConnectMQ over TLS",
    "broker": "broker.connectmq.com",
    "port": "8883",
    "tls": "f1e2d3c4b5a69701",
    "clientid": "nodered-tls-8b2f",
    "autoConnect": true,
    "usetls": true,
    "protocolVersion": "5",
    "keepalive": "60",
    "cleansession": true,
    "autoUnsubscribe": true,
    "sessionExpiry": "",
    "birthTopic": "connectmq/demo/8b2f/nodered/status",
    "birthQos": "1",
    "birthRetain": "true",
    "birthPayload": "{\"status\":\"online\"}",
    "willTopic": "connectmq/demo/8b2f/nodered/status",
    "willQos": "1",
    "willRetain": "true",
    "willPayload": "{\"status\":\"offline\"}"
  },
  {
    "id": "f1e2d3c4b5a69703",
    "type": "inject",
    "name": "Every 10 s",
    "props": [{ "p": "payload" }],
    "repeat": "10",
    "once": true,
    "onceDelay": "2",
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 140,
    "y": 80,
    "wires": [["f1e2d3c4b5a69704"]]
  },
  {
    "id": "f1e2d3c4b5a69704",
    "type": "change",
    "name": "Build reading",
    "rules": [
      { "t": "set", "p": "payload", "pt": "msg", "to": "{\"ts\": payload, \"value\": $round($random() * 100, 1)}", "tot": "jsonata" },
      { "t": "set", "p": "topic", "pt": "msg", "to": "connectmq/demo/8b2f/nodered/reading", "tot": "str" }
    ],
    "x": 330,
    "y": 80,
    "wires": [["f1e2d3c4b5a69705"]]
  },
  {
    "id": "f1e2d3c4b5a69705",
    "type": "mqtt out",
    "name": "Publish over TLS",
    "topic": "",
    "qos": "1",
    "retain": "false",
    "broker": "f1e2d3c4b5a69702",
    "x": 540,
    "y": 80,
    "wires": []
  },
  {
    "id": "f1e2d3c4b5a69706",
    "type": "mqtt in",
    "name": "Subscribe over TLS",
    "topic": "connectmq/demo/8b2f/nodered/#",
    "qos": "1",
    "datatype": "auto-detect",
    "broker": "f1e2d3c4b5a69702",
    "nl": false,
    "rap": true,
    "rh": 0,
    "inputs": 0,
    "x": 160,
    "y": 160,
    "wires": [["f1e2d3c4b5a69707"]]
  },
  {
    "id": "f1e2d3c4b5a69707",
    "type": "debug",
    "name": "Show",
    "active": true,
    "tosidebar": true,
    "console": false,
    "complete": "true",
    "targetType": "full",
    "x": 370,
    "y": 160,
    "wires": []
  }
]

Nach dem Deployen zeigt die Debug-Seitenleiste den Retained-Status „online“ und alle zehn Sekunden einen neuen Messwert, alles über TLS übertragen. Der öffentliche Bereich ist für alle sichtbar; nutzen Sie ihn also nur für Testdaten.

Stattdessen Secure WebSocket verwenden

Wenn Ihr Netzwerk Port 8883 blockiert, tragen Sie eine vollständige URL in das Feld Server ein: wss://broker.connectmq.com:8084/mqtt. Node-RED ignoriert dann das Portfeld und verbindet sich per Secure WebSocket auf 8084, wobei TLS mit derselben Zertifikatsprüfung abgewickelt wird. Das ist in Firmennetzwerken üblich; Hintergründe finden Sie unter MQTT über WebSocket.

Fehlerbehebung bei Node-RED MQTT TLS

  1. Hängt bei „connecting“: Port 8883 ist wahrscheinlich blockiert. Testen Sie vom Node-RED-Host aus mit openssl s_client -connect broker.connectmq.com:8883 -servername broker.connectmq.com und probieren Sie WSS auf 8084.
  2. „unable to get local issuer certificate“ im Log: Node.js kann die Kette nicht aufbauen. Meist verursacht durch TLS-Inspektion im Netzwerk oder durch eine hochgeladene CA-Datei, die die Standards durch die falsche Root ersetzt hat. Entfernen Sie die CA-Datei bei öffentlich vertrauenswürdigen Brokern.
  3. „Hostname/IP does not match certificate's altnames“: Sie haben eine IP-Adresse oder einen Alias eingetragen. Verwenden Sie den Hostnamen.
  4. „Connection refused: Not authorized“ oder ein Reason Code nach dem Verbinden: TLS funktioniert; Zugangsdaten oder Client ID sind falsch. Kopieren Sie sie erneut aus dem Portal.
  5. Verbindet sich und trennt sich alle paar Sekunden: Ein anderer Client verwendet dieselbe Client ID, oft eine zweite Node-RED-Instanz oder ein vergessenes Testskript.
  6. „Use TLS“ nicht angehakt, obwohl der Port 8883 ist: Die Verbindung hängt oder bricht ab, weil der Broker auf 8883 einen TLS-Handshake erwartet; „Use TLS“ muss also angehakt sein.

Der Leitfaden Node-RED MQTT verbindet sich nicht und MQTT-TLS-Handshake-Fehler beheben behandeln weitere Fälle. Deaktivieren Sie niemals Verify server certificate, um einen Fehler verschwinden zu lassen; das verdeckt die eigentliche Ursache und entfernt den Schutz vor gefälschten Brokern.

Den Rest Ihres Node-RED-Setups härten

Eine verschlüsselte Broker-Verbindung ist eine Schicht; läuft Node-RED als Edge-Gateway im Werksnetz, zählt sie zu den Grundanforderungen von IEC 62443 an die Kommunikation zwischen OT-Zone und Cloud. Schützen Sie zusätzlich den Editor mit adminAuth, stellen Sie ihn über HTTPS bereit, halten Sie Node-RED und seine Nodes aktuell und setzen Sie credentialSecret. Unser Leitfaden zum Absichern von Node-RED behandelt jeden Schritt, und das Node-RED-MQTT-Tutorial zeigt, wie Sie Topics und Payloads für größere Flows strukturieren.

Ihre Node-RED-Flows auf ConnectMQ betreiben

Node-RED ist ein MQTT-Client und braucht daher auf der anderen Seite einen zuverlässigen Broker. Ein verwalteter MQTT-Broker wie ConnectMQ bietet Ihnen TLS auf 8883, Secure WebSocket auf 8084, ein automatisch erneuertes Zertifikat und ein Portal mit Live-Topic-Explorer und Dashboard, um zu prüfen, was Ihre Flows publizieren. Registrieren Sie sich unter app.connectmq.com, wählen Sie den kostenlosen Serverless-Plan ohne Kreditkarte, erstellen Sie einen Broker und fügen Sie den generierten Benutzernamen, das Passwort und die Client ID in den Broker-Node ein. Um zuerst die Hosting-Modelle zu vergleichen, lesen Sie unseren Leitfaden zum Cloud-MQTT-Broker.

Häufig gestellte Fragen

Muss ich in Node-RED für ConnectMQ ein CA-Zertifikat hochladen?

Nein. Das Zertifikat wird von Let's Encrypt ausgestellt, dem Node.js bereits vertraut. Aktivieren Sie TLS, lassen Sie „Verify server certificate“ angehakt und das CA-Feld leer.

Sind meine MQTT-Zugangsdaten enthalten, wenn ich einen Flow exportiere?

Nein. Node-RED speichert Zugangsdaten getrennt in flows_cred.json und schließt sie von Exporten aus. Nach dem Import auf einer anderen Instanz müssen Sie sie daher erneut eingeben.

Können mehrere Node-RED-Instanzen eine Broker-Konfiguration teilen?

Sie können dieselben Einstellungen teilen, aber jede Instanz braucht ihre eigene eindeutige Client ID. Zwei Clients mit derselben ID trennen sich ständig gegenseitig.

Sollte ich im Broker-Node MQTT V5 oder V3.1.1 wählen?

Wählen Sie V5, sofern kein anderer Teil Ihres Systems 3.1.1 verlangt. V5 bringt Session Expiry, Message Expiry, User Properties und klarere Reason Codes, und ConnectMQ unterstützt beide Versionen.

Verwandte Artikel

Node-RED als OPC-UA-Client zu MQTT mit ISA-95-Topics

Mit node-red-contrib-opcua OPC-UA-Variablen auf einer SPS oder einem Simulationsserver abonnieren, Node-IDs auf MQTT-Topics im ISA-95-Stil abbilden und Werte mit Qualität und Zeitstempel publizieren.

9 Min. Lesezeit

Node-RED Diagramm-Verlauf: MQTT-Chartdaten über Neustarts hinweg behalten

Dashboard-Diagramme vergessen alles, wenn Node-RED neu startet. Dieser Leitfaden zeigt zwei zuverlässige Wege, den Node-RED Diagramm-Verlauf für MQTT-Daten zu behalten: dateibasierten Context-Speicher und eine kleine SQLite-Tabelle, beide beim Start in Dashboard 2.0 zurückgespielt.

8 Min. Lesezeit

Alle Artikel →

Ihr privater MQTT-Broker ist nur wenige Klicks entfernt

Konto anlegen, Broker-Zugangsdaten erhalten und das erste Gerät verbinden — ohne Server, die installiert, gepatcht oder skaliert werden müssen.