Share via


Introduzione alla sintassi e alla codifica ASN.1

L'API Registrazione certificati usa la notazione astratta one (ASN.1) per definire, codificare e decodificare le richieste e i certificati del certificato che trasferisce tra computer client e autorità di certificazione. ASN.1 può essere concettualemente diviso in un set di regole di sintassi e un set di regole di codifica, come illustrato dagli esempi seguenti.

Esempio di sintassi ASN.1

Una richiesta di certificato contiene, tra le altre cose, il nome dell'entità che effettua la richiesta o per cui viene effettuata la richiesta. Il nome è una sequenza di nomi distinti relativi X.500 (RDN). Ogni rete RDN nella sequenza è costituita da un identificatore di oggetto (OID) e un valore. La sintassi ASN.1 per un nome soggetto è illustrata nell'esempio seguente.

---------------------------------------------------------------------
-- Subject name
---------------------------------------------------------------------
Name ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::= SET OF AttributeTypeValue

AttributeTypeValue ::= SEQUENCE 
{
   type               OBJECT IDENTIFIER,
   value              ANY 
}

Esempio di codifica ASN.1

L'API Registrazione certificati usa Distinguished Encoding Rules (DER) per codificare il nome del soggetto precedente. DER richiede che ogni elemento del nome sia rappresentato da un triplo TLV in cui T contiene il numero di tag del tipo ASN.1, L contiene la lunghezza e V contiene il valore associato. Nell'esempio seguente viene illustrato come viene codificato il nome soggetto 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"

Tenere presente quanto segue:

  • Riga 1:
    Il nome è una sequenza di nomi distinti relativi.
    Il numero di tag per il tipo SEQUENCE è 0x30.
    Il nome soggetto di TestCN.TestOrg richiede 35 (0x23) byte.
  • Riga 2:
    Common Name, TestCN, è un singolo set di strutture AttributeTypeValue .
    Il numero di tag per un SET è 0x31.
  • Riga 3:
    La struttura AttributeTypeValue è una sequenza.
    Il numero di tag per il tipo SEQUENCE è 0x30.
    La struttura richiede 13 byte (0xD).
  • Righe da 4 a 6:
    L'identificatore dell'oggetto (OID) per il nome comune è 2.5.4.3.
    L'OID è un tipo di tre byte OBJECT_ID.
    Il numero di tag per il tipo di OBJECT_ID è 0x06.
  • Righe da 7 a 9:
    Il nome comune, TestCN, è un valore stringa.
    La stringa è un tipo di sei byte PRINTABLE_STRING.
    Il numero di tag per il tipo di PRINTABLE_STRING è 0x13.

Sistema di tipi ASN.1

Codifica richiesta certificato

Codifica DER di tipi ASN.1

Distinguished Encoding Rules