ASN.1 구문 및 인코딩 소개
인증서 등록 API는 ASN.1(추상 구문 표기법 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(Distinguished Encoding Rules)를 사용하여 이전 주체 이름을 인코딩합니다. 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는 3 바이트 OBJECT_ID 형식입니다.
OBJECT_ID 형식의 태그 번호는 0x06. - 줄 7~9:
- 일반 이름 TestCN은 문자열 값입니다.
문자열은 6 바이트 PRINTABLE_STRING 형식입니다.
PRINTABLE_STRING 형식의 태그 번호가 0x13.
관련 항목