Skip to content

Mozilla SSL Server Konfigurator - Die richtigen TLS/SSL Einstellungen für Apache, Nginx oder HAProxy automatisch generieren

Die letzten Wochen ging es teilweise um die Analyse von SSL Verbindungen, heute soll es mal wieder um die dazugehörigen Einstellungen gehen.
Ich hatte in der Vergangenheit zwar schon Artikel zu SSL Einstellungen für Nginx, Apache oder Postfix geschrieben. Dennoch will ich mal auf den Mozilla SSL Konfiguration Generator hinweisen.
Das Webtool bietet zusammen mit dem ausführlichen Wiki Artikel über Server Side TLS Security  genau die richtige Kombination, um Webserver mit SSL zu konfigurieren.

mozilla-wiki
SSL Einstellungen per Klick erzeugen

Der webbasierte Mozilla SSL Konfigurator unterstützt neben den am weitesten verbreiteten Servern Apache und Nginx auch HA Proxy. 
Ich persönlich vermisse eine Option für Postfix, da es sich dabei aber um keinen reinen Webserver handelt, ist das auch nachvollziehbar.

Das Tool stellt neben verschiedenen Server und SSL Varianten drei Auswahlmöglichkeiten in puncto Sicherheit zur Verfügung (modern, intermediate und old).
Praktischerweise wird bei jedem Modus auch die Unterstützung für Browser oder Systeme eingeblendet. So weiß jeder Anwender direkt, ob die enthaltenen CypherSuites für das eigene Projekt nützlich sind oder nicht.
Welche SSLCipherSuites genau in der jeweiligen Einstellung verwendet werden, lässt sich in dem oben erwähnten Mozilla Wiki Artikel nachlesen.

ssl-config-generator

Leider müssen einzelne Server Versionen von Hand eingegeben werden, der Konfigurator erkennt diese aber ohne Probleme. 
Wie Stichproben gezeigt haben, nimmt das Tool OCSP Stapling automatisch aus der Config, wenn ein Wechsel von Apache 2.4 zu 2.2 erfolgt. (Diese Funktion wird erst seit 2.3 unterstützt).

Wie der Name des Tools vermuten lässt, wird nur eineKonfiguration generiert, diese muss in die geweilige ".conf" Datei auf einem Server kopiert werden.

Fazit

Nicht nur Administratoren finden mit dem Tool eine praktische Hilfe, wenn es um die Konfiguration von TLS auf einem Server geht. 
Auch der Heimanwender, kann sich mit Hilfe des dazugehörigen Wiki Artikel das nötige Wissen zu TLS/SSL aneignen und mit dem SSL Konfigurator schnell und einfach umsetzen. 

Anleitung - Poodle SSL 3.0 Lücke in Apache, Nginx oder Postfix deaktivieren

Seit ein paar Tagen ist der Pudel los. Zumindest bei einigen. Gemeint ist die neue, von Google entdeckte SSLv3 Lücke. Diese erlaubt bei bestimmter Konstellationen einen Angriff auf die verwendeten Systeme. Um so einen Angriff zu verhindern haben Browserhersteller bereits vorgebeugt und wollen SSLv3  aus dem eigenen Browser verbannen (siehe Mozilla).

Ich möchte euch kurz zeigen, wie die Deaktivierung von SSLv3 unter Apache und Nginx funktioniert. Zunächst sollte aber getestet werden, ob der Server SSLv3 überhaupt freigeschaltet hat.

Apache oder Nginx auf SSLv3 Lücke testen

Es genügt ein einfacher Konsolenbefehl, um abzuprüfen, wie es mit dem Server steht

openssl s_client -connect REMOTE_SERVER:443 -ssl3

Sollte die Verbindung via SSLv3 aktiviert sein, erhaltet ihr bei einen erfolgreichen Handshake ein paar Werte zurück. Hier bei einem Apache Server

SSL handshake has read 1260 bytes and written 322 bytes

New, .../SSLv3, Cipher is DHE-RSA-AES256-SHA

Ist SSLv3 bereits deaktiviert, werden Fehlermeldungen ausgegeben

CONNECTED(00000003)

139957739407008:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1260:SSL alert number 40

139957739407008:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:

no peer certificate available

No client certificate CA names sent

