Introduzione alla sintassi e alla codifica ASN.1
L'API Registrazione certificati usa Asn.1 (Abstract Syntax Notation One) per definire, codificare e decodificare le richieste e i certificati di certificato trasferiti tra computer client e autorità di certificazione. ASN.1 può essere concettualmente diviso in un set di regole di sintassi e un set di regole di codifica, come illustrato negli 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 RDN nella sequenza è costituito da un identificatore di oggetto (OID) e da 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 di registrazione dei certificati utilizza le Regole di Codifica Distinta (DER) per codificare il nome del soggetto sopracitato. DER richiede che ogni elemento nel 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"
Si notino i punti seguenti:
- Riga 1:
- Il nome è una sequenza di nomi distinti relativi.
Il numero di tag per il tipo SEQUENCE è 0x30.
Il nome del soggetto TestCN.TestOrg richiede 35 byte (0x23). - Riga 2:
- Il Common Name, TestCN, è un insieme unico 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 Common Name è 2.5.4.3.
L'OID è un tipo a tre byte di 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 è di tipo PRINTABLE_STRING a sei byte.
Il numero di tag per il tipo di PRINTABLE_STRING è 0x13.
Argomenti correlati