Nach den ganzen Geschichten um die NSA wollte ich dann meinen Webserver auch mal etwas besser absichern.
Dazu habe ich für den bei mir eingesetzten lighttpd hier eine Anleitung gefunden.
Problem ist allerdings, dass die meisten Chiffre mit der in Debian Squeeze eingesetzten openssl-Bibliothek in der Version 0.9.8o leider nicht funktionieren. Die Lösung: eine neue openssl-Version muss her. Aktuell (Stand November 2013) ist die Version 1.0.1e.
Dank Server4You und dem dort eingesetzten vServer bin ich leider auf das mittlerweile veraltete Debian 6 (Squeeze) angewiesen und kann mangels Unterstützung durch die Server4You-Host-Server nicht auf Wheezy aktualisieren. Deshalb bleibt uns nichts anderes übrig, als die notwendigen Pakete selbst zu kompilieren.
Damit lighttpd (lighty) auch mit der neuen openssl-Version umgehen kann, werden wir die derzeit letzte lighty-Version 1.4.33 runterladen und selbst kompilieren.
Ich gehe hier davon aus, dass lighttpd und openssl bereits aus den normalen apt-Quellen installiert sind.
Zunächst zu openssl:
apt-get build-dep openssl wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz cd openssl-* unp openssl-1.0.1e.tar.gz ./config shared zlib-dynamic #so sähe die config-Zeile für den vollständigen Debian-openssl-Ersatz aus: #./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib shared zlib-dynamic make make test #ohne den folgenden Befehl läuft checkinstall nicht durch mkdir -p /usr/local/ssl/lib/engines
Das .deb-Paket erstellt nun checkinstall. Allerdings ändern wir den Paketnamen, damit wir nicht mehr der originalen Debian-openssl-Installation ins Gehege kommen:
checkinstall -D --pkgname openssl-pfs
Da wir die neue openssl-Version in /usr/local/* installieren, muss die originale Debian-Version nicht deinstalliert werden, d.h. wir können es einfach parallel installieren:
dpkg -i openssl_1.0.1e-1_i386.deb
Jetzt kann es mit lighttpd weitergehen. Wir sorgen zunächst dafür, dass alle Build-Abhängigkeiten von Debian gelöst werden:
apt-get build-dep lighttpd wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.33.tar.gz unp lighttpd-1.4.33.tar.gz cd lighttpd-* ./autogen.sh ./configure --with-openssl --with-openssl-libs=/usr/lib --prefix=/usr --with-webdav-props --with-webdav-locks #neues .deb-Paket erstellen checkinstall -D #alte Debian-Skripte sichern cp -r /usr/share/lighttpd/ /root/usr_share_lighttpd #die aktuelle lighttpd-Installation entfernen apt-get remove lighttpd #alte Debian-Skripte wiederherstellen #(da diese durch die Deinstallation verloren gegangen sind) cp -r /root/usr_share_lighttpd /usr/share/lighttpd
Jetzt können wir endlich das gerade erstellte lighty-Paket installieren:
dpkg -i lighttpd_1.4.33-1_i386.deb
Mit einem
service lighttpd restart
starten wir den neu kompilierten Webserver. Danach sollten wir mal testen, ob alle Webseiten noch klappen 😉
Falls ja, können wir den Autostart von lighty wieder einrichten:
update-rc.d lighttpd defaults
Jetzt können wir endlich unsere Konfiguration so anpassen, dass der Webserver mit sicheren Chiffre und Perfect Forward Secrecy (PFS) arbeitet:
ssl.use-sslv2 = "disable" ssl.use-compression = "disable" ssl.honor-cipher-order = "enable" ssl.cipher-list = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:RC4-SHA"
Oder Alternativ komplett ohne Unterstützung für RC4 (dadurch keine Unterstützung für Java und IE unter Windows XP):
ssl.cipher-list = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA"
UPDATE 20.01.2014:
Das funktioniert natürlich auch mit lighttpd Version 1.4.34 genauso. Einfach oben immer 1.4.33 ersetzen durch 1.4.34.