TLS und HTTPS
Diese Seite ist für Systemadministratoren, die Exponential-Websites über HTTPS ausliefern, und für Support-Mitarbeitende, die den üblichen
Symptomen begegnen: Links mit http:// hinter einem TLS-Proxy, Schleifen bei der Anmeldung oder eine Warnung des Browsers. Sie sagt, wer
TLS beenden kann, welche Einstellungen von Exponential zu dieser Wahl passen müssen und wie Sie das Ergebnis prüfen. Die Referenz ist
13.9 Sicherheitsheader und HTTPS und
13.10 Hinter einem Proxy.
Inhalt
- Wer TLS beendet
- HTTPS überall, Schritt für Schritt
- HSTS
- Sichere Cookies
- Proxys, die TLS beenden
- Zertifikate überwachen
- Prüfungen
- Was schiefgeht
- Checkliste
Wer TLS beendet
| Einrichtung | TLS wird beendet von | Zertifikat verwaltet von |
|---|---|---|
| Apache mit PHP-FPM | Apache mod_ssl | dem Panel oder einem ACME-Client auf dem Server |
| nginx mit PHP-FPM | nginx ssl | dem Panel oder einem ACME-Client auf dem Server |
| Velocity direkt vor den Besuchern | Velocity selbst, mit HTTP/2 | Velocity: ein Zertifikat, das Sie ihm geben, ein selbstsignierter Ersatz oder ACME (Modus letsencrypt) |
| Velocity oder PHP-FPM hinter einem Proxy, Load Balancer oder CDN | dem Proxy | dem Betreiber des Proxys |
Velocity braucht für HTTPS kein mod_ssl, kein stunnel und keinen Proxy; es prüft ein Zertifikatspaar, bevor es es nutzt, tauscht ein
erneuertes Paar innerhalb von watchInterval (60 Sekunden) im Betrieb aus und liefert lieber einen selbstsignierten Ersatz als ein
kaputtes Paar aus (8.3.9). Details für Hoster:
HTTPS-Zertifikate in Velocity; Zertifikate in Panels:
TLS-Zertifikate in Panels.
HTTPS überall, Schritt für Schritt
- Liefern Sie jeden Namen der Website über HTTPS aus, einschließlich
www.und des Hostnamens der Administration. - Leiten Sie einfaches HTTP auf HTTPS um, in Apache oder nginx (Abschnitte 8.5 und 8.6 von
Kapitel 8). Velocity lauscht auf beiden Ports und hat keine Einstellung, die einen auf den
anderen umleitet; setzen Sie die Umleitung davor, oder schließen Sie den einfachen Port nach außen.
Die eigenen
[SSLZoneSettings]von Exponential insite.inikönnen einzelne Teilbäume umschalten, für eine Website, die noch nicht nur HTTPS sein kann. - Lassen Sie die Website HTTPS-Adressen bauen:
site.ini [SiteSettings] SiteURLund die URLs der Siteaccesses. - Setzen Sie
[Session] CookieSecure=true(siehe Sichere Cookies). - Schalten Sie HSTS ein, zuerst kurz (siehe HSTS).
- Überwachen Sie den Ablauf von Zertifikaten (siehe Zertifikate überwachen).
HSTS
Ein Browser, der Strict-Transport-Security gesehen hat, verweigert für den ganzen Zeitraum einfaches HTTP zu diesem Host, selbst wenn
Sie den Wert später senken. Beginnen Sie kurz, erhöhen Sie auf ein Jahr erst, wenn jeder Name dauerhaft über HTTPS ausgeliefert wird.
| Wer ihn sendet | Einstellung | Ausgeliefert |
|---|---|---|
| Velocity, bei jeder HTTPS-Antwort | velocity.ini [HTTPSSettings] HSTSMaxAge, HSTSIncludeSubDomains, HSTSPreload | 300, disabled, disabled |
| der Kernel, unter Apache oder nginx | site.ini [HTTPHeaderSettings] SecurityHeaders[Strict-Transport-Security] | leer (aus); nur über HTTPS gesendet |
# settings/override/site.ini.append.php, once every name is HTTPS for good
[HTTPHeaderSettings]
SecurityHeaders[Strict-Transport-Security]=max-age=31536000Preload braucht HSTSIncludeSubDomains und mindestens ein Jahr
(8.3.9, Strict-Transport-Security).
Warnung
includeSubDomainsgilt für jede Subdomain des Namens, auch für solche, die andere Teams oder andere Kunden über einfaches HTTP betreiben. Vereinbaren Sie es mit dem Inhaber der Domain, bevor Sie es einschalten.
Sichere Cookies
settings/site.ini [Session], mit den Standards, die gelten, solange die Schlüssel nicht gesetzt sind
(13.7):
| Schlüssel | Standard | Für eine Website nur mit HTTPS |
|---|---|---|
CookieSecure | auto: Secure, wenn die Anfrage selbst über HTTPS kam | true |
CookieHttponly | true | beibehalten |
CookieSameSite | Lax | beibehalten; None nur mit Secure |
# settings/override/site.ini.append.php
[Session]
CookieSecure=trueCookieSecure=true stellt sicher, dass das Sitzungscookie nie über einfaches HTTP gesendet wird, selbst bei einer Anfrage, die
fälschlich ohne TLS ankommt.
Proxys, die TLS beenden
Wenn ein Proxy TLS beendet, sieht PHP eine einfache HTTP-Anfrage und erfährt von HTTPS nur aus Headern wie X-Forwarded-Proto. Jeder
Besucher kann diese Header auch senden, deshalb glaubt der Kernel ihnen seit 6.0.15 nur, wenn die Verbindung von einer Adresse in
site.ini [HTTPHeaderSettings] TrustedProxies[] kommt. Der Standard sind die Loopback-Adressen 127.0.0.1 und ::1.
| Einrichtung | Was zu tun ist |
|---|---|
| Kein Proxy | nichts; weitergeleitete Header, die ein Besucher sendet, werden ignoriert |
| Ein Proxy auf derselben Maschine, der die Header setzt | nichts; lassen Sie den Proxy X-Forwarded-Proto selbst setzen |
| Ein Proxy, Load Balancer oder CDN auf einer anderen Adresse | führen Sie seine Adressen oder Bereiche auf, und nur diese; schirmen Sie den Anwendungsserver mit der Firewall ab, damit er nicht an ihnen vorbei erreichbar ist |
Ein Frontend, das REMOTE_ADDR umschreibt (mod_remoteip, nginx realip, wie bei nginx vor Apache in Plesk) | nichts; ClientIpByCustomHTTPHeader bleibt false |
# settings/override/site.ini.append.php: a load balancer on a private subnet
[HTTPHeaderSettings]
TrustedProxies[]
TrustedProxies[]=10.0.0.0/16
ClientIpByCustomHTTPHeader=X-Forwarded-ForDie Adresse des Besuchers wird von rechts aus X-Forwarded-For gelesen, sodass ein gefälschter Eintrag weiter links nie genutzt wird.
Einträge sind Adressen oder Bereiche; Hostnamen werden nicht aufgelöst, und ein Kommentar in derselben Zeile macht den Eintrag ungültig.
Unter Velocity führen Sie die Proxys in Velocitys eigenem Q.webserver.proxy.trusted auf, in einem Snippet unter
/etc/vc/conf-available/, eingeschaltet mit exp:velocity conf enable <name>; Velocity gibt dann den Besucher als REMOTE_ADDR weiter
und setzt $_SERVER['HTTPS'] selbst (ab Engine-Release 0.0.4.44 nur für vertrauenswürdige Gegenstellen). Details:
13.10, Unter Velocity und
Weitergeleiteten Headern wird nur von konfigurierten Proxys vertraut.
Zertifikate überwachen
- Velocity:
php bin/php/console exp:velocity ssl show --json --allow-root-user, und beobachten SiedaysLeft. Ein CA-Zertifikat mit 90 Tagen wird erneuert, wenn etwa 30 Tage übrig sind; weniger als 14 übrige Tage bedeuten also, dass die Erneuerung seit mehr als zwei Wochen scheitert (8.3.9, Zertifikate untersuchen). - Apache oder nginx: der Timer Ihres ACME-Clients oder die Erneuerung des Panels, plus eine externe Prüfung des Ablaufs.
- Halten Sie NTP am Laufen: Zertifikate werden gegen die Systemuhr geprüft.
Wenn es schon passiert ist: Ablauf von Zertifikaten.
Prüfungen
# headers on a page
curl -sI https://example.com/ | grep -i -E 'strict-transport|x-content-type|x-frame|referrer|permissions|content-security'
# the session cookie: expect Secure; HttpOnly; SameSite=Lax
curl -sI https://example.com/user/login | grep -i set-cookie
# directly, no proxy: a visitor's own header must change nothing (the redirect stays http)
curl -s -o /dev/null -w '%{redirect_url}\n' -H 'X-Forwarded-Proto: https' http://example.com/user/logoutWas schiefgeht
| Symptom | Ursache |
|---|---|
Absolute URLs und Umleitungen sagen http:// hinter einem HTTPS-Proxy; eine Umleitungsschleife auf der Anmeldeseite | der Proxy steht nicht in TrustedProxies[] (oder nicht in der Liste von Velocity), oder er sendet kein X-Forwarded-Proto |
Angemeldete Benutzer werden mit CookieSecure=true auf jeder Seite abgemeldet | dasselbe: Der Kernel hält die Anfrage für einfaches HTTP |
| Jeder Besucher hat im Audit und bei der Sperre die Adresse des Proxys | ClientIpByCustomHTTPHeader nicht gesetzt, oder dem Proxy wird nicht vertraut |
| Ein Besucher kann weiterhin Schema oder Adresse wählen | ein vertrauenswürdiger Bereich, der viel weiter ist als Ihre Proxys, oder der Anwendungsserver ist direkt erreichbar |
| Der Browser warnt auf einer Velocity-Website vor dem Zertifikat | Velocity liefert seinen selbstsignierten Ersatz aus: Das echte Paar ist abgelaufen, passt nicht oder ist noch nicht ausgestellt; exp:velocity ssl show |
Checkliste
- To do: Jeder Name der Website liefert HTTPS aus; einfaches HTTP leitet um.
- To do:
SiteURLund die URLs der Siteaccesses nutzenhttps://. - To do:
[Session] CookieSecure=true. - To do: HSTS an, zuerst kurz; auf ein Jahr erhöht, sobald es stabil ist;
includeSubDomainsmit dem Inhaber der Domain vereinbart. - To do: Hinter einem Proxy:
TrustedProxies[](oderQ.webserver.proxy.trusted) nennt genau Ihre Proxys; die Prüfung mitX-Forwarded-Protooben ändert nichts. - To do: Ablauf der Zertifikate überwacht; NTP läuft.
Verwandte Seiten
- Sicherheit für Hoster: Überblick
- HTTPS-Zertifikate in Velocity
- TLS-Zertifikate in Panels
- Varnish und Reverse Proxys
- Ablauf von Zertifikaten
- Kapitel 13: Sicherheitshärtung für die Produktion
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.