ASN.1 steht für Abstract Syntax Notation One und ist eine standardisierte Sprache zur Beschreibung von Datenstrukturen. Diese Notation wird in vielen Bereichen der Telekommunikation und Informationstechnologie und auch im Kontext von X.509-Zertifikaten verwendet.

Zusammenhang zwischen ASN.1 und X.509

X.509-Zertifikate sind in ASN.1 definiert und oft in der Binärform DER (Distinguished Encoding Rules) oder in der Base64-codierten PEM-Form (Privacy-Enhanced Mail) kodiert. ASN.1 bietet eine formale Methode zur Beschreibung der einzelnen Elemente, aus denen ein Zertifikat besteht. Es legt fest, wie verschiedene Typen von Informationen – wie zum Beispiel Strings, Integer und Sequenzen – im Zertifikat repräsentiert werden.

Dank ASN.1 können X.509-Zertifikate von unterschiedlichen Systemen und Plattformen generiert, interpretiert und validiert werden. Hier ist ein einfaches Beispiel, wie ein X.509-Zertifikat in ASN.1-Syntax aussehen könnte:

Certificate ::= SEQUENCE {
   tbsCertificate TBSCertificate,
   signatureAlgorithm AlgorithmIdentifier,
   signatureValue BIT STRING }

Hier bedeutet Certificate eine Sequenz von TBSCertificate (die eigentlichen Zertifikatsdaten), AlgorithmIdentifier (der Algorithmus, der für die Signatur verwendet wird) und BIT STRING (die eigentliche Signatur).

Jeder dieser Hauptbestandteile kann wiederum seine eigenen Unterelemente haben, die ebenfalls in ASN.1 beschrieben sind. So wird eine hierarchische und portable Datenstruktur geschaffen, die leicht von Maschinen gelesen und interpretiert werden kann.

Wichtige Punkte der ASN.1 Datenstruktur

  • ASN.1 ermöglicht eine eindeutige, plattformunabhängige Datenrepräsentation.
  • Es wird für die Spezifikation von X.509-Zertifikaten und vielen anderen Datenformaten verwendet.
  • Verschiedene Kodierungsregeln wie DER oder BER (Basic Encoding Rules) können mit ASN.1 verwendet werden, um die tatsächlichen Bytes eines Zertifikats zu generieren.

Kurz gesagt, ASN.1 ist entscheidend für die Strukturierung und Interpretation von X.509-Zertifikaten und ermöglicht ihre breite Anwendbarkeit und Akzeptanz in verschiedenen Systemen und Netzwerken.

Wie kann ich die ASN.1 Informationen aus einem Zertifikat auslesen?

Es gibt verschiedene Tools und Methoden, um die ASN.1-Datenstruktur eines X.509-Zertifikats zu analysieren. Hier sind einige Möglichkeiten:

OpenSSL

OpenSSL ist ein weit verbreitetes Befehlszeilentool, das eine Vielzahl von Funktionen im Bereich der Kryptographie bietet. Um die ASN.1-Struktur eines Zertifikats in menschenlesbarer Form anzuzeigen, können Sie den folgenden Befehl verwenden:

openssl asn1parse -in zertifikat.crt -inform PEM

Oder für ein Zertifikat im DER-Format:

openssl asn1parse -in zertifikat.der -inform DER

Dies gibt die Struktur des Zertifikats aus, einschließlich der Byte-Offsets und der ASN.1-Tags.

Beispielausgabe:

Jede der folgenden Zeilen beschreibt ein Element im ASN.1-Datenbaum.

