Passa al contenuto principale

3. Structure of the Raw Public Key Extension (Struttura dell'estensione della chiave pubblica grezza)

3. Structure of the Raw Public Key Extension (Struttura dell'estensione della chiave pubblica grezza)

Questa sezione definisce le due estensioni TLS client_certificate_type e server_certificate_type, che possono essere utilizzate come parte di un handshake TLS esteso quando vengono utilizzate chiavi pubbliche grezze. La Section 4 definisce il comportamento del client TLS e del server TLS utilizzando queste estensioni.

Questa specifica utilizza chiavi pubbliche grezze (raw public keys) per cui viene riutilizzata la codifica già disponibile utilizzata in un certificato PKIX sotto forma di struttura SubjectPublicKeyInfo. Per trasportare la chiave pubblica grezza all'interno dell'handshake TLS, il payload Certificate viene utilizzato come contenitore, come mostrato nella Figura 1. La struttura Certificate mostrata è un adattamento della sua forma originale [RFC5246].

   opaque ASN.1Cert<1..2^24-1>;

struct {
select(certificate_type){

// certificate type defined in this document.
case RawPublicKey:
opaque ASN.1_subjectPublicKeyInfo<1..2^24-1>;

// X.509 certificate defined in RFC 5246
case X.509:
ASN.1Cert certificate_list<0..2^24-1>;

// Additional certificate type based on
// "TLS Certificate Types" subregistry
};
} Certificate;

Figure 1: Certificate Payload as a Container for the Raw Public Key (Figura 1: Payload Certificate come contenitore per la chiave pubblica grezza)

La struttura SubjectPublicKeyInfo è definita nella Sezione 4.1 della RFC 5280 [PKIX] e non contiene solo le chiavi grezze, come l'esponente pubblico e il modulo di una chiave pubblica RSA, mais anche un identificatore dell'algoritmo. L'identificatore dell'algoritmo può anche includere parametri. Il valore SubjectPublicKeyInfo nel payload Certificate DEVE contenere la codifica DER [X.690] di SubjectPublicKeyInfo. La struttura, come mostrato nella Figura 2, contiene quindi anche informazioni sulla lunghezza. Un esempio è fornito nell'Appendix A.

      SubjectPublicKeyInfo  ::=  SEQUENCE  {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING }

AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL }

Figure 2: SubjectPublicKeyInfo ASN.1 Structure (Figura 2: Struttura ASN.1 SubjectPublicKeyInfo)

Gli identificatori dell'algoritmo sono identificatori di oggetto (OID). RFC 3279 [RFC3279] e RFC 5480 [RFC5480], ad esempio, definiscono gli OID mostrati nella Figura 3. Si noti che questo elenco non è esaustivo e che ulteriori OID potrebbero essere definiti in future RFC.

   Key Type            | Document                   | OID
--------------------+----------------------------+-------------------
RSA | Section 2.3.1 of RFC 3279 | 1.2.840.113549.1.1
....................|............................|...................
Digital Signature | |
Algorithm (DSA) | Section 2.3.2 of RFC 3279 | 1.2.840.10040.4.1
....................|............................|...................
Elliptic Curve | |
Digital Signature | |
Algorithm (ECDSA) | Section 2 of RFC 5480 | 1.2.840.10045.2.1
--------------------+----------------------------+-------------------

Figure 3: Example Algorithm Object Identifiers (Figura 3: Esempio di identificatori di oggetto dell'algoritmo)

Il formato di estensione per hello client e server estesi, che utilizza il campo "extension_data", viene utilizzato per trasportare le strutture ClientCertTypeExtension e ServerCertTypeExtension. Queste due strutture sono mostrate nella Figura 4. La struttura CertificateType è un'enumerazione con valori presi dal sottoregistro "TLS Certificate Types" (Tipi di certificato TLS) del registro "Transport Layer Security (TLS) Extensions" (Estensioni TLS) [TLS-Ext-Registry].

   struct {
select(ClientOrServerExtension) {
case client:
CertificateType client_certificate_types<1..2^8-1>;
case server:
CertificateType client_certificate_type;
}
} ClientCertTypeExtension;

struct {
select(ClientOrServerExtension) {
case client:
CertificateType server_certificate_types<1..2^8-1>;
case server:
CertificateType server_certificate_type;
}
} ServerCertTypeExtension;

Figure 4: CertTypeExtension Structure (Figura 4: Struttura CertTypeExtension)