Freigeben über


Einführung in ASN.1-Syntax und -Codierung

Die Zertifikatregistrierungs-API verwendet asn.1 (Abstract Syntax Notation One) zum Definieren, Codieren und Decodieren der Zertifikatanforderungen und Zertifikate, die zwischen Clientcomputern und Zertifizierungsstellen übertragen werden. ASN.1 kann konzeptionell in einen Satz von Syntaxregeln und einen Satz von Codierungsregeln unterteilt werden, wie in den folgenden Beispielen gezeigt.

ASN.1-Syntaxbeispiel

Eine Zertifikatanforderung enthält unter anderem den Namen der Entität, die die Anforderung stellt oder für die die Anforderung gestellt wird. Der Name ist eine Sequenz von X.500 relativen Distinguished Names (RDNs). Jedes RDN in der Sequenz besteht aus einem Objektbezeichner (Object Identifier, OID) und einem Wert. Die ASN.1-Syntax für einen Antragstellernamen wird im folgenden Beispiel gezeigt.

---------------------------------------------------------------------
-- Subject name
---------------------------------------------------------------------
Name ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::= SET OF AttributeTypeValue

AttributeTypeValue ::= SEQUENCE 
{
   type               OBJECT IDENTIFIER,
   value              ANY 
}

ASN.1-Codierungsbeispiel

Die Zertifikatregistrierungs-API verwendet Distinguished Encoding Rules (DER), um den vorherigen Antragstellernamen zu codieren. DER erfordert, dass jedes Element im Namen durch ein TLV-Triplet dargestellt wird, wobei T die Tagnummer des ASN.1-Typs, L die Länge und V den zugeordneten Wert enthält. Das folgende Beispiel zeigt, wie der Antragstellername TestCN.TestOrg codiert wird.

1.     30 23            ; SEQUENCE (0x23 = 35 Bytes)
2.     |  |  31 0f            ; SET (f Bytes)
3.     |  |  |  30 0d            ; SEQUENCE (d Bytes)
4.     |  |  |     06 03         ; OBJECT_ID (3 Bytes)
5.     |  |  |     |  55 04 03
6.     |  |  |     |     ; 2.5.4.3 Common Name (CN)
7.     |  |  |     13 06         ; PRINTABLE_STRING (6 Bytes)
8.     |  |  |        54 65 73 74 43 4e                    ; TestCN
9.     |  |  |           ; "TestCN"
10.    |  |  31 10            ; SET (10 Bytes)
11.    |  |     30 0e            ; SEQUENCE (e Bytes)
12.    |  |        06 03         ; OBJECT_ID (3 Bytes)
13.    |  |        |  55 04 0a
14.    |  |        |     ; 2.5.4.10 Organization (O)
15.    |  |        13 07         ; PRINTABLE_STRING (7 Bytes)
16.    |  |           54 65 73 74 4f 72 67                 ; TestOrg
17.    |  |              ; "TestOrg"

Beachten Sie folgende Punkte:

  • Zeile 1:
    Der Name ist eine Sequenz relativer Distinguished-Namen.
    Die Tagnummer für den SEQUENCE-Typ ist 0x30.
    Der Antragstellername testCN.TestOrg erfordert 35 (0x23) Bytes.
  • Zeile 2:
    Der allgemeine Name TestCN ist ein einzelner Satz von AttributeTypeValue-Strukturen .
    Die Tagnummer für ein SET ist 0x31.
  • Zeile 3:
    Die AttributeTypeValue-Struktur ist eine Sequenz.
    Die Tagnummer für den SEQUENCE-Typ ist 0x30.
    Die -Struktur erfordert 13 (0xD) Bytes.
  • Zeilen 4 bis 6:
    Der Objektbezeichner (OID) für den allgemeinen Namen ist 2.5.4.3.
    Die OID ist ein drei Byte OBJECT_ID Typ.
    Die Tagnummer für den OBJECT_ID-Typ ist 0x06.
  • Zeilen 7 bis 9:
    Der allgemeine Name TestCN ist ein Zeichenfolgenwert.
    Die Zeichenfolge ist ein sechs Byte PRINTABLE_STRING Typ.
    Die Tagnummer für den PRINTABLE_STRING-Typ ist 0x13.

ASN.1-Typsystem

Codierung von Zertifikatanforderungen

DER-Codierung von ASN.1-Typen

Distinguished Encoding Rules