ASN.1 語法和編碼簡介

憑證註冊 API 會使用抽象語法標記法 1 (ASN.1) 來定義、編碼和解碼憑證要求,以及它在用戶端電腦與憑證授權單位單位之間傳輸的憑證要求和憑證。 ASN.1 在概念上可以分成一組語法規則和一組編碼規則,如下列範例所示。

ASN.1 語法範例

憑證要求包含發出要求之實體的名稱,或正在提出要求之實體的名稱。 此名稱是一連串的 X.500 相對辨別名稱, (RDN) 。 序列中的每個 RDN 都包含物件識別碼 (OID) 和值。 下列範例顯示主體名稱的 ASN.1 語法。

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

RelativeDistinguishedName ::= SET OF AttributeTypeValue

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

ASN.1 編碼範例

憑證註冊 API 會使用可辨別編碼規則 (DER) 來編碼上述主體名稱。 DER 要求名稱中的每個專案都以 TLV 三元表示,其中 T 包含 ASN.1 類型的標記編號、L 包含長度,而 V 則包含相關聯的值。 下列範例示範如何編碼主體名稱 TestCN.TestOrg。

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"

請注意下列幾點:

  • 第 1 行:
    此名稱是相對辨別名稱的序列。
    SEQUENCE類型的標記編號0x30。
    TestCN.TestOrg 的主旨名稱需要 35 個 (0x23) 個位元組。
  • 第 2 行:
    Common Name TestCN 是一組 AttributeTypeValue 結構。
    SET的標籤編號0x31。
  • 第 3 行:
    AttributeTypeValue結構是序列。
    SEQUENCE類型的標記編號0x30。
    結構需要 13 個 (0xD) 個位元組。
  • 第 4 到 6 行:
    一般名稱的物件識別碼 (OID) 為 2.5.4.3。
    OID 是三個位元組 OBJECT_ID 類型。
    OBJECT_ID類型的標籤編號是0x06。
  • 第 7 行到 9 行:
    Common Name TestCN 是字串值。
    字串是六個位元組 PRINTABLE_STRING 類型。
    PRINTABLE_STRING類型的標籤編號是0x13。

ASN.1 類型系統

憑證要求編碼

ASN.1 類型的 DER 編碼

可辨別編碼規則