Lighttpd

HSTS-Header (HTTP Strict Transport Security) konfigurieren

HTTP Strict Transport Security (abgekürzt HSTS, definiert in RFC6797) ist ein Sicherheitsfeature einer Webseite, das dem Besucher, bzw. dessen Browser sagt, dass sie nur noch per HTTPS verschlüsselt mit ihm kommunizieren will. Dazu wird ein zusätzlicher HTTP-Header gesetzt, der Angaben zum Zeitraum, Umgang mit Subdomains und der Verwendung der HSTS Preloadliste enthält.

Das Feature funktioniert folgendermaßen: Ein Besucher tippt z.B. www.seite-x.de in seinen Browser ein. Der Webserver leitet ihn auf HTTPS um. In der HTTPS-Verbindung wird ein zusätzlicher HTTP-Header gesendet, der bestimmte Informationen für den Browser enthält. Der Browser merkt sich das für den angegebenen Zeitraum. Bei zukünftigen Besuchen greift der Browser dann sofort auf die HTTPS Seite zu.

Es gibt folgende Keywörter:

Beim Lighttpd muss dazu folgender Eintrag in der Konfiguration hinterlegt werden:

/etc/lighttpd/lighttpd.conf

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
  setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubDomains; preload")
}

Nicht vergessen im Vhost für Port 80 die permanente Umleitung auf HTTPS zu konfigurieren. Wie das für Lighttpd zu machen ist, habe ich hier beschrieben.

Danach muss Lighttpd neu geladen/neu gestartet werden!

Permanente Umleitung auf HTTPS

Um einen bestimmten Vhost auf HTTPS umzuleiten nutze ich dieses Beispiel:

$HTTP["scheme"] == "http" {
  $HTTP["host"] == "seite-x.de" {
    url.redirect = (".*" => "https://seite-x.de$0")
  }
}

Oder nur eine bestimmte URL auf HTTPS umleiten (bei allen Hosts):

$HTTP["scheme"] == "http" {
  $HTTP["host"] == "seite-x.de" {
    url.redirect = ("^/phpmyadmin/.*" => "https://seite-x.de$0")
  }
}

Oder um alle konfigurierten Seiten auf HTTPS umzuleiten:

$HTTP["scheme"] == "http" {
  $HTTP["host"] =~ ".*" {
    url.redirect = (".*" => "https://%0$0")
  }
}