Diese Zeilen sind die Ausgabe des Befehls openssl asn1parse, der die ASN.1-Struktur eines X.509-Zertifikats darstellt. Jede Zeile beschreibt ein Element im ASN.1-Datenbaum.

  • d=0, d=1, d=2, ...: Diese Werte geben die Tiefe des Elements im Baum an. d=0 ist die Wurzel, d=1 sind Elemente der ersten Ebene unter der Wurzel, d=2 sind Elemente der zweiten Ebene, usw.
  • hl=4, hl=2, ...: „Header Length“ gibt die Länge des ASN.1-Headers für dieses Element in Bytes an. Der Header enthält Meta-Informationen wie den Tag-Typ und die Länge des Elements.
  • l=1437, l=901, ...: Dies ist die Länge des Inhalts des Elements in Bytes.
  • cons und prim: Diese kennzeichnen, ob das Element ein „Container“ (d.h., es enthält andere Elemente) oder ein „Primitiv“ (es enthält rohe Daten) ist.
  • SEQUENCE, INTEGER, …: Dies sind die ASN.1-Typen der Elemente. SEQUENCE ist beispielsweise eine geordnete Liste von Elementen, und INTEGER ist eine Ganzzahl.
  • :02, :FD73DFC77C4E, …: Dies sind die Werte der primitiven Elemente. Im Fall von INTEGER-Elementen sind dies hexadezimale Darstellungen der Ganzzahlen.

Speziell für die Beispielzeilen:

  • 0:d=0 hl=4 l=1437 cons: SEQUENCE: Das ist die Wurzel des Zertifikats und eine Sequenz, die 1437 Bytes an Daten enthält.
  • 4:d=1 hl=4 l= 901 cons: SEQUENCE: Dies ist ein Container-Element in der ersten Ebene des Baums. Es enthält 901 Bytes an Daten.
  • 8:d=2 hl=2 l= 3 cons: cont [ 0 ]: Ein kontextspezifisches Element (cont steht für „context-specific“), das 3 Bytes lang ist.
  • 10:d=3 hl=2 l= 1 prim: INTEGER :02: Ein primitives INTEGER-Element mit dem Wert 02 in Hexadezimalform, was 2 in dezimaler Form entspricht.
  • 13:d=2 hl=2 l= 7 prim: INTEGER :FD73DFC77C4E: Ein weiteres primitives INTEGER-Element, dessen Wert FD73DFC77C4E in Hexadezimalform ist.

