Apache2 mit sicherer TLS-Verschlüsselung

Serverweite Konfiguration

In der Regel möchte man die Sicherheitseinstellungen auf dem Server global für alle virtuellen Hosts übernehmen. Daher konfiguriere ich diese Settings unter Ubuntu in der /etc/apache2/conf-enabled/security.conf bzw. der /etc/apache2/conf-available/security.conf (wo der Symlink hinzeigt).

In der ersten Zeile bestimme ich, welche SSL-Prokotolle Anwendung finden. Aufgrund von POODLE etc. ist SSL gar keine Option mehr, ich schalte SSL in beiden Versionen serverweit ab.

Der Parameter SSLHonorCipherOrder besagt grob beschrieben, dass nicht der Client die Cipher vorgibt, sondern dass der Server mit dem Client einen Cipher aus der Liste SSL-CipherSuite aushandelt.

# Make SSL secure again
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder   On
SSLCipherSuite        DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA
SSLCompression        off
SSLUseStapling        On
SSLStaplingCache      "shmcb:${APACHE_RUN_DIR}/stapling_cache(128000)"

In der Tat braucht es für eine sichere Konfiguration nur noch 4 Cipher.

Sollte eine Konfiguration nötig sein, die auch Windows XP unterstützt (Internet Explorer 6), ist die empfohlene Cipher-Suite die folgende:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-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:!DES:!MD5:!PSK:!RC4

Konfiguration virtueller Host

Hierzu muss Mod_headers aktiviert sein. Des Weiteren ist darauf zu achten, dass diese Ergänzung nur im SSL-Teil eines virtuellen Hosts vorgenommen werden kann.

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31556926"
</IfModule>

Diese Zeile im virtuellen Host bewirkt, dass der Browser sich merkt, dass die soeben besuchte Seite nur über HTTPS anzusprechen ist. Durch max-age stellen wir die TTL (Time To Live) für diesen Eintrag in der Browserdatenbank ein, sprich wie lange der Wert Gültigkeit hat, bis er wieder verfällt und der Browser einen Aufruf über HTTP versuchen würde. Interessanterweise wird beginnt der Zeitraum nach jedem Aufruf von neu. Dieses Verfahren nennt sich HSTS.

Testen der Konfiguration

Auf https://www.ssllabs.com/ssltest/ kann man seine Serverkonfiguration testen. Viel Spaß!