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 では、Distinguished Encoding Rules (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 行目:
    共通名 TestCN は、 AttributeTypeValue 構造体の 1 つのセットです。
    SET のタグ番号は0x31。
  • 3 行目:
    AttributeTypeValue 構造体はシーケンスです。
    SEQUENCE 型のタグ番号が0x30。
    構造体には 13 (0xD) バイトが必要です。
  • 4 行目から 6 行目:
    共通名のオブジェクト識別子 (OID) は 2.5.4.3 です。
    OID は、3 バイト OBJECT_ID 型です。
    OBJECT_ID型のタグ番号が0x06。
  • 7 行目から 9 行目:
    共通名 TestCN は文字列値です。
    文字列は 6 バイト PRINTABLE_STRING 型です。
    PRINTABLE_STRINGの種類のタグ番号が0x13。

ASN.1 型システム

証明書要求のエンコード

ASN.1 型の DER エンコード

Distinguished Encoding Rules