von Thomas
Erstellt am 20.11.2019
Nach knapp 10 Jahren ist eine neue Version des Transport Layer Security (TLS) im RFC 8446 standardisiert worden. Wegen diesem Protokoll ist es relativ sicher, dass eine Bestellung in einem Onlineshop bei einem selbst landet und nicht plötzlich bei jemand Unbekanntem in einem anderem Land.
Die Vorteile von der neuen Version sind schnell aufgezeigt:
Die Erfinder der ersten Verschlüsselungsprotokolle kamen auf die Idee, von der eigentlichen
Klartextnachricht
zunächst den MAC (message authentication code) zu bilden und
erst anschließend die Verschlüsselung drüber zu legen. Das stellte sich bereits vor Jahren als
Schwachstelle heraus. Mit dem Angriff Padding Oracle ist es
möglich die Verbindung zu manipulieren.
TLS 1.3 räumt endgültig auf und zwingt die Authenticated Encryption (AE) zu nutzen.
Die Integrität und Verschlüsselung ist somit in einem Schritt gewährleistet.
Das Ver- und Entschlüsseln mit AES wird heutzutage sehr nativ unterstützt, was somit keine Bremse ist. Der Verbindungsaufbau erzeugt einiges an Overhead. TLS Version 1.2 hat zwei Roundtrips benötigt. In der neuen Version ist es lediglich noch einen.
In der Version 1.3 des TLS wird weitestgehend digital signiert, was Man-in-the-Middle Attacken vom Client verhindern und vorbeugen soll. Es soll nicht mehr möglich sein, das ausgehandelte Kryptoverfahren auf ein knackbares, wie in den Angriffen FREAK und Logjam praktiziert, herunterzubrechen.
Mit Debian 10 werden alle Voraussetzungen erfüllt, die benötigt werden um TLS 1.3 zu verwenden. Nginx muss mindestens in der Version 1.14 oder neuer vorliegen. Der Webserver muss mit der Version Openssl 1.1.1 oder neuer kompiliert sein. Das lässt sich einfach mit folgendem Befehl herausfinden:
user@srv ~ # nginx -V nginx version: nginx/1.14.2 built with OpenSSL 1.1.1c 28 May 2019 (running with OpenSSL 1.1.1d 10 Sep 2019) TLS SNI support enabled
Wie und in welcher Datei letzten Endes die TLS Konfiguration vorgenommen wird, ist dem Nutzer überlassen. Ich empfehle eine Datei unter /etc/nginx/conf.d/tls.conf hinzuzufügen, um alle TLS Konfigurationen einheitlich zu halten. Die Datei muss anschließend in der /etc/nginx/nginx.conf hinzugefügt werden. Dateien fügt man wie folgt in der conf hinzu:
include /etc/nginx/conf.d/*.conf;
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl_dhparam /etc/nginx/dh-certs/dhparam4096.pem; ssl_ecdh_curve secp384r1;
Um bessere Sicherheit zu gewährleisten erstellen wir Diffie Hellmann Parameter. Wir geben Sie dem Server mit, sodass er sie beim Verbindungsaufbau nutzen kann. Hier ist bei der Erstellung 4096 Bit best Practice. Sie verhindern ein Downgrade der Verbindung gegen den Angriff Logjam .
openssl dhparam -out /etc/nginx/dh-certs/dhparam4096.pem 4096
Die Sicherheitsempfehlungen für Webserver ändern sich fast täglich. Es ist nötig, sich immer aktuell zu
halten, um einen perfekten Schutz zu gewährleisten.
Zusätzlich sollte überlegt werden weitere Sicherheitsmaßnahmen im nginx für TLS zu treffen.
Auf der Webseite
von nginx kann überprüft werden, was es für zusätzliche Optionen gibt.
Weitere Tools um seine Verbindung zu testen und zu optimieren sind folgende: