Apache – Anpassung SSL Protokolle und Cipher Suites

[Letzte Änderung: 27.11.2019] Ich nutze im privaten Umfeld seit Weihnachten 2018 einen virtuellen Server mit Ubuntu 18.04. Dort habe ich zur einfachen und schnellen Administration das kostenlose Panel KeyHelp installiert. Die Anwendung wird von KeyWeb entwickelt. Ideen und Wünsche der Community fließen regelmäßig in neue Versionen ein.

Aktuell wird der Webserver Apache2 unter Ubuntu 18.04 mit der Versionsnummer 2.4.29 ausgeliefert. Durch die Installation von KeyHelp und der Verwendung Let’s Encrypt wird auch das Modul SSL des Apache2 installiert und aktiviert. Standardmäßig sind natürlich SSL Protokolle wie TLS 1.0, TLS 1.1 und TLS 1.2 aktiviert. Zusätzlich ist eine große Anzahl von Cipher Suites konfiguriert um eine möglichst große Anzahl von Geräten bzw. Betriebssysteme und Browser zu erreichen.

Um unsichere Protokolle und Cipher Suites zu deaktivieren, ist ein Eingriff via SSH direkt auf die zuständige Konfigurationsdatei des Apache2 bzw. Moduls notwendig. In diesem Fall handelt es sich um die Datei /etc/apache2/mods-enabled/ssl.conf.

Bisher/Standard:

<IfModule mod_ssl.c>

    SSLRandomSeed startup builtin
    SSLRandomSeed startup file:/dev/urandom 512
    SSLRandomSeed connect builtin
    SSLRandomSeed connect file:/dev/urandom 512

    ##
    ##  SSL Global Context
    ##
    ##  All SSL configuration in this context applies both to
    ##  the main server and all SSL-enabled virtual hosts.
    ##

    # Some MIME-types for downloading Certificates and CRLs
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl

    # Pass Phrase Dialog:
    SSLPassPhraseDialog     exec:/usr/share/apache2/ask-for-passphrase

    # Inter-Process Session Cache:
    SSLSessionCache         shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
    SSLSessionCacheTimeout  300

    # SSL Cipher Suite:
    SSLCipherSuite          ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA::AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!DES-CBC3-SHA:!DSS
    SSLHonorCipherOrder     on

    # The protocols to enable
    SSLProtocol             all -SSLv3 -SSLv2

    # OCSP Stapling
    #SSLUseStapling          on
    #SSLStaplingResponderTimeout 5
    #SSLStaplingReturnResponderErrors off
    #SSLStaplingCache        shmcb:${APACHE_RUN_DIR}/ssl_ocsp(512000)

    # Whether to forbid non-SNI clients to access name based virtual hosts.
    # Default: Off
    #SSLStrictSNIVHostCheck On

</IfModule>

Neu:

<IfModule mod_ssl.c>

    SSLRandomSeed startup builtin
    SSLRandomSeed startup file:/dev/urandom 512
    SSLRandomSeed connect builtin
    SSLRandomSeed connect file:/dev/urandom 512

    ##
    ##  SSL Global Context
    ##
    ##  All SSL configuration in this context applies both to
    ##  the main server and all SSL-enabled virtual hosts.
    ##

    # Some MIME-types for downloading Certificates and CRLs
    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl

    # Pass Phrase Dialog:
    SSLPassPhraseDialog     exec:/usr/share/apache2/ask-for-passphrase

    # Inter-Process Session Cache:
    SSLSessionCache         shmcb:${APACHE_RUN_DIR}/ssl_scache(512000)
    SSLSessionCacheTimeout  300

    # SSL Cipher Suite:
    SSLCipherSuite          HIGH:!aNULL:!MD5:!3DES:!ARIA:!CAMELLIA:!AES128:!AES256-SHA:!AES256-SHA256:!AES256-GCM-SHA384:!AES256-CCM8:!AES256-CCM:!DHE-RSA-AES256-SHA:!DHE-RSA-AES256-SHA256
    SSLHonorCipherOrder     on

    SSLOpenSSLConfCmd DHParameters "/etc/ssl/dhparams4096.pem"
    SSLOpenSSLConfCmd ECDHParameters automatic
    SSLOpenSSLConfCmd Curves secp521r1:secp384r1

    # The protocols to enable
    SSLProtocol             -ALL +TLSv1.2

    # Fuer Debian 10 mit TLS 1.3
    # Untenstehende Zeile einkommentieren, Zeile 35 auskommentieren
    #SSLProtocol -ALL +TLSv1.2 +TLSv1.3

    # OCSP Stapling
    SSLUseStapling          on
    SSLStaplingResponderTimeout 5
    SSLStaplingReturnResponderErrors off
    SSLStaplingCache        shmcb:${APACHE_RUN_DIR}/ssl_ocsp(512000)

    # Whether to forbid non-SNI clients to access name based virtual hosts.
    # Default: Off
    #SSLStrictSNIVHostCheck On

</IfModule>

DH-Keys erzeugen:

openssl dhparam -out /etc/ssl/dhparams4096.pem 4096

Dieser Vorgang kann je nach System einige Minuten in Anspruch nehmen. Zeit für einen Tee oder Kaffee. 🙂

Anschließend muss der Webserver Apache2 neu gestartet werden:

service apache2 restart

Das Ergebnis bei Qualys SSL Server Test kann sich sehen lassen:

Die SSL Protokolle und Cipher Suites müssen natürlich mit der Zeit gepasst werden. Aktuell ist TLS 1.3 im Anmarsch und Cipher Suites  mit *CBC* werden nach und nach als unsicher eingestuft.

12.07.2019, 15:30 Uhr
Anpassung von SSLCipherSuite für die neuste Version des Apache2 bzw. OpenSSL unter Ubuntu 18.04.2 LTS.

02.08.2019, 22:29 Uhr

Anpassung von SSLCipherSuite für Qualys SSL Server Test.

25.11.2019, 11:25 Uhr

Divsere Anpassungen damit Key Exchange 100 Punkte erhält.

27.11.2019, 10:38 Uhr

Ich habe immer wieder per E-Mail Nachfragen bezüglich der Kompatiblität zu Debian 10 (Buster) erhalten. Ich habe daher die obige Konfiguration heute Vormittag getestet. Soweit keine Probleme oder grobe Ausfälligkeiten. Bis auf eine Sache: Mit der verwendung von TLS 1.3 (ist unter Debian 10 möglich, unter Ubuntu 18.04.x aktuell noch nicht)  sind aktuell bei SSL Labs in der Kategorie „Cipher Strength“ maximal 90 Punkte möglich. Dies ist auf die Cipher Suite „TLS_AES_128_GCM_SHA256“ zurückzuführen. Ich habe dazu ein Issue auf Github bei SSL Labs gefunden. Dort werden auch mögliche Workarounds aufgeführt, falls jemand unbedingt 100 Punkte haben möchte.

2
Hinterlasse einen Kommentar

avatar
1 Kommentar Themen
1 Themen Antworten
0 Follower
 
Kommentar, auf das am meisten reagiert wurde
Beliebtestes Kommentar Thema
2 Kommentatoren
dwJulian Letzte Kommentartoren
  Abonnieren  
neueste älteste
Benachrichtige mich bei
Julian
Gast
Julian

Danke, habe durch dich jetzt auch A+ erreicht 🙂

Back to top