Introdução à sintaxe e codificação do ASN.1
A API de Registro de Certificado usa a Notação de Sintaxe Abstrata Um (ASN.1) para definir, codificar e decodificar as solicitações de certificado e certificados que transfere entre computadores cliente e autoridades de certificação. O ASN.1 pode ser dividido conceitualmente em um conjunto de regras de sintaxe e um conjunto de regras de codificação, conforme mostrado pelos exemplos a seguir.
Exemplo de sintaxe ASN.1
Uma solicitação de certificado contém, entre outras coisas, o nome da entidade que está fazendo a solicitação ou para a qual a solicitação está sendo feita. O nome é uma sequência de RDNs (nomes distintos relativos) X.500. Cada RDN na sequência consiste em um OID (identificador de objeto) e um valor. A sintaxe ASN.1 para um nome de assunto é mostrada no exemplo a seguir.
---------------------------------------------------------------------
-- Subject name
---------------------------------------------------------------------
Name ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET OF AttributeTypeValue
AttributeTypeValue ::= SEQUENCE
{
type OBJECT IDENTIFIER,
value ANY
}
Exemplo de codificação ASN.1
A API de Registro de Certificado usa Distinguished Encoding Rules (DER) para codificar o nome da entidade anterior. O DER exige que cada item no nome seja representado por um trigêmeo TLV em que T contém o número de marca do tipo ASN.1, L contém o comprimento e V contém o valor associado. O exemplo a seguir mostra como o nome da entidade TestCN.TestOrg é codificado.
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"
Observe os seguintes pontos:
- Linha 1:
- O nome é uma sequência de nomes distintos relativos.
O número da marca para o tipo SEQUENCE é 0x30.
O nome da entidade de TestCN.TestOrg requer 35 bytes (0x23). - Linha 2:
- O Nome Comum, TestCN, é um único conjunto de estruturas AttributeTypeValue .
O número da marca de um SET é 0x31. - Linha 3:
- A estrutura AttributeTypeValue é uma sequência.
O número da marca para o tipo SEQUENCE é 0x30.
A estrutura requer 13 bytes (0xD). - Linhas de 4 a 6:
- O OID (identificador de objeto) para o Nome Comum é 2.5.4.3.
O OID é um tipo de OBJECT_ID de três bytes.
O número da marca do tipo OBJECT_ID é 0x06. - Linhas 7 a 9:
- O Nome Comum, TestCN, é um valor de cadeia de caracteres.
A cadeia de caracteres é um tipo de PRINTABLE_STRING de seis bytes.
O número da marca do tipo PRINTABLE_STRING é 0x13.
Tópicos relacionados