Apache: Sichere SSL/TLS Settings

Achtung! Dieser Artikel ist älter als ein Jahr. Der Inhalt ist möglicherweise nicht mehr aktuell!

FREAK, BEAST, Heartbleed, POODLE und sonstige Angriffe auf Crypto und Server wurde vor etwas längerer Zeit bekannt und drehten dementsprechende Runden. Ich habe in der Zwischenzeit den Überblick über die ganzen Fixes dafür verloren. Heute habe ich mich hingesetzt und meinen Apache Server auf den aktuellen Stand gebracht.

Test-Tools

Für die Validierung der Einstellungen gibt es ein paar Tools, die man benutzen kann.

„SSL-Server Test“ von ssllabs.com

Dieses online Tool analysiert verschiedene Aspekte der Verbindung. Darunter fallen zum Beispiel:

Am Ende des Tests bekommt man dann das Zeugnis.

sslscan für Terminal-Liebhaber

Dieses Tool ist die abgespeckte Version des Online Tools und zeigt die verfügbaren Chiffren an. Der Vorteil ist, dass das Tool wesentlich schneller ist als das Online Tool, aber es gibt keinerlei Wertung über die Qualität ab.

Ist-Zustand

Bevor ich meine Änderungen durchgeführt habe, habe ich folgende Tests laufen lassen:

tls_test_before

 

Der Test meint eigentlich, dass mein Zertifikat wertlos ist. Das kommt daher, dass keine offizielle CA es ausgestellt hat. Unter dem großen Roten T wird aber darauf hingewiesen, dass die Bewertung eigentlich die Note B wäre, wenn man den Trust-Umstand außer Acht lässt. Die Note B ist quast das Mittelfeld – Es ist nicht das schlechteste, aber auch nicht das Beste.

Die Ausgabe von sslscan zeigt, dass sehr viele Chiffren zur Verfügung stehen:

