~~NOTOC~~
====== Apache SSL Einstellungen ======
==== Versionsinformation ====
Die Anleitungen in diesem Dokument wurden auf Basis folgender Softwareversionen erstellt.
* OS: CentOS 7
* Webserver: Apache 2.4.6
==== Allgemeine SSL Einstellungen ====
Laut der Website [[https://bettercrypto.org|bettercrypto.org]] werden folgende SSL Einstellungen empfohlen:
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt
#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCompression off
# Add six earth month HSTS header for all users...
Header always set Strict-Transport-Security "max-age=15768000"
# If you want to protect all subdomains, use the following header
# ALL subdomains HAVE TO support HTTPS if you use this!
# Strict-Transport-Security: "max-age=15768000 ; includeSubDomains"
# HTTP Public Key Pinning (HPKP) for 90 days (60*60*24*90=7776000)
# At least use one Backup-Key and/or add whole CA, think of Cert-Updates!
Header always set Public-Key-Pins "pin-sha256=\"YOUR_HASH=\"; pin-sha256=\"\
\YOUR_BACKUP_HASH=\"; max-age=7776000; report-uri=\"https://YOUR.REPORT.URL\""
SSLCipherSuite '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'
Damit entspricht man den aktuellen SSL Einstellungen. Diese Einstellungen werden pro VHost vorgenommen.
==== Eigene Diffie-Hellman Parameter erstellen ====
Ausgehend von der Schwachstellt [[https://en.wikipedia.org/wiki/Logjam_(computer_security)|Logjam]] sollte man für sein System dafür sorgen, dass der genutzte Satz an DH Parametern ausreichend stark ist. Wer die Default Einstellung höher setzen will kann mit OpenSSL und dem Folgenden Befehl ein passendes File generieren:
openssl dhparam -out dhparams.pem 4096
anschließend kann man das File im Apache (Version 2.4.8 und neuer und OpenSSL 1.0.2) einbinden mit:
SSLOpenSSLConfCmd DHParameters "{path to dhparams.pem}"
Weitere Details dazu sind [[https://weakdh.org/sysadmin.html|hier]] zu finden.
**Achtung**: CentOS läuft mit Apache 2.4.6 [[https://crosp.net/blog/administration/install-latest-apache-server-centos-7/|hier]] gibt es eine Anleitung für das Update.
==== Schlüsselaustausch via Diffie Hellman Elliptic Curve ====
Apache kann schon per default ausgehend von einem RSA-Schlüssel den Schlüsselaustausch mit dem Client per Elliptischen Kurven durchführen. Dabei wird (auf meinen Systemen immer) eine Schlüssellänge von 256 Bit genutzt. Diese lässt sich hochstellen.
Dazu muss man zuerst herausfinden welche Kurven auf einem System zur verfügung stehen:
openssl ecparam -list_curves
Anschließend kann man in der Apache (Version 2.4.8 oder höher) Config für den vHost festlegen, was man wirklich haben will. Dabei darf man natürlich nur Kurven auswählen, die das System auch kann...
SSLOpenSSLConfCmd ECDHParameters Automatic
SSLOpenSSLConfCmd Curves secp521r1:secp384r1
Weitere Details dazu sind [[https://community.letsencrypt.org/t/making-the-key-exchange-stronger/8116|hier]] zu finden.
**Achtung**: CentOS läuft mit Apache 2.4.6 [[https://crosp.net/blog/administration/install-latest-apache-server-centos-7/|hier]] gibt es eine Anleitung für das Update.
==== Weitere Versionsinformationen ====
* Apache 2.2.22, Debian Wheezy with OpenSSL 1.0.1e
* Apache 2.4.6, Debian Jessie with OpenSSL 1.0.1e
* Apache 2.4.10, Debian Jessie 8.2 with OpenSSL 1.0.1k
* Apache 2.4.7, Ubuntu 14.04.2 Trusty with Openssl 1.0.1f
* Apache 2.4.6, CentOS Linux 7 (Core) with OpenSSL 1.0.1e