Inhaltsverzeichnis
Letzte Aktualisierung am 20.07.2022, 15:07:05 Uhr
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.
Vorwort
Aktuell wird der Webserver Apache2 unter Ubuntu 20.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>
Debian 9 und Ubuntu 18.04
<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-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA
    SSLHonorCipherOrder     on
    SSLOpenSSLConfCmd DHParameters "/etc/ssl/dhparams4096.pem"
    SSLOpenSSLConfCmd ECDHParameters automatic
    SSLOpenSSLConfCmd Curves secp521r1:secp384r1
    # The protocols to enable
    SSLProtocol             -ALL +TLSv1.2
    # 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. 🙂
Debian 10 / Ubuntu 20.04
<IfModule mod_ssl.c>
    SSLRandomSeed startup builtin
    SSLRandomSeed startup file:/dev/urandom 512
    SSLRandomSeed connect builtin
    SSLRandomSeed connect file:/dev/urandom 512
    # 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 configuration
    SSLProtocol                         all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite                      ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA
    SSLHonorCipherOrder                 on
    SSLCompression                      off
    SSLSessionTickets                   off
    SSLOpenSSLConfCmd                   Curves secp521r1:secp384r1
    # 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>
Abschließend muss die neue Konfiguration noch in den Webserver Apache2 geladen werden:
service apache2 reload
Resultat
Daas Ergebnisbei Qualys SSL Server Test für Debian 9 / Ubuntu 18.04:
Daas Ergebnisbei Qualys SSL Server Test für Debian 10 / Ubuntu 20.04:
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.
17.09.2020, 21.39 Uhr
Den kompletten Artikel für Debian 10 und Ubuntu 20.04 überarbeitet. Zusätzlich noch einen Screenshot für das Referenz Ergebnis hinzugefügt.


[…] Die Seite wird nun ausschließlich über SSL (HTTPS) ausgeliefert. Wer gerne noch die Sicherheits erhöhen möchte, empfehle ich den Artikel Apache – Anpassung SSL Protokolle und Cipher Suites. […]
[…] Für die Anpassung der SSL Protokolle und dazugehörigen Cipher Suites verweise ich auf den Beitrag Apache – Anpassung SSL Protokolle und Cipher Suites. […]
[…] werde immer wieder gefragt, ob es zu dem Beitrag Apache – Anpassung SSL Protokolle und Cipher Suites auch eine Referenz für Nginx gibt? Der einzigste Beitrag, der das kurz und bündig beschreibt ist […]
Vielen Dank für die ausführliche Erklärung. Wer, wie ich „Let’s Encrypt“ nutzt und trotz geänderter ssl.conf Einstellungen keine Verbesserung sieht, der hat die Rechnung ohne einer ssl Einstellung von Let’s Encrypt gemacht. Sie kommt leider erst nach der globalen Einstellung von apache2 zum Tragen. Die Lösung: Man muss entweder die /etc/letsencrypt/options-ssl-apache.conf ebenfalls bearbeiten: SSLProtocol -all +TLSv1.2 +TLSv1.3 Oder die Datei aus den vhost Einstellungen entfernen. Der Grund dafür ist, dass die Einstellungen des apache2 zwar global gelten, aber durch die nachfolgenden Einstellungen von let’s encrypt überschrieben werden. Siehe auch hier: (Kommentar von ZetaRevan: https://community.letsencrypt.org/t/disabling-tls-1-0-and-tls-1-1/112816/10 Jetzt bin ich bei der Bewertung… Weiterlesen »
Danke, habe durch dich jetzt auch A+ erreicht 🙂
Sehr gerne. Vielen Dank für die Blumen!
Ich habe die letzten Tage den Beitrag nochmals ergänzt, damit durchgehend 100 Punkte erreicht werden können. An der Stelle sei aber nochmals erwähnt, dass das noch keine sicheren (Web)server schafft sondern nur die Verbindungssicherheit entsprechend gewährleistet.