X.509
aus Wikipedia, der freien Enzyklopädie
X.509 ist ein ITU-T-Standard für eine Public- Key-Infrastruktur und derzeit der wichtigste Standard für digitale Zertifikate. Die aktuelle Version ist X.509v3.
Inhaltsverzeichnis |
[Bearbeiten] Geschichte
X.509 wurde erstmals 1988 veröffentlicht. Die Entwicklung von X.509 begann in Verbindung mit dem X.500-Standard (der nie vollständig implementiert wurde) und setzt ein striktes hierarchisches System von vertrauenswürdigen Zertifizierungsstellen (engl. certificate authority, kurz CA) voraus, die Zertifikate erteilen können. Dieses Prinzip steht im Gegensatz zum Web of Trust-Modell, bei dem jeder ein Zertifikat „unterschreiben“ und damit seine Echtheit beglaubigen kann (siehe z. B.: PGP).
Version 3 von X.509 (X.509v3) beinhaltet die Flexibilität, mit Profilen erweitert zu werden. Das wichtigste Profil entwickelte die IETF im Zusammenhang des PKIX-Standards. Der Begriff „X.509-Zertifikat“ bezieht sich meist auf das IETF-Profil des X.509-v3-Zertifikatstandards wie in RFC 3280 definiert.
[Bearbeiten] Zertifikate
Ein von einer Zertifizierungsstelle ausgestelltes digitales Zertifikat wird im X.509-System immer an einen „Distinguished Name“ oder einen „Alternative Name“ wie eine E-Mail-Adresse oder einen DNS-Eintrag gebunden.
Nahezu alle Webbrowser beinhalten eine vorkonfigurierte Liste vertrauenswürdiger Zertifizierungsstellen, deren ausgestellten SSL-Zertifikaten der Browser vertraut. Obwohl grundsätzlich für den Benutzer die Möglichkeit besteht, diese Liste zu bearbeiten, wird in den allerwenigsten Fällen Gebrauch von dieser Möglichkeit gemacht.
X.509 beinhaltet außerdem einen Standard, Zertifikate seitens der Zertifizierungsstelle wieder ungültig zu machen, indem die Zertifizierungsstelle ungültige Zertifikate in Zertifikatsperrlisten (certificate revocation list, kurz CRL) führt.
[Bearbeiten] Struktur eines X-509 v3 Zertifikats
- Zertifikat
- Version
- Seriennummer
- Algorithmen ID
- Aussteller
- Gültigkeit
- von
- bis
- Subject
- Subject Public Key Info
- Public Key Algorithmus
- Subject Public Key
- Eindeutige ID des Ausstellers (optional)
- Eindeutige ID des Inhabers (optional)
- Erweiterungen
- ....
- Zertifikat Signaturalgorithmus
- Zertifikat Signatur
Herausgeber und Inhaber ID wurden in Version 2 eingeführt, Erweiterungen in Version 3.
[Bearbeiten] Erweiterungen
Erweiterungen oder Extensions sind inzwischen ein sehr wichtiger Bestandteil eines Zertifikates geworden. Erweiterungen haben die folgende Unterstruktur:
- Erweiterungs-ID
- Flag (kritisch/unkritisch)
- Value
Jede Erweiterung hat eine spezifische ID. Die Flags dienen der schrittweisen Einführung einer neuen Erweiterung. So sind neue Erweiterungen zu Beginn als unkritisch markiert. Eine Implementierung, die auf eine unbekannte unkritische Erweiterung trifft, kann diese ignorieren. Wird eine Erweiterung mit der Zeit allerdings nach ausreichendem Testen auf kritisch gesetzt, so muss ein Zertifikat mit unbekannter kritischer Erweiterung als ungültig erachtet werden. Beispiele für Erweiterungen sind
- KeyUsage: gibt an, für welche Anwendung dieses Zertifikat ausgestellt wurde. Ein CA-Zertifikat muss hier bspw. keyCertSign und CRLsign eingetragen haben
- BasicConstraints: Transitivitätsvertrauen ist ohne diese Erweiterung unmöglich. Die BasicContraints bestehen aus
- CA: gibt an, ob das Zertifikat zu einer CA gehört. In einer Zertifikatskette muss jedes Zertifikat außer das der letzten Instanz (des Users/Servers) als CA markiert sein
- PathLen: gibt an, wie lang die Zertifikatskette maximal sein darf
[Bearbeiten] Dateinamenserweiterungen für Zertifikate
Übliche Dateinamenserweiterungen für X.509-Zertifikate sind:
- .CER – DER-kodiertes Zertifikat oder Zertifikatsfolgen
- .DER – DER-kodiertes Zertifikat
- .CRT – DER- oder Base64-kodiertes Zertifikat
- .PEM – Base64-kodiertes Zertifikat, umschlossen von “-----BEGIN CERTIFICATE-----" und “-----END CERTIFICATE-----"
- .P7B – Siehe .p7c
- .P7C – PKCS#7-signierte Datenstruktur ohne Dateninhalt, nur mit Zertifikat(en) oder Zertifikatsperrliste(n)
- .PFX – Siehe .p12
- .P12 – PKCS#12, kann öffentliche Zertifikate und private Schlüssel (Kennwort-geschützt) enthalten.
PKCS #7 ist ein Standard zum Signieren und Verschlüsseln von Daten. Da das Zertifikat gebraucht wird, um die signierten Daten zu verifizieren, kann es in der „SignedData“-Struktur untergebracht werden. Eine .p7c-Datei ist der Speziallfall einer Datei, die keine Daten zum Signieren enthält, sondern nur die „SignedData“-Struktur.
PKCS #12 entwickelte sich aus dem PFX(Personal inFormation eXchange)-Standard und wird benutzt, um öffentliche und private Schlüssel in einer gemeinsamen Datei auszutauschen.
Eine .PEM-Datei kann Zertifikate oder private Schlüssel enthalten, die von entsprechenden BEGIN/END-Zeilen umschlossen sind.
[Bearbeiten] Literatur
X.509 Information technology – Open Systems Interconnection – The Directory: Public-key and attribute certificate frameworks