Die einschlägigen Foren sind voller (Halb-)Wissen zu TLS-Verbindungen und Zertifikaten. Trotzdem (oder gerade deswegen ?) habe ich Tage damit verbracht, eine verschlüsselte lokale Kommunikation mit smartVISU funktionsfähig aufzusetzen. "Lokal" bedeutet hier, dass ein selbstsigniertes Zertifikat benötigt wird und eben kein z.B. von Letsencrypt signiertes Zertifikat für eine DynDNS vorliegt. Mehrfach war ich kurz davor, aufzugeben
.
Um Euch dieses Schicksal zu ersparen, hier mal eine kleine Doku für den Apache Webserver. Wer möchte, kann dies gerne für nginx ergänzen.
Gruß
Wolfram
.Um Euch dieses Schicksal zu ersparen, hier mal eine kleine Doku für den Apache Webserver. Wer möchte, kann dies gerne für nginx ergänzen.
- Selbstsigniertes Zertifikat erstellen:
Dies ist hier gut beschrieben. Für den "Common Name" geben wir anstelle "localhost" die IP-Adresse des Webservers (i.d.R. der Raspberry, auf dem smartVISU läuft) an.
. - Apache konfigurieren:
Wie im oben verlinkten Blog beschrieben, wird das ssl-Modul aktiviert, und die ports.conf ergänzt. Die Datei für den virtual host benennen wir abweichend "html-ssl.conf". Diese muss folgenden korrigierten Code enthalten:
Die Datei muss nun noch aktiviert werden:Code:<virtualhost *:443> DocumentRoot /var/www/html ErrorLog /var/www/html/log/error.log CustomLog /var/www/html/log/access.log combined SSLEngine on SSLCertificateKeyFile /etc/apache2/ssl/sslcert.key SSLCertificateFile /etc/apache2/ssl/sslcert.crt <directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </directory> </virtualhost>
Danach wird Apache2 neu gestartet:Code:sudo a2ensite html-ssl
Damit ist smartVISU jetzt per https erreichbar. Beim Aufruf im Browser erscheint ein Sicherheitshinweis, von dem aus man über "Erweitert" eine Ausnahme für das selbstsignierte Zertifikat festlegen kann. Allerdings erhält die Visu noch keine Daten, weil der Browser jetzt keine unverschlüsselte Websocket-Verbindung zu smarthomeNG mehr akzeptiert (Security Downgrade ist verboten).Code:sudo systemctl restart apache2
. - Websocket Protokoll wss:// aktivieren:
Die beiden Dateien "sslcert.key" und "sslcert.crt" aus Punkt 1 werden in das Verzeichnis "/usr/local/smarthome/etc" kopiert. Von der .crt-Datei muss die Endung in .cer geändert werden. Dann wird im gleichen Verzeichnis die module.yaml editiert, um das Websocket-Modul zu konfigurieren:
Alternativ kann man die Dateien auch in "shng.key" und "shng.cer" umbenennen und damit die default-Namen des Websocket-Moduls nutzen.Code:websocket: module_name: websocket # ip: 0.0.0.0 port: 2424 tls_port: 2425 use_tls: true tls_cert: sslcert.cer tls_key: sslcert.key
In der Konfiguration der smartVISU ist bei smarthomeNG vor die IP-Adresse "wss://" zu setzen (Beispiel: "wss://192.168.2.12") und der TLS-Port des Websocket-Moduls einzugeben (hier "2425").
Ab hier bekommt der Edge-Browser bereits Daten vom Websocket (Chrome vermultlich auch), Firefox weigert sich aber hartnäckig, das selbstsignierte Zertifikat auch für den Websocket zu akzeptieren. Hierzu gibt man in der Browser-Zeile im Fall des Beispiels
ein und erhält dann wieder den Sicherheitshinweis, in dem man die Ausnahme bestätigt. Nun läuft die Visu vollständig in Firefox. In Safari reicht das offenbar noch nicht aus. Maßnahmen reiche ich nach.Code:https://192.168.2.12:2425
.
Gruß
Wolfram



In Windows ist das nicht so. Habt ihr das auch beobachtet?
Kommentar