Ciphersuits und Einstellungen für Apache – Update 28.6.2015

Da es diverse Angriffe und Schwächen in Bezug auf SSL/TLS gesicherte Transports gibt ist es wichtig, bei der Konfiguration von verschlüsselten Diensten darauf zu achten, nur derzeit als sicher angesehene Protokolle und Kryptoalgorithmen  zu verwenden.

Für Apache sind hier im Wesentlichen drei Direktiven aus mod_ssl maßgeblich: SSLProtocol, SSLCipherSuite, SSLHonorCipherOrder.

Also beginnen wir der Reihe nach mit

SSLProtocol

Dies legt die vom Webserver unterstützten Transportprotokolle fest.1

Da mittlerweile alle Versionen von  SSL unsicher sind, sollte man diese einfach deaktivieren. Da Apache mod_ssl SSLv2, SSLv3, TLS 1.0, TLS 1.1 und TLS 1.2 unterstützt, reicht dazu folgender Eintrag:

Nun werden nur mehr TLS-Verbindungen ausgehandelt. Mach obskur alter Client (z.B. IE6) kann dann allerdings nicht mehr zugreifen, weil diese TLS noch nicht beherrschen.

SSLCipherSuite

Hier legen wir die zu verwendenden Algorithmen fest.2. Damit ist dies die mächtigste Option, da man hiermit die Sicherheit der Verbindung bestimmt. Als Parameter nimmt SSLCipherSuite die von der OpenSSL-Library bereitgestellten Namen für die jeweiligen Ciphers 3. Als No-Brainer versteht sich natürlich, dass man aNULL (keine Authentifizierung) und eNULL (keine Verschlüsselung) sowie die schwachen 40 und 56 Bit EXPORT Ciphers ausschaltet. Dann gleich noch einige mittlerweile als gehacked anzusehende wie RC4 aka ARCFOUR, DES oder MD5.

Weiters aktiviert man in der Liste explizit die als sicher angesehenen Ciphers wie z.b. die auf elliptischen Kurven basierenden und PFS4 unterstützenden Algorithmen ECDHE-* und einige weitere um auch nicht ganz aktuelle Clients zu unterstützen.

Das Ganze sieht dann so aus:

SSLHonorCipherOrder

Hiermit legen wir fest, dass die von uns in SSLCipherSuite angegebene Reihenfolge die vom Server präferierte Reihenfolge ist, d.h. der Webserver versucht mit dem Client entsprechend der Liste den verwendeten Verschlüsselungsalgorithmus auszuhandeln5. Die Verwendung ist trivial:

Ist dies deaktiviert, wird nicht die vom Server festgelegte Reihenfolge, sondern die vom Client gewünschte verwendet.

Mit diesen Einstellungen hat man, nach derzeitigem Stand, die Voraussetzungen für sicher verschlüsselte Verbindungen geschaffen.


UPDATE 20150628: Änderung der Ciphersuits um schwache DH-Groups zu verhindern (Logjam-Attacke)

  1. Siehe Apache Dokumentation SSLProtocol
  2. Siehe Apache Dokumentation SSLCipherSuite
  3. Siehe OpenSSL-Ciphers Dokumentation
  4. Perfect Forward Secrecy bei Wikipedia
  5. Siehe Apache Dokumentation SSLHonorCipherOrder