veloc1ty@pc:~$ sslscan --no-failed blog.veloc1ty.de
 _
 ___ ___| |___ ___ __ _ _ __
 / __/ __| / __|/ __/ _` | '_ \
 \__ \__ \ \__ \ (_| (_| | | | |
 |___/___/_|___/\___\__,_|_| |_|

 Version 1.8.2
 http://www.titania.co.uk
 Copyright Ian Ventura-Whiting 2009

Testing SSL server blog.veloc1ty.de on port 443

 Supported Server Cipher(s):
 Accepted SSLv3 256 bits ECDHE-RSA-AES256-SHA
 Accepted SSLv3 256 bits DHE-RSA-AES256-SHA
 Accepted SSLv3 256 bits DHE-RSA-CAMELLIA256-SHA
 Accepted SSLv3 256 bits AES256-SHA
 Accepted SSLv3 256 bits CAMELLIA256-SHA
 Accepted SSLv3 168 bits ECDHE-RSA-DES-CBC3-SHA
 Accepted SSLv3 168 bits EDH-RSA-DES-CBC3-SHA
 Accepted SSLv3 168 bits DES-CBC3-SHA
 Accepted SSLv3 128 bits ECDHE-RSA-AES128-SHA
 Accepted SSLv3 128 bits DHE-RSA-AES128-SHA
 Accepted SSLv3 128 bits DHE-RSA-SEED-SHA
 Accepted SSLv3 128 bits DHE-RSA-CAMELLIA128-SHA
 Accepted SSLv3 128 bits AES128-SHA
 Accepted SSLv3 128 bits SEED-SHA
 Accepted SSLv3 128 bits CAMELLIA128-SHA
 Accepted SSLv3 128 bits ECDHE-RSA-RC4-SHA
 Accepted SSLv3 128 bits RC4-SHA
 Accepted TLSv1 256 bits ECDHE-RSA-AES256-SHA
 Accepted TLSv1 256 bits DHE-RSA-AES256-SHA
 Accepted TLSv1 256 bits DHE-RSA-CAMELLIA256-SHA
 Accepted TLSv1 256 bits AES256-SHA
 Accepted TLSv1 256 bits CAMELLIA256-SHA
 Accepted TLSv1 168 bits ECDHE-RSA-DES-CBC3-SHA
 Accepted TLSv1 168 bits EDH-RSA-DES-CBC3-SHA
 Accepted TLSv1 168 bits DES-CBC3-SHA
 Accepted TLSv1 128 bits ECDHE-RSA-AES128-SHA
 Accepted TLSv1 128 bits DHE-RSA-AES128-SHA
 Accepted TLSv1 128 bits DHE-RSA-SEED-SHA
 Accepted TLSv1 128 bits DHE-RSA-CAMELLIA128-SHA
 Accepted TLSv1 128 bits AES128-SHA
 Accepted TLSv1 128 bits SEED-SHA
 Accepted TLSv1 128 bits CAMELLIA128-SHA
 Accepted TLSv1 128 bits ECDHE-RSA-RC4-SHA
 Accepted TLSv1 128 bits RC4-SHA

 Prefered Server Cipher(s):
 SSLv3 256 bits ECDHE-RSA-AES256-SHA
 TLSv1 256 bits ECDHE-RSA-AES256-SHA

Wie man hier schön sehen kann wird neben dem angreifbaren Protokoll SSLv3 noch RC4 als Chiffre angeboten.

Fixes für Apache

Die SSL/TLS-Einstellungen sind global und werden über die Datei /etc/apache2/mods-enabled/ssl.conf geregelt.

Veraltete Protokolle abschalten

SSLv3 und SSLv2 sind veraltet und sollten entfernt werden (POODLE). Stattdessen sollte man TLSv1.x verwenden. Alle drei TLS Protokollvarianten werden bei Apache mit dem Tag TLSv1 angegeben. Es gibt keine Möglichkeit explizit TLSv1.3 als Protokoll anzugeben.

Der entsprechende Eintrag:

SSLProtocol TLSv1

Damit hat man schon mal die Hälfte der Arbeit erledigt.

Chiffren aussortieren

Nach den Protokollen werden unsichere Chiffren wie zum Beispiel RC4 aussortiert. Bei den Chiffren habe ich mich auf ein paar beschränkt. Diese sind weit verbreitet und von jedem halbwegs aktuellen Clients unterstützt. Einfaches Diffie-Hellman wird explizit verboten, da man bei Apache 2.2 keine eigenen Gruppen angeben kann.

Die Angabe in der Config-Datei ist wie folgt eine einzige Zeile:

SSLCipherSuite ECDH+AESGCM:ECDH+AES256:ECDH+AES128:ECDH+3DES:RSA+AES:RSA+3DES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!ADH:!AECDH:!MD5:!DSS:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

Chiffren wie RC4, MD5, DES oder EXPORT (Logjam-Attacke) werden explizit verhindert. Zudem kann man noch ein bisschen an der Chiffrenpräferenz schrauben. Normalerweise nutzt der Server die Chiffre, die vom Client präferiert wird. Mit dieser Einstellung:

SSLHonorCipherOrder on

kann man jedoch sagen, dass die Chiffrenpräferenz des Servers verwendet wird. In seltenen Fällen führ das zu Inkompatibilität.

Resultat

Das Resultat: Eigentlich eine A-Bewertung, aber durch das „nicht vertrauenswürdige Zertifikat“ wieder nur ein T. An der Sicherheit der Verbindung an sich kann man nun aber erst mal nicht mehr meckern.

tls_test_after

Die verfügbaren Chiffren sind auf ein Minimum zusammengeschrumpft:

veloc1ty@pc:~$ sslscan --no-failed blog.veloc1ty.de
 _
 ___ ___| |___ ___ __ _ _ __
 / __/ __| / __|/ __/ _` | '_ \
 \__ \__ \ \__ \ (_| (_| | | | |
 |___/___/_|___/\___\__,_|_| |_|

 Version 1.8.2
 http://www.titania.co.uk
 Copyright Ian Ventura-Whiting 2009

Testing SSL server blog.veloc1ty.de on port 443

 Supported Server Cipher(s):
 Accepted TLSv1 256 bits ECDHE-RSA-AES256-SHA
 Accepted TLSv1 256 bits AES256-SHA
 Accepted TLSv1 168 bits ECDHE-RSA-DES-CBC3-SHA
 Accepted TLSv1 168 bits DES-CBC3-SHA
 Accepted TLSv1 128 bits ECDHE-RSA-AES128-SHA
 Accepted TLSv1 128 bits AES128-SHA

 Prefered Server Cipher(s):
 TLSv1 256 bits ECDHE-RSA-AES256-SHA

 

Nun heißt es auf die nächste Lücke warten und diesmal mit dem Patchen dran bleiben.


Du hast einen Kommentar, einen Wunsch oder eine Verbeserung? Schreib mir doch eine E-Mail! Die Infos dazu stehen hier.

🖇️ = Link zu anderer Webseite
🔐 = Webseite nutzt HTTPS (verschlüsselter Transportweg)
Zurück