Die vergangenen Monate zeigten deutlich, dass SSL nur ein begrenztes Maß an Sicherheit gewährleistet.
Die verschlüsselte SSL Verbindung hat zunächst mehrere Probleme.
Ein erstes Problem ist der Seitenaufruf, da ein Angreifer zum Beispiel während einer Man In The Middle Attacke die verschlüsselte Verbindung verweigern und eine Umleitung zu einem unverschlüsselten Protokoll wie HTTP erzeugen kann.
Um dies zu verhindern kann der Webserver (z.B. Apache oder Nginx) so konfiguriert werden, dass dieser die HTTPS Erweiterung HTTP Strict Transport Security HSTS nutzen kann.
Wird dieses Verfahren angewendet, so wird dem aufrufenden Browser die Anweidung mitgesendet in Zukunft die Seite ausschließlich über HTTPS und damit verschlüsselt aufzurufen.
Ein unverschlüsselter Seitenaufruf ist damit ausgeschlossen, da der Browser diese Anweisung in seiner Datenbank speichert und künftig alle HTTP aufrufe verweigert.
Dabei kann der Server mit der HSTS Anweisung auch ein maximales Alter der Anweisung mitsenden. Dies könnte ein Jahr sein. Bei jedem neuen Aufruf der Seite wird diese Lebzeit wieder neu gesetzt.
Allerdings muss hier auch erwähnt werden, dass die Technologie auch einen Nachteil hat. Denn Unternehmen können HSTS zum Tracking einsetzen, was auch im privaten Modus möglich ist.
Um nun auch noch zu verhindern, dass ein Angreifer verschlüsselte Kommunikation mit Hilfe von gefälschten oder manipulierten Zertifikaten mit liest, kann auf "Http Public Key Pinning" kurz HPKP zurückgegriffen werden.
Bei diesem Verfahren sendet der Webserver den Hash des öffentlichen Schlüssels BASE64 codiert an den Browser. Zudem wird dem Browser mitgeteilt bis wann dieser Key gültig ist. Dieser speichert den Wert für die Zukunft. Sollte bei künftigen Seitenaufruf das Zertifikat nicht mit dem bereits gespeicherten Wert übereinstimmen, wird die Verbindung verweigert und der Besucher gewarnt.
Vorteil dieses Verfahrens ist dabei, dass der Besucher diese Warnung nicht übergehen kann, wie es bei anderen Zertifikatswarnungen der Fall ist.
Wird dieses Verfahren eingesetzt sollte unbedingt ein zweites Public - Private Key Paar erstellt und als Pinning mitgeliefert werden. Hintergrund ist hier, dass es durchaus sein kann, dass das verwendete Zertifikat ausgetauscht werden muss, weil es beispielsweise zu erneuern ist.
In dem Fall könnte, ohne zweiten Key, der Benutzer auch nicht mehr auf die Website zugreifen, da das gelieferte Zertifikat nicht mehr mit dem gespeicherten Key übereinstimmt.
Um dieses Problem zu umgehen wird vorsorglich ein zweiter Satz erstellt, der jedoch nicht verwendet wird.
Erstellen des "Public Key Pinning"
Unter Linux können die Pins problemlos mit openssl erstellt werden. Ich gehe davon aus, dass bereits zwei Zertifikatsrequest mit den dazugehörigen Private- und Public Keys erstellt wurden.
Linux Shell Kommando zum Erstellen eines Pins:
openssl pkey -in aktiver.key -pubout | grep -v PUBLIC | base64 -d | openssl dgst -sha256 -binary
Ergebnis: Pinning Key
Diesen Vorgang wird dann für den Backup-Key wiederholt.
HSTS und HPKP mit Apache Webserver
Zunächst ist zu beachten, dass das Modul mod_headers aktiviert sein muss. Dies kann mit dem Linux Shell Kommando a2enmod headers erfolgen.
Anschließend muss die virtualHost-Datei der betreffenden Domain bearbeitet werden.
<VirtualHost XXXX:443> ServerAdmin Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein! ServerName www.yyy.com Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" Header always set Public-Key-Pins: 'max-age=31536000; pin-sha256="activeKey"; pin-sha256="backupKey"' </VirtualHost> |
Wird nun ein reaload oder restart des Webservers durchgeführt, werden die Änderungen sofort wirksam.
HSTS und HPKP mit Nginx
Bei Nginx werden die Änderungen in der HTTPS Konfiguration vorgenommen.
add_header Strict-Transport-Security max-age=31536000 add_header Public-Key-Pins 'max-age=31536000; pin-sha256="activeKey"; pin-sha256="backupKey"' |
Auch der Webserver Nginx muss die Konfiguration natürlich neu laden, was mit reload oder restart herbeigeführt werden kann.
Für beide Webserver gilt, dass der Parameter "includeSubDomains" dazu führt, dass die Angaben auch auf Subdomains wirken.
Wurde die Konfiguration erfolgreich durchgeführt, kann dies mit Hilfe der Entwicklertools der Webbrowser überprüft werden.
Dort wird angezeigt, wenn HSTS aktiviert ist und auch die Pinning-Keys werden angezeigt.
Abschließende Empfehlung für eine sichere Kommunikation mit Websites:
Überprüfen Sie Ihre Webserverkonfiguration mit Diensten wie www.sslabs.com.
Mit diesen Diensten erfahren Sie welche Sicherheitslücken evtl bestehen und welche Protokolle/Verschlüsselungen abgeschaltet werden sollten.
Der Screenshot zeigt das Ergebnis für diese Website bei SSLLabs.
Durch einen Klick auf die jeweilige IP-Adresse im Ergebnis werden auch die Schwachstellen angezeigt.