Artikel kostenlos lesen

Certification Path Validation Test Tool : Ein Testwerkzeug für die Überprüfung der X.509-Zertifikatspfadvalidierung

Digitale Zertifikate sind bei der authentifizierten (und verschlüsselten) Kommunikation ein wichtiger Vertrauensanker. Fehler bei der Gültigkeitsprüfung dieser Zertifikate können sicherheitskritisch sein. Ein BSI-Projekt soll dazu beitragen, dass Routinen zur Verifikation von digitalen Zertifikaten korrekt implementiert werden.

Lesezeit 4 Min.

Von Armin Cordel und Dr. Heike Hagemeier, BSI

Für digitale Kommunikation werden Zertifikate zur Bestätigung der Identitäten der Kommunikationspartner beziehungsweise von öffentlichen Schlüsseln für Public-Key-Verfahren benötigt. Diese digitalen Zertifikate dienen der Bindung der öffentlichen Schlüssel an die Identität der Teilnehmer. Ein Teilnehmer kann dabei beispielsweise der Server einer Bank oder eines anderen Onlinedienstes sein oder eine Person, die ein Dokument oder eine E-Mail signiert oder entschlüsselt.

Die Verwaltung digitaler Zertifikate erfolgt in Public-Key-Infrastrukturen (PKI). Eine PKI ist eine Zertifizierungshierarchie, die wie ein Baum strukturiert ist: An der Wurzel dieses Baumes sitzt die Root-Certification-Authority (Root-CA). Diese stellt sich ein selbstsigniertes Zertifikat aus, mit dem sie dann weitere Zertifikate für untergeordnete Certification-Authorities (Sub-CAs) signiert. Die Blätter des Baumes werden von den Zertifikaten der Teilnehmer gebildet. Einen Pfad von der Wurzel bis zu einem Blatt nennt man eine Zertifikatskette.

Um die Bindung der Identität eines Teilnehmers an seinen Schlüssel durch einen weiteren Teilnehmer (bzw. dessen Applikation) prüfen zu können, ist eine zuverlässige Verifikation dieser Zertifikatsketten unerlässlich (Zertifikatspfadvalidierung, engl.: Certification Path Validation). Beispielsweise muss ein Browser die Identität des Servers einer Bank anhand des vom Server übermittelten Zertifikats überprüfen können. Werden von Anwendungen aufgrund von Programmierfehlern fehlerhafte, ungültige Zertifikatsketten akzeptiert, so stellt dies in ähnlicher Weise ein Sicherheitsrisiko dar, wie Fehler in den Implementierungen der kryptografischen Algorithmen, da nach erfolgter Zertifikatsverifikation der in dem Zertifikat enthaltene öffentliche Schlüssel verwendet wird, um einen Teilnehmer zu authentifizieren oder um Nachrichten zu verschlüsseln.

Es gibt verschiedene Formate für digitale Zertifikate, wobei X.509 (in der Version 3 [1]) der gängigste Standard ist. Er definiert ein Rahmenwerk für Public-Key-Infrastrukturen und digitale Zertifikate, das für die jeweiligen Anwendungsfelder weiter konkretisiert werden kann. Für die Nutzung von X.509-Zertifikaten im Internet hat die Internet Engineering Taskforce (IETF) Konkretisierungen zum X.509-Standard in RFC 5280 [2] festgelegt – darin sind das Format von X.509-Zertifikaten mit allen Erweiterungsmöglichkeiten sowie ein Algorithmus zur Zertifikatspfadvalidierung ausführlich beschrieben.

Dennoch sind in der Vergangenheit in vielen bekannten Kryptobibliotheken Fehler in den Routinen zur Zertifikatspfadvalidierung gefunden worden. Forscher der Stanford University und der University of Texas haben im Herbst 2012 die Zertifikatsverifikation in TLS-Bibliotheken (z. B. OpenSSL) und Bibliotheken für den Datentransport (z. B. Apache HttpClient, cURL) untersucht [3] und zogen folgendes Fazit: „Our main conclusion is that SSL certificate validation is completely broken in many critical software applications and libraries.“

