Zum Inhalt

HTTP-Weiterleitung und HSTS

Voraussetzung ist eine funktionierende HTTPS-Einrichtung mit geprüftem Zertifikatsvertrauen. Erst danach die Weiterleitung und HSTS einrichten.

HTTP auf HTTPS umleiten

Erst wenn der HTTPS-Zugriff funktioniert, ersetzt man den bisherigen Port-80-VirtualHost in /etc/apache2/sites-available/000-default.conf durch eine Weiterleitung. In dieser Übung wird die bisherige Default-Site ausschließlich für Nextcloud verwendet:

<VirtualHost *:80>
    ServerName nc.home.arpa
    Redirect permanent / https://nc.home.arpa/
</VirtualHost>

Danach apache2ctl configtest ausführen und bei Erfolg systemctl reload apache2. Falls der Server mehrere Websites betreibt, muss man die Weiterleitung stattdessen in dem tatsächlich für Nextcloud zuständigen HTTP-VirtualHost einrichten.

HSTS nach funktionierender Vertrauenseinrichtung aktivieren

Als Root das Apache-Modul headers aktivieren und die HTTPS-Konfiguration öffnen:

a2enmod headers
vi /etc/apache2/sites-available/nextcloud-ssl.conf

Innerhalb des vorhandenen HTTPS-VirtualHosts (<VirtualHost *:443>) vor dem abschließenden </VirtualHost> folgende Zeile hinzufügen. Ist der Header bereits konfiguriert, den bestehenden Eintrag anpassen:

Header always set Strict-Transport-Security "max-age=15552000"

Die Konfiguration prüfen:

apache2ctl configtest

Nur wenn Syntax OK erscheint, Apache neu laden:

systemctl reload apache2

HSTS wird nur über HTTPS berücksichtigt und setzt eine fehlerfreie, vom Client akzeptierte TLS-Verbindung voraus. Bei der selbstsignierten Übungseinrichtung ist dafür die ausdrückliche Vertrauenseinrichtung erforderlich. Die Laufzeit bedeutet, dass sich der Browser HTTPS für diesen Host langfristig merkt.

Mit eingerichtetem Zertifikatsvertrauen kann man den Header prüfen. Auf dem Server kann man das öffentliche Zertifikat für diesen Test ausdrücklich angeben:

curl --cacert /etc/ssl/certs/nextcloud.crt -I https://nc.home.arpa/

Die Ausgabe sollte Strict-Transport-Security: max-age=15552000 enthalten. Bei einem öffentlich vertrauenswürdigen Zertifikat genügt curl -I https://DEIN-NEXTCLOUD-HOSTNAME/ mit dem tatsächlichen Hostnamen. curl -k würde die Zertifikatsprüfung umgehen und ist deshalb kein Nachweis für korrektes Vertrauen. includeSubDomains wird nicht pauschal verwendet; es würde die HTTPS-Vorgabe auch auf alle Subdomains ausweiten.

HSTS-Warnung verstehen

Unter Administrationseinstellungen → Übersicht erscheint im Bereich HTTP-Header folgende Warnung:

Einige Header sind in Ihrer Instanz nicht richtig eingestellt - Der Strict-Transport-Security-HTTP-Header ist nicht gesetzt (er sollte mindestens 15552000 Sekunden betragen). Für erhöhte Sicherheit wird empfohlen, HSTS zu aktivieren.

HSTS muss im HTTPS-VirtualHost auf Port 443 gesetzt werden. Ein Header über HTTP aktiviert HSTS im Browser nicht. Die vollständige TLS-Konfiguration und ihre Prüfung stehen in Zertifikate und HTTPS. Dort wird durchgehend /etc/apache2/sites-available/nextcloud-ssl.conf verwendet.

Behebung: Die Schritte unter HSTS aktivieren ausführen. 15552000 Sekunden entsprechen 180 Tagen. Der Browser merkt sich für diesen Zeitraum, dass er den Host ausschließlich über HTTPS aufrufen soll.

Kontrolle: Den ausgelieferten Header mit curl wie oben beschrieben prüfen und anschließend die Administrationsübersicht neu laden. Die HSTS-Warnung sollte verschwunden sein. Bei einem vorgeschalteten Reverse Proxy muss der Header in der HTTPS-Antwort enthalten sein, die der Client tatsächlich erhält; daher den von den Benutzern verwendeten Hostnamen prüfen.

Quelle: Nextcloud-Dokumentation zu HSTS-Warnungen.