nginx: SSL/TLS Hardening

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

Vor kurzem habe ich den Artikel Apache: Sichere SSL/TLS Settings geschrieben. Vor kurzem habe ich aber den Apache Webserver deinstalliert und verwende stattdessen nginx. Dieser Webserver hat bereits eine fast perfekte Einstellung in Bezug auf verschlüsselte Verbindungen. Ein bisschen kann man aber noch optimieren.

Kein SSL sondern nur TLS

Wie beim Apache 2 kann man auch nginx sagen, dass er kein SSL mehr akzeptieren soll. Anders als beim Apache kann man die zu verwendete TLS Version aber genauer spezifizieren. Für die maximalste Kompatibilität und trotzdem größtmögliche Sicherheit habe ich nur TLS erlaubt. Dazu habe ich in der Datei /etc/nginx/nginx.conf die Option _sslprotocols eingedampft:

http {
   [..]

   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

   [..]
}

Cipers einschränken

Zusätzlich wird die Anzahl der möglichen Ciphers auf ein Minimum eingeschränkt:

http {
   [..]

   ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:AES128+EECDH:AES128+EDH';
   ssl_prefer_server_ciphers on;

   [..]
}

Jeder halbwegs aktuell Browser ist damit kompatibel. Mobile Geräte haben ebenfalls keine Probleme.

Durch die Option _ssl_prefer_serverciphers wird die Präferenz des Servers gewählt, anstelle die des Clients.

Eigene Diffie-Hellman Parameter

Anders als Apache 2.2 kann nginx schon länger eigene DH Parameter laden. Dazu muss man aber erst einmal welche Erstellen. Dieser Vorgang dauert etwas länger. Die Zeit sollte man aber investieren!

:~$ cd /etc/nginx/
:~$ openssl dhparam -out dhparam.pem 4096

Die entsprechende Config-Option in der Konfigurationsdatei:

http {
   [..]

   ssl_dhparam /etc/nginx/dhparam.pem;

   [..]
}

Fazit

Sobald man nginx neu startet kann man mit dem Tool sslscan das Ergebnis begutachten:

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 DHE-RSA-AES256-SHA
 Accepted TLSv1 128 bits ECDHE-RSA-AES128-SHA
 Accepted TLSv1 128 bits DHE-RSA-AES128-SHA

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

Further Reading


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