Node-RED wird häufig im Heimnetz eingesetzt, um Smart-Home-Geräte, Sensoren oder andere Dienste zu steuern. Auch dort ist eine verschlüsselte Verbindung sinnvoll, denn standardmäßig erfolgt der Zugriff über unverschlüsseltes HTTP.
Noch wichtiger wird HTTPS, wenn Node-RED von außen erreichbar ist. Dann sollte die Kommunikation zwischen Browser und Node-RED unbedingt verschlüsselt werden.
Ein Benutzername mit Passwort schützt zwar den Zugriff, verschlüsselt aber nicht die Verbindung. Genau dafür sorgt HTTPS.
In diesem Beitrag zeige ich dir, wie du Node-RED mit HTTPS absicherst.
Hinweis: Häufig wird noch der Begriff SSL-Zertifikat verwendet. Technisch korrekt ist heute jedoch TLS-Zertifikat, da moderne HTTPS-Verbindungen über TLS abgesichert werden. SSL gilt als veraltet. In diesem Beitrag verwende ich daher überwiegend den Begriff TLS-Zertifikat.
Warum HTTPS bei Node-RED wichtig ist
Bei einer normalen HTTP-Verbindung werden die Daten zwischen deinem Browser und Node-RED unverschlüsselt übertragen. Vereinfacht gesagt können Informationen auf dem Übertragungsweg mitgelesen werden, wenn jemand Zugriff auf das Netzwerk oder den Datenverkehr hat.
Bei HTTPS wird die Verbindung zusätzlich mit TLS verschlüsselt. Browser und Node-RED bauen dabei zunächst eine geschützte Verbindung auf. Erst danach werden die eigentlichen Daten übertragen.
Das betrifft nicht nur die Anmeldung am Node-RED-Editor, sondern auch Steuerbefehle, Formulardaten oder Inhalte aus einem Dashboard.
Vereinfacht sieht der Unterschied so aus:
Spätestens wenn Node-RED nicht nur lokal genutzt wird, sondern auch von außen erreichbar ist, sollte die Verbindung verschlüsselt sein.
Das SSL-/TLS-Zertifikat
Damit Node-RED eine HTTPS-Verbindung anbieten kann, wird ein SSL-/TLS-Zertifikat benötigt. Dieses Zertifikat weist gegenüber dem Browser die Identität des Servers nach und wird gleichzeitig für den Aufbau der verschlüsselten Verbindung verwendet.
Für das Zertifikat hast du zwei Möglichkeiten: entweder ein Zertifikat einer vertrauenswürdigen Zertifizierungsstelle oder ein selbst signiertes Zertifikat.
Ein selbstsigniertes Zertifikat verschlüsselt die Verbindung ebenfalls. Da dieses Zertifikat jedoch nicht von einer dem Browser bekannten Zertifizierungsstelle bestätigt wurde, erscheint beim Aufruf von Node-RED normalerweise eine Sicherheitswarnung. Der Browser kann in diesem Fall nicht überprüfen, ob das Zertifikat tatsächlich zu dem aufgerufenen Server gehört.
Bei einem Zertifikat einer vertrauenswürdigen Zertifizierungsstelle kann der Browser diese Prüfung durchführen. Die HTTPS-Verbindung wird dann ohne entsprechende Zertifikatswarnung aufgebaut.
Für ein ausschließlich im eigenen Heimnetz betriebenes Node-RED kann ein selbstsigniertes Zertifikat durchaus eine Möglichkeit sein. Soll Node-RED jedoch öffentlich über das Internet erreichbar sein, sollte ein Zertifikat einer vertrauenswürdigen Zertifizierungsstelle verwendet werden.
Eigenes TLS-Zertifikat für Node-RED erstellen
Für den Einsatz im eigenen Heimnetz kannst du zunächst ein selbstsigniertes TLS-Zertifikat erstellen. Dieses verschlüsselt die Verbindung zwischen Browser und Node-RED, wird vom Browser jedoch nicht automatisch als vertrauenswürdig eingestuft.
Am einfachsten lässt sich das Zertifikat mit OpenSSL erzeugen.
Wechsle zunächst in das Node-RED-Verzeichnis:
cd ~/.node-red
und erstelle dort ein Verzeichnis und wechsle in dieses
mkdir certs cd certs
Anschließend erzeugst du einen privaten Schlüssel und das dazugehörige Zertifikat:
openssl req -x509 -newkey rsa:4096 \ -keyout privkey.pem \ -out cert.pem \ -sha256 \ -days 365 \ -nodes
Während der Erstellung fragt OpenSSL einige Angaben ab. Besonders wichtig ist der Eintrag Common Name (CN). Hier kannst du beispielsweise den Hostnamen deines Node-RED-Servers eintragen.
Nach dem Erstellen befinden sich zwei neue Dateien im Verzeichnis:
- privkey.pem – enthält den privaten Schlüssel und sollte nicht weitergegeben werden
- cert.pem – enthält das eigentliche TLS-Zertifikat
Mit diesen beiden Dateien kann HTTPS anschließend in Node-RED aktiviert werden.
TLS-Zertifikate in Docker einbinden
Meine Node-RED-Installation verwendet aktuell ein Docker-Volume für die persistenten Daten:
services:
node-red:
image: nodered/node-red
container_name: nodered
ports:
- "1880:1880"
environment:
- npm_config_python=/usr/bin/python3
volumes:
- node_red_data:/data
restart: unless-stopped
volumes:
node_red_data:
Für das TLS-Zertifikat lege ich auf dem Docker-Host zusätzlich ein Verzeichnis certs an:
Dieses Verzeichnis wird anschließend zusätzlich in den Container eingebunden:
services:
node-red:
image: nodered/node-red
container_name: nodered
ports:
- "1880:1880"
environment:
- npm_config_python=/usr/bin/python3
volumes:
- node_red_data:/data
- ./certs:/certs:ro
restart: unless-stopped
volumes:
node_red_data:
Mit
- ./certs:/certs:ro
wird das lokale Verzeichnis certs im Container unter /certs bereitgestellt. Der Zusatz :ro bindet das Verzeichnis nur lesbar ein.
Node-RED kann anschließend auf folgende Dateien zugreifen:
- /certs/cert.pem
- /certs/privkey.pem
Diese Pfade verwenden wir anschließend in der settings.js, um HTTPS zu aktivieren.
Docker-Container nach Änderung neu erstellen
Nachdem das Zertifikatsverzeichnis in der docker-compose.yml ergänzt wurde, reicht ein einfacher Neustart des bestehenden Containers nicht aus. Docker übernimmt Änderungen an Volumes erst, wenn der Container neu erstellt wird.
Dazu genügt:
docker compose up -d --force-recreate
Ein neues Node-RED-Image muss dabei nicht gebaut werden. Es wird lediglich der Container mit der aktualisierten Konfiguration neu erstellt.
Anschließend kannst du prüfen, ob die Zertifikate im Container verfügbar sind:
docker exec -it nodered ls -l /certs
Dort sollten nun cert.pem und privkey.pem angezeigt werden.
Die richtige settings.js finden und HTTPS aktivieren
Damit Node-RED das TLS-Zertifikat verwendet, muss die Datei settings.js angepasst werden. Gerade bei einer Docker-Installation ist wichtig, wirklich die Datei zu bearbeiten, die vom laufenden Node-RED verwendet wird.
Welche settings.js aktiv ist, zeigt Node-RED beim Start in den Logs an:
docker logs nodered --tail 50
Dort findest du eine Zeile wie:
Settings file : /data/settings.js
Damit ist klar: Im Container verwendet Node-RED die Datei
/data/settings.js
Da /data bei meiner Installation über ein Docker-Volume eingebunden ist, kann ich zusätzlich prüfen, wo dieses Volume auf dem Host liegt:
docker inspect nodered --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}'
Die Ausgabe kann beispielsweise so aussehen:
/var/lib/docker/volumes/stdr_node_red_data/_data -> /data /mnt/c/Users/stdr/node-red/certs -> /certs
Damit befindet sich die tatsächlich verwendete settings.js auf dem Docker-Host unter:
/var/lib/docker/volumes/stdr_node_red_data/_data/settings.js
In dieser Datei wird anschließend der HTTPS-Bereich aktiviert:
https: {
key: require("fs").readFileSync("/certs/privkey.pem"),
cert: require("fs").readFileSync("/certs/cert.pem")
},
Wichtig ist, dass der Block nicht mehr mit // auskommentiert ist.