0:d=0  hl=4 l=1437 cons: SEQUENCE
4:d=1  hl=4 l= 901 cons: SEQUENCE
8:d=2  hl=2 l=   3 cons: cont [ 0 ]
10:d=3 hl=2 l= 1 prim: INTEGER :02
13:d=2 hl=2 l= 7 prim: INTEGER :FD73DFC77C4E
22:d=2 hl=2 l= 13 cons: SEQUENCE
24:d=3 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption
35:d=3 hl=2 l= 0 prim: NULL
37:d=2 hl=3 l= 203 cons: SEQUENCE
40:d=3 hl=2 l= 11 cons: SET
42:d=4 hl=2 l= 9 cons: SEQUENCE
44:d=5 hl=2 l= 3 prim: OBJECT :countryName
49:d=5 hl=2 l= 2 prim: PRINTABLESTRING :DE
53:d=3 hl=2 l= 19 cons: SET
55:d=4 hl=2 l= 17 cons: SEQUENCE
57:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName
62:d=5 hl=2 l= 10 prim: UTF8STRING :Thueringen
74:d=3 hl=2 l= 34 cons: SET
76:d=4 hl=2 l= 32 cons: SEQUENCE
78:d=5 hl=2 l= 3 prim: OBJECT :localityName
83:d=5 hl=2 l= 25 prim: UTF8STRING :Main Street 1, 12345 City
110:d=3 hl=2 l= 32 cons: SET
112:d=4 hl=2 l= 30 cons: SEQUENCE
114:d=5 hl=2 l= 3 prim: OBJECT :organizationName
119:d=5 hl=2 l= 23 prim: UTF8STRING :Certification Authority
144:d=3 hl=2 l= 23 cons: SET
146:d=4 hl=2 l= 21 cons: SEQUENCE
148:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName
153:d=5 hl=2 l= 14 prim: UTF8STRING :PKI Management
169:d=3 hl=2 l= 24 cons: SET
171:d=4 hl=2 l= 22 cons: SEQUENCE
173:d=5 hl=2 l= 3 prim: OBJECT :commonName
178:d=5 hl=2 l= 15 prim: UTF8STRING :PKITOOL Root CA
195:d=3 hl=2 l= 46 cons: SET
197:d=4 hl=2 l= 44 cons: SEQUENCE
199:d=5 hl=2 l= 9 prim: OBJECT :emailAddress
210:d=5 hl=2 l= 31 prim: IA5STRING :mlpki@itconsulting-wolfinger.de
243:d=2 hl=2 l= 30 cons: SEQUENCE
245:d=3 hl=2 l= 13 prim: UTCTIME :221228092754Z
260:d=3 hl=2 l= 13 prim: UTCTIME :270205092754Z
275:d=2 hl=3 l= 138 cons: SEQUENCE
278:d=3 hl=2 l= 11 cons: SET
280:d=4 hl=2 l= 9 cons: SEQUENCE
282:d=5 hl=2 l= 3 prim: OBJECT :countryName
287:d=5 hl=2 l= 2 prim: PRINTABLESTRING :DE
291:d=3 hl=2 l= 19 cons: SET
293:d=4 hl=2 l= 17 cons: SEQUENCE
295:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName
300:d=5 hl=2 l= 10 prim: UTF8STRING :Thueringen
312:d=3 hl=2 l= 34 cons: SET
314:d=4 hl=2 l= 32 cons: SEQUENCE
316:d=5 hl=2 l= 3 prim: OBJECT :localityName
321:d=5 hl=2 l= 25 prim: UTF8STRING :Main Street 1, 12345 City
348:d=3 hl=2 l= 19 cons: SET
350:d=4 hl=2 l= 17 cons: SEQUENCE
352:d=5 hl=2 l= 3 prim: OBJECT :organizationName
357:d=5 hl=2 l= 10 prim: UTF8STRING :My Company
369:d=3 hl=2 l= 28 cons: SET
371:d=4 hl=2 l= 26 cons: SEQUENCE
373:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName
378:d=5 hl=2 l= 19 prim: UTF8STRING :Training Department
399:d=3 hl=2 l= 15 cons: SET
401:d=4 hl=2 l= 13 cons: SEQUENCE
403:d=5 hl=2 l= 3 prim: OBJECT :commonName
408:d=5 hl=2 l= 6 prim: UTF8STRING :cmp100
416:d=2 hl=4 l= 290 cons: SEQUENCE
420:d=3 hl=2 l= 13 cons: SEQUENCE
422:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
433:d=4 hl=2 l= 0 prim: NULL
435:d=3 hl=4 l= 271 prim: BIT STRING
710:d=2 hl=3 l= 196 cons: cont [ 3 ]
713:d=3 hl=3 l= 193 cons: SEQUENCE
716:d=4 hl=2 l= 15 cons: SEQUENCE
718:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Alternative Name
723:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:3006870401146F64
733:d=4 hl=2 l= 29 cons: SEQUENCE
735:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key Identifier
740:d=5 hl=2 l= 22 prim: OCTET STRING [HEX DUMP]:04145C4E6A1972F02E77CF0A7525A0D80975D3B42091
764:d=4 hl=2 l= 31 cons: SEQUENCE
766:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Authority Key Identifier
771:d=5 hl=2 l= 24 prim: OCTET STRING [HEX DUMP]:301680140469B74C23E6CA62D42DE2BC11E28188E13544E5
797:d=4 hl=2 l= 9 cons: SEQUENCE
799:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Basic Constraints
804:d=5 hl=2 l= 2 prim: OCTET STRING [HEX DUMP]:3000
808:d=4 hl=2 l= 19 cons: SEQUENCE
810:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Extended Key Usage
815:d=5 hl=2 l= 12 prim: OCTET STRING [HEX DUMP]:300A06082B06010505070301
829:d=4 hl=2 l= 11 cons: SEQUENCE
831:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Key Usage
836:d=5 hl=2 l= 4 prim: OCTET STRING [HEX DUMP]:030205A0
842:d=4 hl=2 l= 65 cons: SEQUENCE
844:d=5 hl=2 l= 3 prim: OBJECT :X509v3 CRL Distribution Points
849:d=5 hl=2 l= 58 prim: OCTET STRING [HEX DUMP]:30383036A034A0328630687474703A2F2F706B69742E6974636F6E73756C74696E672D776F6C66696E6765722E64652F726F6F7463612E63726C
909:d=1 hl=2 l= 13 cons: SEQUENCE
911:d=2 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption
922:d=2 hl=2 l= 0 prim: NULL
924:d=1 hl=4 l= 513 prim: BIT STRING