Kaum ein Webserver welcher heute kein https anbietet. Die meisten davon laufen mit einem B-Rating. Das geht doch auch besser, oder?
Nehmen wir als Beispiel mal ein frisch installiertes Ubuntu 20.04 her mit nackt installiertem apache2 und aktiviertem https. Der erreicht sowie er ist bei Qualys SSL Labs ein B-Rating.
Das ist doch gut, oder? Damit folgt man laut SSL Labs auf jedem Fall dem Trend: https://www.ssllabs.com/ssl-pulse/. Naja, das ist auf jeden Fall schon mal nicht schlecht. Das geht aber auch besser.
Ausgangsbasis
Wie bereits erwähnt dient als Ausgangsbasis für dieses Beispiel ein apache2 auf Ubuntu 20.04. Sinngemäß kann dies selbstverständlich auf nginx, Emailserver wie postfix und sogar auf andere Distributionen übertragen werden.
Eine Hausaufgabe habe ich allerdings im Vorfeld bereits gemacht: Ich verwende für den Test ein Let’sEncrypt Zertifikat und bei mir gibt es bereits folgenden Eintrag im DNS:
mein@ghm:~ # host -tcaa gehirn-mag.net gehirn-mag.net has CAA record 0 issue "letsencrypt.org"
Dies bewirkt, dass der Balken für „DNS Certification Authority Authorization (CAA) Policy found for this domain“ bereits grün wird. Zur Erklärung: CAA ist ein Eintrag im DNS mit dem man angeben kann von wem das Zertifikat der Webseite ausgestellt wurde.
Hier noch ein paar Links mit weiteren Informationen zu den vielen Begriffen im letzten Abschnitt:
- https://letsencrypt.org/de/
- https://certbot.eff.org/
- Zum Thema CAA: https://de.wikipedia.org/wiki/DNS_Certification_Authority_Authorization und https://tools.ietf.org/html/rfc6844
Konfigurationsmarathon
Ok, so viel muss man gar nicht ändern. Moderne Distributionen machen die meisten Dinge bereits von Haus aus gut. Einige Sachen in der folgenden Liste haben jetzt weniger mit dem Rating zu tun, sind dennoch sehr sinnvoll wenn man die entsprechende Konfig ohnehin schon unter dem Gesichtspunkt „Sicherheit“ in die Hand nimmt.
ServerTokens Prod ServerSignature Off # Hierfür muss unter Ubuntu das Modul "headers" aktiviert sein Header always set Strict-Transport-Security: "max-age=31536000; includeSubDomains; preload"
Zur Erklärung: ServerTokens
und ServerSignature
schalten ab, dass apache2 in Fehlermeldungen usw. seine Versionsnummer verrät. Genau genommen reicht ServerSignature
bereits aus – schaden tut das zusätzliche passende setzen von ServerTokens
dennoch nicht 😉
HTTP Strict-Transport-Security, kurz HSTS, ist ein Verfahren bei dem man dem Webbrowser mitteilt, dass die besuchte Seite bitte immer nur via https zu besuchen sei. Das soll für den Moment reichen, Details findest Du in den unten angegebenen Links. Ob man den HSTS-Header in der security.conf
global vornimmt oder in den jeweiligen VirtualHosts
ist einem selbst überlassen. Wenn es schnell und für alle sein soll ist die security.conf
sicherlich eine gute Wahl.
Hier die Links mit weiteren Details:
- https://httpd.apache.org/docs/2.4/de/mod/core.html#serversignature
- https://de.wikipedia.org/wiki/HTTP_Strict_Transport_Security
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
Die zweite Datei welche zu bearbeiten ist – auch hier kann man sich überlegen ob man das global haben will oder in die jeweiligen VirtualHosts rein schiebt. Du bist unsicher? Dann geh auf Nummer sicher und aktivere die folgenden Konfigeinträge wie gezeigt serverweit für alle.
# Ich hab es nie erwähnt, aber für https muss unter Ubuntu das Modul "ssl" aktiviert werden. # Aber das hast Du ja vermutlich bereits längst gemacht ;-) SSLCipherSuite ALL:!RSA:!CAMELLIA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SHA1:!SHA256:!SHA384 SSLHonorCipherOrder on SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 # Stapling SSLUseStapling On SSLStaplingCache "shmcb:${APACHE_RUN_DIR}/stapling_cache(128000)"
Ok, jetzt wird es wüst. In dem Artikel geht es nur darum, was man tun muss um ein A+-Rating zu bekommen. Kurz zusammengefasst was diese Direktiven machen: SSLCipherSuite
beschränkt die angebotenen Verschlüsselungsverfahren auf die derzeit als sicher geltenden, SSLHonorCipherOrder
sorgt dafür, dass die stärkste Verschlüsselung verwendet wird welche Browser und Server unterstützen, SSLProtocol
deaktiviert die als veraltet angesehen SSL bzw. TLS Versionen. OCSP-Stapling ist ein Verfahren zur Statusabfragen bezüglich Gültigkeit von Zertifikaten.
Das soll hier an der Stelle für den Moment an Informationen reichen. Deswegen hier auch nur zwei Links mit weiteren Informationen dazu die als Ausgangsbasis für die eigenen Recherchen dienen können:
- https://httpd.apache.org/docs/2.4/ssl/ssl_howto.html
- https://de.wikipedia.org/wiki/Online_Certificate_Status_Protocol_stapling
Das alles ist ein großes, spannendes Thema. Bei Interesse lohnt es sich da tiefer einzuarbeiten. Meldet doch via den Kommentaren oder per Email ob ich hier im Blog weitere Details dazu liefern soll.
Fazit
So, jetzt aber: Gerade mal 8 Einstellungen waren für den Apache unter Ubuntu zu ändern. Gar nicht viel wenn man es genau nimmt. Und was kommt heraus? Na seit ihr gespannt? Hier, bitte schön:
Wer jetzt noch mag kann sich auf die Suche machen wie man „Key Exchange“ und „Cipher Strength“ auf 100 bringt. Wenn Du es schaffst wäre es sehr nett Du würdest einen entsprechenden Eintrag in den Kommentaren hinterlassen. Mir reicht es an der Stelle bereits, das A+-Rating hab ich 🙂