Debian 6 Squeeze: openssl 1.0.1e und lighttpd 1.4.33 selbst kompilieren (für TLS 1.2 mit PFS)

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.

4 Kommentare

  1. Einige Anmerkungen:

    dpkg -i openssl_1.0.1e-1_i386.deb

    ist nicht nötigt, checkinstall installiert das Paket bereits.

    ./autogen.sh braucht man nur, wenn man direkt aus dem lighttpd svn auscheckt. Für die tar.gz ist das überflüssig

  2. ich habe den openssl-teil durchgeführt auf einem Server mit
    debian 6 / apache 2

    wie „sage“ ich denn jetzt den einzelnen Services
    apache, postfix, courier, ssh usw…..
    dass diese auch das neue Paket „openssl-pfs“ verwenden sollen ?

    denn wie du schon richtig schreibst sind ja jetzt 2 openssl-versionen parallel installiert (originale Debian-Version und das neue „openssl-pfs“)

    oder macht man das global für alle services ?

    1. Mittlerweile bin ich auf einen anderen Server gewechselt und in dem Zuge auf Debian 7 Wheezy umgestiegen, sodass ich das selber nicht mehr testen kann. Aber in meinem Beispiel oben wird lighttpd neu kompiliert und verwendet dabei die neue OpenSSL-Version schon beim kompilieren/linken. Auf diese Weise müsstest du alle Dienste per Hand neu komilieren und mit der neuen OpenSSL-Version linken.

      Beim OpenSSL-config kannst du (wie auch oben schon beschrieben) mal versuchen, das hier zu machen:
      #so sähe die config-Zeile für den vollständigen Debian-openssl-Ersatz aus:
      #./config –prefix=/usr –openssldir=/etc/ssl –libdir=lib shared

      Dadurch würde OpenSSL systemweit ersetzt. Ich weiß allerdings nicht, ob das schon reicht, dass Apache dann auch mit den neuen Funktionen (z.B. PFS) klar kommt, oder ob du auch dann einen neuen Apachen brauchst (der vermutlich wiederum nicht in den Debian-Paketquellen ist).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.