Dieses Tutorial beschreibt den Prozess der Implementierung von Forward Secrecy oder oft auch Perfect Forward Secrecy genannt mit dem NGINX-Webserver auf Debian- und Ubuntu-Systemen. Der Prozess kann leicht an andere GNU/Linux-Systeme angepasst werden.
Kurz gesagt, Perfect Forward Secrecy stellt sicher: “… dass die Kompromittierung einer Nachricht nicht zur Kompromittierung anderer führen kann, und dass es auch nicht einen einzigen geheimen Wert gibt, der zur Kompromittierung mehrerer Nachrichten führen kann.” Für weitere Informationen siehe HIER
Als Anfang 2014 die Heartbleed-Schwachstelle in openSSL aufgedeckt wurde, wurde immer deutlicher, dass PFS ein Muss für jedes System ist, das SSL/TLS in einer ernsthaften Funktion einsetzt.
Bitte unterstützt meine Arbeit
Lasst uns starten und PFS (Perfect Forward Secrecy) implementieren.
Zuerst müssen wir ins NGINX Config Verzeichnis:
cd /etc/nginx/
Wir müssen Diffie-Hellman-Parameter erzeugen, die ausreichend stark sind. Einige argumentieren, dass 4096 Bits zu viel sind und die CPU des Systems übermäßig belasten, aber bei der heutigen Rechenleistung scheint dies ein lohnender Kompromiss zu sein.
openssl dhparam -out dh4096.pem 4096
Dieser Vorgang kann einige Zeit in Anspruch nehmen (5 – 15 Minuten)
Es ist praktisch, diese Konfigurationsdatei, die für die jeweilige Aufgabe spezifisch ist, in einer Include-Datei aufzuteilen; das macht es einfacher, PFS über eine große Anzahl von Systemen zu implementieren.
Wir erstellen also mit einem beliebigen Editor eine neue Datei:
/etc/nginx/perfect-forward-secrecy.conf
Nun fürgen wir das folgende in die neue Datei ein:
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM";
ssl_dhparam dh4096.pem;
Nun müssen wir noch die nginx.conf bearbeiten (üblicherweise /etc/nginx/nginx.conf) und fügen folgende Zeilen am ENDE der Datei ein, jedoch INNERHALB des http {}
Blocks:
# This MUST come AFTER the lines that includes .../sites-enabled/*, otherwise SSLv3 support may be re-enabled accidentally.
include perfect-forward-secrecy.conf;
Nun starten wir noch den Nginx Dienst neu:
service nginx restart
Jetzt können wir HIER testen ob PFS nun aktiv ist
Sollte der Test einen Fehler anzeigen wie zb: Session resumption (caching) No (IDs assigned but not accepted) dann müssen wir noch etwas zu unserer nginx.conf im oberen Bereich des http {}
Blocks hinzufügen:
ssl_session_cache shared:SSL:10m;
Jetzt müssen wir erneut Nginx neustarten:
service nginx restart
Nun sollte der Test fehlerfrei durchführbar sein, selbst wenn der Fehler weiterhin erscheint mindert dieser nicht das Ergebnis.
Das wars auch schon.