HTTPS: Private Schlüssel auf dem Webserver
Zu einem Zertifikat für verschlüsselte HTTPS-Verbindungen gehört ein privater Schlüssel. Doch was, wenn der Schlüssel auf dem Webserver landet - und dann nicht mehr privat ist? Wir fanden zahlreiche Webseiten, die ihren privaten Schlüssel zum Herunterladen anbieten.
This text is also available in English.
Kunden des Webmail-Anbieters Firemail wurden vor einigen Tagen mit einer Fehlermeldung überrascht: Das Zertifikat für die Webseite firemail.de war ungültig. Comodo hatte es zurückgezogen, nachdem wir bei unseren Recherchen darauf gestoßen sind, dass der zugehörige private Schlüssel einfach von der Seite heruntergeladen werden konnte.
Firemail war mit diesem Problem nicht alleine. Wir fanden eine ganze Reihe von Seiten, bei denen die privaten Schlüssel nicht mehr privat waren und versehentlich über den Webserver veröffentlicht wurden. Insgesamt gelangten wir in den Besitz von privaten Schlüsseln für 90 gültige Webseitenzertifikate. Dafür haben wir lediglich versucht, den privaten Schlüssel mit gängigen Dateinamen herunterzuladen. Im Fall von Firemail lautete der Dateiname "server.key".
Dateinamen aus beliebten Web-Anleitungen
Auch privatekey.key, myserver.key und key.pem waren Dateinamen, mit denen private Schlüssel auf Webseiten abgelegt waren. Am erfolgreichsten verlief die Suche aber nach Dateinamen mit dem Schema [domainname].key. Alle diese Dateinamen werden in Anleitungen zur Zertifikatserstellung verwendet, die man über eine einfache Google-Suche finden kann.
Zu jedem Webseitenzertifikat gehört ein privater Schlüssel. Aber wie der Name schon sagt - dieser Schlüssel muss natürlich privat bleiben und darf auf keinen Fall Unbefugten in die Hände fallen. Andernfalls ist die Sicherheit, die HTTPS-geschützte Verbindungen bieten, dahin. Ein Angreifer kann mithilfe des privaten Schlüssels einen Man-in-the-Middle-Angriff durchführen und dabei Daten mitlesen und manipulieren.
Wenn eine Zertifizierungsstelle von einem kompromittierten Zertifikat erfährt, dann sollte sie dieses zurückziehen. Ob ein Zertifikat zurückgezogen ("revoked") wurde, kann man mittels des OCSP-Protokolls prüfen.
Der Nutzen des OCSP-Protokolls ist umstritten. Browser hatten OCSP in der Vergangenheit in einem sogenannten Soft-Fail-Modus implementiert. Falls der OCSP-Server nicht erreichbar war, wurde das Zertifikat trotzdem als gültig anerkannt. Da dies kaum Sicherheit bietet, hat sich Chrome entschlossen, die OCSP-Checks ganz abzuschalten. Abhilfe schaffen könnte eine Kombination aus OCSP Stapling und der Must-Staple-Erweiterung in Zertifikaten, allerdings ist die Unterstützung von OCSP Stapling in gängigen Webservern bisher nur rudimentär vorhanden.
Doch obwohl OCSP bislang nur eingeschränkt funktioniert, ist es bislang der gängige Mechanismus, mit dem eine Zertifizierungsstelle ein Zertifikat als ungültig markieren kann.
24 Stunden Frist für kompromittierte Zertifikate
Laut den Baseline Requirements - einem Regelwerk, auf das sich Zertifizierungsstellen und Browserhersteller geeinigt haben - sollten Zertifizierungsstellen im Falle kompromittierter Schlüssel ein Zertifikat innerhalb von 24 Stunden zurückziehen.
Wir haben alle Zertifikate, zu denen wir private Schlüssel gefunden haben, an die entsprechenden Zertifizierungsstellen gemeldet. In den meisten Fällen geht dies schlicht per E-Mail. Lediglich Symantec und dessen Tochterfirmen sowie Gandi haben ein Webformular für die Meldungen. Bei Symantec musste man auch ein Captcha vor dem Absenden des Formulars ausfüllen.
Eine Besonderheit gibt es bei Let's Encrypt: Die kostenlose Zertifizierungsstelle setzt bekanntlich besonders stark auf Automatisierung und nutzt das ACME-Protokoll. Auch das Zurückziehen von Zertifikaten ist automatisiert: Wer im Besitz eines privaten Schlüssels zu einem Zertifikat ist kann dieses selbst zurückziehen, beispielsweise mit dem Tool Certbot.
Mozilla hat sich kürzlich ebenfalls mit der Frage befasst, wen man im Fall kompromittierter Zertifikate kontaktiert. Im Rahmen der regelmäßig an Zertifizierungsstellen verschickten CA Communications fragte Mozilla diese, wie man solche Probleme am besten meldet. Eine Liste der Antworten ist online verfügbar.
Die 24-Stunden-Frist scheinen viele Zertifizierungsstellen bislang nicht sehr ernst zu nehmen. Bei fast allen betroffenen Zertifizierungsstellen - Comodo, DigiCert, Gandi, Globalsign, Go Daddy und Symantec - dauerten die Reaktionen manchmal länger als 24 Stunden. Fairerweise sei dazu gesagt: In einem Fall meldeten wir die kompromittierten Zertifikate an einem Samstag. Allerdings sehen die Baseline Requirements keine Wochenendausnahme vor. Neben Let's Encrypt hat lediglich StartCom immer innerhalb der 24-Stunden-Frist reagiert. Allerdings wird StartCom zur Zeit sowieso von gängigen Browsern nicht akzeptiert.
Besonders viel Zeit ließen sich Gandi und Globalsign. Globalsign brauchte vier Tage, um ein gemeldetes Zertifikat zurückzuziehen. Gandi betreibt seine Zertifizierungsstelle nicht selbst, es handelt sich um eine von Comodo betriebene Zertifizierungsstelle. Als Comodo von dem Vorfall erfuhr, wurden die Zertifikate umgehend zurückgezogen.
Neues Zertifikat mit altem Schlüssel
Einen besonders kuriosen Fall gab es bei einem Comodo-Zertifikat: Zwar zog Comodo das Zertifikat nach kurzer Zeit zurück, allerdings wurde kurz darauf ein neues Zertifikat mit demselben privaten Schlüssel erstellt. Als wir dies an Comodo gemeldet haben, teilte man uns mit, dass dasselbe bei einem weiteren Zertifikat passiert war. In beiden Fällen hat Comodo das erneut ausgestellte Zertifikat ebenfalls zurückgezogen.
Dieser Vorfall zeigt einmal mehr, dass Daten auf Webservern ein bislang unterschätztes Sicherheitsrisiko darstellen. Vor Kurzem hatten wir berichtet, dass die Deutsche Post und zahlreiche andere Firmen private Kundendaten in Form von SQL-Dumps auf ihren Webservern verfügbar machten. Auch Git-Repositories in Webverzeichnissen führen immer wieder dazu, dass geheime Daten wie Passwörter öffentlich abrufbar sind.
Auch an anderen Stellen wurden zuletzt private Schlüssel zu gültigen Zertifikaten gefunden. Der Softwareentwickler Koen Rouwhorst fand kürzlich einen privaten Schlüssel, der in einer Applikation von Cisco integriert war. Auch in einer Spotify-Software tauchte ein solcher Schlüssel auf. Weiterhin fand Rouwhorst zahlreiche private Schlüssel in Github-Repositories.
Sorry, aber wer keys (und dann wohl auch die certs) im docroot seines webservers ablegt...
Ich gehe mal von aus du meinst die Situation bei Webhostern? Da habe ich schon lange...
es ist aber billiger. und das reicht schon, damit es so gemacht wird. außerdem verhindert...
ich meine /etc/ssl/... bei den meißten Linux Distris.