Apache 2.4 SSL WebServer Konfiguration

Einen Webserver mit einer aktuellen, robusten SSL Konfiguration zu versehen kann durchaus einen nicht zu unterschätzenden (Test-)Aufwand verursachen. Hier meine Notizen zur heute durchgeführten Konfiguration eines Apache 2.4 Webservers:

SSLEngine on
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCompression off
SSLUseStapling On
Header add Strict-Transport-Security "max-age=15768000 ; 
                                      includeSubDomains"

SSLCipherSuite '-ALL:EECDH+aRSA+AES:EDH+aRSA+AES:
                aRSA+kRSA+AES:+AES256'

SSLCertificateFile      /etc/ssl/certs/it-sec.ovh.crt
SSLCertificateKeyFile   /etc/ssl/private/it-sec.ovh.key

SSLCertificateChainFile /etc/ssl/certs/startssl.chain.crt

  • Aktivierung von OCSP-Stapeling erfordert noch eine Ergänzung in der

/etc/apache2/mods-enabled/ssl.conf:
SSLStaplingCache shmcb:${APACHE_RUN_DIR}/stapling_cache(128000)

Verwendete Cipher-Suites

Gegenüber der in BetterCrypto.org vorgeschlagenen CipherSuite wurden von mir Veränderungen vorgenommen, um:

  1. Die ephemeral ECDH key agreement Varianten alle den ephemeral DH Varianten vorzuziehen (Performance!)
  2. Damit (mit der Vorreihung von ECDH) auch Java 1.7 zu unterstützen, denn die von BetterCrypto.org am Beginn der CipherSuite auftauchenden DH-Varianten verwenden DH-Parameter >1024bit was Java 1.7 verweigert.
  3. Camellia zu entfernen – alle relevanten Clients ziehen AES ohnehin vor, es würde somit nicht zur Anwendung kommen.
  4. AES128 gegenüber AES256 vorzureihen, denn AES256 bringt keine praxisrelevante zusätzliche Sicherheit (Performance!).
  5. Einen übersichtlicheren und damit einfacher wartbareren CipherString zu verwenden.

Die o.a. CipherSuite ergibt mit OpenSSL 1.0.1f folgende geordnete Liste:

CipherSuite                 KeyEx Enc         Mac    
ECDHE-RSA-AES128-GCM-SHA256 ECDH  AES128-GCM  AEAD
ECDHE-RSA-AES128-SHA256     ECDH  AES128      SHA256
ECDHE-RSA-AES128-SHA        ECDH  AES128      SHA1
DHE-RSA-AES128-GCM-SHA256   EDH   AES128-GCM  AEAD
DHE-RSA-AES128-SHA256       EDH   AES128      SHA256
DHE-RSA-AES128-SHA          EDH   AES128      SHA1
AES128-GCM-SHA256           RSA   AES128-GCM  AEAD
AES128-SHA256               RSA   AES128      SHA256
AES128-SHA                  RSA   AES128      SHA1
ECDHE-RSA-AES256-GCM-SHA384 ECDH  AES256-GCM  AEAD
ECDHE-RSA-AES256-SHA384     ECDH  AES256      SHA384
ECDHE-RSA-AES256-SHA        ECDH  AES256      SHA1
DHE-RSA-AES256-GCM-SHA384   EDH   AES256-GCM  AEAD
DHE-RSA-AES256-SHA256       EDH   AES256      SHA256
DHE-RSA-AES256-SHA          EDH   AES256      SHA1
AES256-GCM-SHA384           RSA   AES256-GCM  AEAD
AES256-SHA256               RSA   AES256      SHA256
AES256-SHA                  RSA   AES256      SHA1

ECDH = Ephemeral Elliptic curve Diffie–Hellman
EDH  = Ephemeral Diffie-Hellman
GCM  = Galois/Counter Mode realisiert zugleich AEAD
AEAD = Authenticated Encryption with Associated Data

Alle CipherSuites werden mit RSA authentifiziert. Forward-Secrecy ist mit ECDH und EDH gewährleistet. Eine Übersicht welche Clients damit konkret welche CipherSuite verwenden zeigt die nachfolgende Abbildung:

ssllabs.com Client-Handshake Simulation

Wie die mit ssllabs.com erstellte Simulation zeigt, verwenden alle heute relevanten Clients somit Forward Secrecy und performantes und zugleich sicheres AES128. Ein Support von altem, ungepatchtem WinXP mit IE6/IE8 erscheint mittlerweile obsolet, weshalb diese Einschränkung in Kauf genommen werden kann.

StartSSL Certificate Chain

Bleibt noch die Frage, was ist in der startssl.chain.crt enthalten:

StartSSL bietet zwar SHA256 Zertifikate an, jedoch ist das Default Intermediate-Zertifikat leider nur SHA1. StartSSL hat jedoch inzwischen auch ein SHA256 Intermediate-Zertifikat bereitgestellt, welches jedoch durchaus gut versteckt ist. Unter https://www.startssl.com/certs/ wird man allerdings fündig: https://www.startssl.com/certs/class1/sha2/der/sub.class1.server.sha2.ca.crt. Weiters empfiehlt es sich, die die Chain noch das Cross-Zertifikat (welches das neue und alte Stammzertifikat “verbindet”) hinzuzunehmen: https://www.startssl.com/certs/ca-cross-sha2.pem

Aus diesen beiden Zertifikaten erstellen wir uns ein PEM-kodiertes, nur mehr SHA256-Zertifikate beinhaltendes startssl.chain (sha256).

 Test des Resultats

Die von mir erstellte Demo-Website findet sich hier: https://it-sec.ovh/

Getestet mit dem SSL Labs SSL Server Test

SSL Labs SSLTest it-sec.ovh
SSL Labs SSLTest it-sec.ovh

You May Also Like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.