SSL handshake has read 7 bytes and written 0 bytes

New (NONE), Cipher is (NONE)

Secure Renegotiation IS NOT supported

apache

Apache Server - SSLv3 abschalten

Im Prinzip hatte ich es schon einmal beim Thema Hardening Apache Server erwähnt, wie bestimmte Protokolle festgelegt werden können. Es genügt folgende Zeile in der "default-ssl.conf" bzw. "ssl.conf" zu hinterlegen, um SSLv3 zu unterdrücken.

sudo nano /etc/apache2/mods-available/ssl.conf

SSLProtocol All -SSLv2 -SSLv3

Alternativ können auch einfach alle Protokolle außer TLS deaktiviert werden. Dazu werden mit Minus alle blockiert und mit Plus die gewünschten Protokolle hinzugefügt.

SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2

Alternativ dazu können mit dem Befehl "SSLCipherSuite" die gewünschten Chiffren angegeben, bzw. eine Priorisierung festlegt werden. Ich hatte dies im besagten Hardening Artikel bereits beschrieben. Weiter Details findet ihr hier.

Danach wie nach jeder Änderung der Konfiguration

sudo service apache2 restart 

nginx

Nginx Server - SSLv3 deaktvieren

Für den inzwischen auf Platz 1. gelisteten Webserver (der 10 000 größten Webseiten) gilt ein ähnliches Vorgehen, wie beim Kollegen Apache. Auch hier hatte ich bereits einen Artikel verfasst.

In der Config muss lediglich SSL 3.0 entfernt werden.

sudo nano /etc/nginx/nginx.conf

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

sudo service nginx restart 

Gleiches gilt für die hinterlegten Ciphersuites. Hier kann beim Apache Webserver nachgeschaut werden. 

SSLv3 lässt sich nicht deaktivieren, was tun?

Auf manchen Servern ist es nicht möglich SSLv3 zu deaktivieren, welche Gründe es auch immer haben mag. Hier bleibt die Möglichkeit auf OpenSSL 1.0.1j, 1.0.0o bzw. 0.9.8zc zu aktualisieren. Denn in den aktuellen Versionen ist TLS_FALLBACK_SCSV aktiv, was Schutz vor Poodle bietet. Ob OpenSSL nach einem Update akutell ist , lässt sich dies mit SSL LABS prüfen.

Sollte auch ein Update auf neuere Versionen nicht möglich sein, ist es möglich schädliche ChipherSuites zu verbieten.

Folgende Cipher Suites sollen NICHT enthalten sein, wenn ein Poodle Angriff verhindert werden soll.

IDEA-CBC-SHA, EXP-DES-CBC-SHA, DES-CBC-SHA, DES-CBC3-SHA, EXP-DH-DSS-DES-CBC-SHA, DH-DSS-DES-CBC-SHA, DH-DSS-DES-CBC3-SHA, EXP-DH-RSA-DES-CBC-SHA, DH-RSA-DES-CBC-SHA, DH-RSA-DES-CBC3-SHA, EXP-DHE-DSS-DES-CBC-SHA, DHE-DSS-CBC-SHA, DHE-DSS-DES-CBC3-SHA, EXP-DHE-RSA-DES-CBC-SHA, DHE-RSA-DES-CBC-SHA, DHE-RSA-DES-CBC3-SHA, EXP-ADH-DES-CBC-SHA, ADH-DES-CBC-SHA, ADH-DES-CBC3-SHA, EXP-RC2-CBC-MD5, IDEA-CBC-SHA, EXP-DES-CBC-SHA, DES-CBC-SHA, DES-CBC3-SHA, EXP-DHE-DSS-DES-CBC-SHA, DHE-DSS-CBC-SHA, DHE-DSS-DES-CBC3-SHA, EXP-DHE-RSA-DES-CBC-SHA, DHE-RSA-DES-CBC-SHA, DHE-RSA-DES-CBC3-SHA, ADH-DES-CBC-SHA, ADH-DES-CBC3-SHA, AES128-SHA, AES256-SHA, DH-DSS-AES128-SHA, DH-DSS-AES256-SHA, DH-RSA-AES128-SHA, DH-RSA-AES256-SHA, DHE-DSS-AES128-SHA, DHE-DSS-AES256-SHA, DHE-RSA-AES128-SHA, DHE-RSA-AES256-SHA, ADH-AES128-SHA, ADH-AES256-SHA