Ein weiteres Team aus Forschern der University of Texas hat im Mai 2014 in den meistgenutzten TLS-Implementierungen nach Fehlern in der Zertifikatsverifikation gesucht [4]. Ihr Ansatz dabei war, aus bestehenden, im Internet verfügbaren Zertifikaten neue Zertifikate („Frankencerts“) zusammenzufügen. Dadurch entdeckten sie verschiedene Fehler bei der Zertifikatsverifikation in Kryptobibliotheken wie PolarSSL und GnuTLS.

Abbildung 1

Abbildung 1: Beispiel einer PKI- Hierarchie. Pfeile sind Zertifikate und Kasten sind Einheiten/PKI-Teilnehmer

Im BSI-Projekt „Erstellung einer Technischen Richtlinie und Entwicklung eines Testtools zur Zertifikatsverifikation“ mit dem Auftragnehmer MTG AG und Unterauftragnehmer cryptosource GmbH wurde daran gearbeitet, Anwendern und Unternehmen Hinweise und ein Testtool zur Verfügung zu stellen, um Fehler in Routinen zur Zertifikatspfadvalidierung zu verhindern bzw. aufzuspüren.

Dafür wurden zunächst eine Analyse von RFC 5280 und weiteren relevanten Standards durchgeführt, die Implementierung der Zertifikatsverifikation in ausgewählten Bibliotheken untersucht und eine Übersicht über bisher veröffentlichte Fehler und Testwerkzeuge im Zusammenhang mit der Verifikation von X.509-Zertifikaten erstellt. Anhand der Ergebnisse dieser Analysephase wurden Empfehlungen für die Nutzung und Verifikation von X.509-Zertifikaten, die in technische Richtlinien (z. B. TR-02102 [5]) einfließen sollen, sowie eine Testspezifikation, die verschiedene Anwendungsszenarios (z. B. TLS, IPsec) abdeckt, entwickelt.

Zudem wurde im Auftrag des BSI von den Auftragnehmern ein Open-Source-Testtool implementiert, mit dessen Hilfe Routinen zur Verifikation von X.509-Zertifikaten beziehungsweise Zertifikatsketten untersucht werden können. Für jeden der Testfälle aus der Testspezifikation erstellt das Testtool eine Reihe von Zertifikaten – diese bilden abhängig vom Testfall eine gültige oder eine fehlerhafte Zertifikatskette. In einzelne Zertifikate werden dafür bewusst Fehler eingebaut. Beispielsweise kann der Gültigkeitszeitraum des Zertifikats in der Vergangenheit liegen oder die Signatur über das Zertifikat fehlerhaft sein. Mittels dieser (fehlerhaften) Zertifikatsketten können dann (Implementierungs-)Fehler in den Verifikationsroutinen detektiert werden. Dieses Testtool wurde nun unter dem Namen „Certification Path Validation Test Tool“ (kurz CPT) veröffentlicht.

Abbildung 2

Abbildung 2: Beispiel einer Einsatzmöglichkeit des CPT – hierbei wird die Zertifikatsverifikation einer Browseranwendung getestet.

Certification Path Validation Test Tool

Das „Certification Path Test Tool“ (CPT) ist ein Satz quelloffener Tools, die das Testen der X.509-Zertifikatspfadvalidierung nach RFC 5280 in Applikationen und Bibliotheken ermöglichen. Es bietet

  • einen vordefinierten Satz von Testfällen, der die wichtigen Vorgaben des RFC 5280 abdeckt,
  • die Möglichkeit der Erzeugung (fehlerhafter) X.509-Zertifikatsketten und Sperrlisten aus einer XML-Testspezifikation mittels einer generischen Engine,
  • einfache Erweiterbarkeit und Anpassbarkeit der mitgelieferten Testfälle für spezifische Anforderungen oder Anwendungskontexte sowie
  • zusätzliche Tools für die Durchführung der Testfälle gegen TLS- (z. B. Browser) und IPsec-Implementierungen (z. B. strongSwan-Kryptobibliothek).

Das „Certification Path Validation Test Tool“ steht auf den Webseiten des BSI unter www.bsi.bund.de/ CPT zum Download bereit und ist auch auf der Plattform GitHub verfügbar (https://github.com/MTG-AG/cpt bzw. https://github.com/cryptosource-GmbH/cpt-add-testtools für die zusätzlichen Tools).

Diesen Beitrag teilen: