28. September 2016

Episode 5 – TR-02102-2 und NGINX

Dieser Blog Post ist Teil der Blogserie zur TLS-Konfiguration – Technische Richtlinie TR-02102-2 des BSI.

In Episode 1 habe ich erläutert, was der Richtlinie zweiter Teil empfiehlt. In dieser Episode möchte ich veranschaulichen, wie man das mit einem NGINX Webserver umsetzt. Dafür habe ich in unserer Testumgebung einen NGINX auf einem Ubuntu Server 16.04.1 installiert.

Wichtig: Ich setze in diesem Posting voraus, dass der Anwender dieser Tutorials weis, was er vor hat und dass er mit äußerster Vorsicht vor geht. Daher vor den Änderungen besser die Konfigurationsdatei wegsichern.

Wie setzt man die TR mit dem NGINX um?

Ich konzentriere mich wieder auf die Umsetzung der TR und wähle daher folgende Konfiguration:

server {
    listen 443 ssl;
#für IPv6-User das äquivalent listen [::]:443 ssl;
    server_name Domain.com;
    ssl_certificate /pfad/zum/zertifikat/example.com.crt;
    ssl_certificate_key /pfad/zum/privaten/schlüssel/private.key;
    ssl_protocols TLSv1.3 TLSv1.2;
    ssl_ecdh_curve secp521r1:secp384r1; 
    ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-DSS-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-DSS-AES256-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;
}

Nach einem Neustart des Dienstes bekommt man folgendes Bild mit nmap:

| ssl-enum-ciphers:
|  SSLv3: No supported ciphers found
|  TLSv1.0: No supported ciphers found
|  TLSv1.1: No supported ciphers found
|  TLSv1.2:
|    ciphers:
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - strong
|       TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 - strong
|       TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 - strong
|       TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 - strong
|       TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 - strong
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong
|    compressors:
|     NULL
|_ least strength: strong

Und was bedeutet das für die Kompatibilität mit anderen Systemen?

Nur Systeme, die TLSv1.2 sprechen können, sind in der Lage, sich mit dem Server zu verbinden. Welche das sind steht in Episode 2 beim Apache unten aufgelistet.