postfix

Postfix - SSL 3.0 ausschalten

Auch auf dem bekannten Mailserver Postfix lässt sich SSL 3.0 unterbinden, hier genügt ein einfach Eingriff  "/etc/postfix/main.cf"

sudo nano /etc/postfix/main.cf 

smtpd_tls_security_level = encrypt

smtpd_tls_mandatory_ciphers = high

smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3

smtpd_tls_protocols = !SSLv2 !SSLv3


smtp_tls_protocols = !SSLv2, !SSLv3

smtp_tls_security_level = encrypt

smtp_tls_mandatory_ciphers = high

smtp_tls_mandatory_protocols = !SSLv2 !SSLv3

sudo service postfix restart


Letzendlich gilt es, die eigenen Server immer im Auge zu haben und auf aktuelle Sicherheitslücken zu scannen.

Nginx auf Ubuntu Server 14.04 - In 5min installieren und härten

Die schnelle Apache Server Alternative Nginx ist auf dem Vormarsch und hat jüngst den guten alten Apache Webserver als Referenzsystem bei den Top 1000 Webseiten weltweit überholt.

Mit ein Grund sich mit diesem System etwas näher auseinanderzusetzen.

Zunächst sollte das System jedoch installiert und im Optimalfall gehärtet werden, um von Anfang an einen sicheren und schnellen Webserver zu haben.

nginx

Nginx auf Ubuntu Server 14.04 installieren

Die Installation geht recht schnell von statten, um die aktuelle stabile Version zu erhalten muss zunächst das richtig Repository hinzugefügt werden

sudo add-apt-repository ppa:nginx/stable

sudo apt-get update

sudo apt-get install nginx

Da der Server nach der Installation automatisch startet, könnt ihr sofort danach unter http://localhost die Standardwebseite des Serversystems aufrufen

nginx-ssl

Nginx SSL aktivieren und härten

Damit der Server unter https://localhost aufgerufen werden kann, muss zunächst ein Zertifikat erstellt werden, um es danach in Nginx einzubinden. In diesem Fall wird das Zertifikat selbst signiert.

cd /etc/nginx/

sudo mkdir ssl

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/srv.key -out /etc/nginx/ssl/srv.crt

Nun kann mit der Konfiguration begonnen werden, diese ist unter /etc/nginx/sites-available/default zu finden.

Innerhalb der Konfig-Datei einfach nach unten scrollen und die Kommentarzeichen im HTTPS Bereich entfernen.

sudo nano /etc/nginx/sites-available/default

server {

        listen 443;

        server_name localhost;

        root html;

        index index.html index.htm;

        ssl on;

        ssl_certificate /etc/nginx/ssl/srv.crt;

        ssl_certificate_key /etc/nginx/ssl/srv.key;

        ssl_session_timeout 5m;

        ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4';

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        #ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

        #ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";

        ssl_prefer_server_ciphers on;

        ssl_session_cache  builtin:1000  shared:SSL:10m;0m;

        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains"

        add_header X-Frame-Options DENY;

        location / {

                try_files $uri $uri/ =404;

        }

}

Wie oben zu sehen ist, habe ich für einen sicheren Serverbetrieb, die Bereiche ssl_protocols und ssl_ciphers angepasst.

Zusätzlich wurde HSTS mit dem Befehl add_header Strict-Transport-.... aktiviert.

Zum Schutz for Clickjacking ist die Variable add_header X-Frame-Options DENY gesetzt worden.

Auch wurde der zuvor erzeugte SSL Schlüssel mit dem richtigen Pfad eingebunden.

Abschließend wurde noch die Variable ssl_session_cache gesetzt.

Wer den Webserver weiter absichern möchte, der kann zusätzlich Variablen wie ssl_stapling on und ssl_stapling_verify on setzen, um OCSP zu aktivieren.

Nginx Konfiguration prüfen und neustarten 

Unabhängig sollte vor einem Neustart die Installation überprüft werden. Wurde alles korrekt konfiguriert, ist die Standardseite unter https://localhost erreichbar. 

sudo service nginx configtest

sudo service nginx restart