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.

ASN.1 형식 시스템

인증서 요청 인코딩

ASN.1 형식의 DER 인코딩

Distinguished Encoding Rules