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。
関連トピック