Nach dem Speichern genügt ein Neustart des Containers:
docker restart nodered
Anschließend kannst du erneut die Logs prüfen. Wenn die Konfiguration korrekt geladen wurde, erscheint:
Server now running at https://127.0.0.1:1880/
Damit ist HTTPS in Node-RED aktiv.
Hinweis bei selbstsignierten TLS-Zertifikaten
Nach der Aktivierung von HTTPS ist die Node-RED-Oberfläche über eine Adresse wie
https://localhost:1880
erreichbar. Wird dabei ein selbstsigniertes Zertifikat verwendet, zeigt der Browser allerdings zunächst eine Sicherheitswarnung an.
Typisch ist beispielsweise die Meldung:
NET::ERR_CERT_AUTHORITY_INVALID
Der Grund dafür ist, dass das Zertifikat nicht von einer öffentlich vertrauenswürdigen Zertifizierungsstelle ausgestellt wurde. Der Browser kann deshalb nicht automatisch bestätigen, dass das verwendete Zertifikat tatsächlich vertrauenswürdig ist.
Die Verbindung selbst wird dennoch über HTTPS verschlüsselt.
Gerade in einer lokalen Entwicklungs- oder Testumgebung ist diese Warnung daher zunächst normal. Über „Erweitert“ kann die Seite in der Regel trotzdem geöffnet werden. Je nach Browser erscheint anschließend beispielsweise die Option:
Weiter zu localhost (unsicher)
Wichtig ist dabei die Unterscheidung: Die Bezeichnung „unsicher“ bedeutet in diesem Fall nicht, dass keine Verschlüsselung verwendet wird. Sie weist lediglich darauf hin, dass der Browser dem verwendeten Zertifikat beziehungsweise dessen Aussteller nicht vertraut.
Für lokale Tests oder Systeme im eigenen Netzwerk kann ein selbstsigniertes Zertifikat ausreichend sein. Soll Node-RED dagegen öffentlich erreichbar sein, sollte ein Zertifikat einer vertrauenswürdigen Zertifizierungsstelle verwendet werden.
Fazit
Damit läuft mein Node-RED nun nicht mehr über eine unverschlüsselte HTTP-Verbindung, sondern über HTTPS. Der eigentliche Aufwand hält sich dabei in Grenzen: Zertifikat erstellen, die Dateien in den Docker-Container einbinden und anschließend den HTTPS-Bereich in der richtigen settings.js aktivieren.
Gerade der letzte Punkt war bei meiner Docker-Installation wichtig. Entscheidend ist nicht irgendeine settings.js auf dem Host, sondern die Datei, die vom laufenden Node-RED tatsächlich verwendet wird.
Beim selbst signierten Zertifikat bleibt allerdings die Warnung des Browsers bestehen. Die Verbindung ist trotzdem verschlüsselt – der Browser kann lediglich nicht bestätigen, dass das Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle stammt.
Für mein lokales Setup reicht mir diese Variante zunächst aus. Soll Node-RED später über eine Domain oder dauerhaft aus dem Internet erreichbar sein, würde ich stattdessen ein offiziell signiertes Zertifikat verwenden.
Wie sich beispielsweise ein kostenloses Zertifikat von Let’s Encrypt einrichten lässt, schaue ich mir in einem separaten Beitrag an.
Letzte Aktualisierung am: 17. Oktober 2026







