# Sichere SSL Konfiguration

Mit dem „[Mozilla SSL Configuration Generator](https://ssl-config.mozilla.org/ "https://ssl-config.mozilla.org/")“ läßt sich aktuell wohl am einfachsten und schnellsten eine sichere Konfiguration für den nginx-Webserver erstellen.

Einfach Webserver, Version von Webserver und OpenSSL setzen und zwischen verschiedenen Cipherprofilen wählen, fertig ist eine Beispielkonfiguration.

Der Eintrag zu [TLS im Mozilla Wiki](https://wiki.mozilla.org/Security/Server_Side_TLS "https://wiki.mozilla.org/Security/Server_Side_TLS") ist auch sehr lesenswert.

---

<p class="callout warning">Alternativ habe ich hier noch meine (**veraltete**) Anleitung:</p>

Die folgenden Empfehlungen richten sich nach den Empfehlungen von [BetterCrypto.org](https://bettercrypto.org/ "https://bettercrypto.org/") und ihrem [Applied Crypto Hardening PDF](https://bettercrypto.org/static/applied-crypto-hardening.pdf "https://bettercrypto.org/static/applied-crypto-hardening.pdf") mit dem Stand vom 21.04.2016.

Folgendes kann man machen, um die Standard-SSL Konfiguration von nginx sicherer zu gestalten:

- Schwache Cipher und Protokolle abschalten
- Webserver soll die Reihenfolge der Ciphers vorgeben
- SSL-Komprimierung ausschalten
- HSTS aktivieren
- Permanente Umleitung von HTTP nach HTTPS aktivieren

Das folgende gilt für nginx unter Debian. Ich trage dabei nur die beiden Direktiven für SSL-Zertifikatsbundle (ssl\_certificate) und SSL-Keyfile (ssl\_certificate\_key) in den jeweiligen server-Block ein. Die restliche SSL-Konfiguration setze ich global in /etc/nginx/nginx.conf (dort gibts bereits einen Teil „SSL Settings“, das Folgende einfach hinzufügen):

```
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA';
ssl_dhparam dhparams.pem;
```

<div data-lang="code etcnginxnginxconf" id="bkmrk-ssl_prefer_server_ci-0"><textarea style="display: none;">ssl\_prefer\_server\_ciphers on; ssl\_protocols TLSv1 TLSv1.1 TLSv1.2; ssl\_ciphers 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA'; ssl\_dhparam dhparams.pem;</textarea><div><div><textarea readonly="readonly" spellcheck="false" style="position: absolute; bottom: -1em; padding: 0px; width: 1px; height: 1em; outline: currentcolor none medium;" tabindex="0" wrap="off"></textarea></div></div></div>Auf Diffie-Hellman aufsetzende SSH-Cipher benötigen eine entsprechende Parameterdatei (ssl\_dhparam). Die Standardgröße beträgt 1024 bit. Die Empfehlung nach der Logjam-Attacke sind mind. 2048 bit, besser 4096 bit. Die Datei wird folgendermaßen erstellt (bei 4096 bit dauerte es ca. 5-15 Minuten):

```
# 4096 bit
openssl dhparam -out dhparams.pem 4096
# 2048 bit
openssl dhparam -out dhparams.pem 2048
```

<div data-lang="code" id="bkmrk-%23-4096-bit-openssl-d-0"><textarea style="display: none;">\# 4096 bit openssl dhparam -out dhparams.pem 4096 # 2048 bit openssl dhparam -out dhparams.pem 2048</textarea><div><div><textarea readonly="readonly" spellcheck="false" style="position: absolute; bottom: -1em; padding: 0px; width: 1px; height: 1em; outline: currentcolor none medium;" tabindex="0" wrap="off"></textarea></div></div></div>Danach muss nginx neu geladen/neu gestartet werden!