Passa al contenuto principale

4. TLS Client and Server Handshake Behavior (Comportamento dell'handshake client e server TLS)

4. TLS Client and Server Handshake Behavior (Comportamento dell'handshake client e server TLS)

Questa specifica estende i messaggi ClientHello e ServerHello, secondo le procedure di estensione definite in [RFC5246]. Non estende né modifica nessun altro messaggio TLS.

Nota: non sono richieste nuove suite di cifratura per utilizzare chiavi pubbliche grezze. Possono essere utilizzate tutte le suite di cifratura esistenti che supportano un metodo di scambio di chiavi compatibile con l'estensione definita.

Lo scambio di messaggi di alto livello nella Figura 5 mostra le estensioni client_certificate_type e server_certificate_type aggiunte ai messaggi hello client e server.

 client_hello,
client_certificate_type,
server_certificate_type ->

<- server_hello,
client_certificate_type,
server_certificate_type,
certificate,
server_key_exchange,
certificate_request,
server_hello_done
certificate,
client_key_exchange,
certificate_verify,
change_cipher_spec,
finished ->

<- change_cipher_spec,
finished

Application Data <-------> Application Data

Figure 5: Basic Raw Public Key TLS Exchange (Figura 5: Scambio TLS di chiave pubblica grezza di base)

4.1. Client Hello (Client Hello)

Per indicare il supporto delle chiavi pubbliche grezze, i client includono le estensioni client_certificate_type e/o server_certificate_type in un messaggio client hello esteso. Il meccanismo di estensione hello è descritto nella Sezione 7.4.1.4 di TLS 1.2 [RFC5246].

L'estensione client_certificate_type nel client hello indica i tipi di certificato che il client è in grado di fornire al server, quando richiesto utilizzando un messaggio certificate_request.

L'estensione server_certificate_type nel client hello indica i tipi di certificati che il client è in grado di elaborare quando forniti dal server in un payload di certificato successivo.

Le estensioni client_certificate_type e server_certificate_type inviate nel client hello trasportano ciascuna un elenco di tipi di certificato supportati, ordinati per preferenza del client. Quando il client supporta un solo tipo di certificato, è un elenco contenente un singolo elemento.

Il client TLS DEVE omettere i tipi di certificato dall'estensione client_certificate_type nel client hello se non possiede la chiave pubblica grezza corrispondente o il certificato che può fornire al server quando richiesto utilizzando un messaggio certificate_request, o se non è configurato per utilizzarne uno con il server TLS specificato. Se il client non ha tipi di certificato rimanenti da inviare nel client hello, diversi dal tipo X.509 predefinito, DEVE omettere l'estensione client_certificate_type nel client hello.

Il client TLS DEVE omettere i tipi di certificato dall'estensione server_certificate_type nel client hello se non è in grado di elaborare la corrispondente chiave pubblica grezza o un altro tipo di certificato. Se il client non ha tipi di certificato rimanenti da inviare nel client hello, diversi dal tipo di certificato X.509 predefinito, DEVE omettere l'intera estensione server_certificate_type dal client hello.

4.2. Server Hello (Server Hello)

Se il server riceve un client hello contenente l'estensione client_certificate_type e/o l'estensione server_certificate_type, sono possibili tre risultati:

  1. Il server non supporta l'estensione definita in questo documento. In questo caso, il server restituisce il server hello senza le estensioni definite in questo documento.

  2. Il server supporta l'estensione definita in questo documento, ma non ha alcun tipo di certificato in comune con il client. Quindi, il server termina la sessione con un avviso fatale di tipo "unsupported_certificate".

  3. Il server supporta le estensioni definite in questo documento e ha almeno un tipo di certificato in comune con il client. In questo caso, vengono seguite le regole di elaborazione descritte di seguito.

L'estensione client_certificate_type nel client hello indica i tipi di certificato che il client è in grado di fornire al server, quando richiesto utilizzando un messaggio certificate_request. Se il server TLS desidera richiedere un certificato al client (tramite il messaggio certificate_request), DEVE includere l'estensione client_certificate_type nel server hello. Questa estensione client_certificate_type nel server hello indica quindi il tipo di certificati che il client è invitato a fornire in un payload di certificato successivo. Il valore trasmesso nell'estensione client_certificate_type DEVE essere selezionato da uno dei valori forniti nell'estensione client_certificate_type inviata nel client hello. Il server DEVE includere anche un payload certificate_request nel messaggio server hello.

Se il server non invia un payload certificate_request (ad esempio, perché l'autenticazione del client avviene a livello di applicazione o non è richiesta alcuna autenticazione del client) o nessuno dei certificati supportati dal client (come indicato nell'estensione client_certificate_type nel client hello) corrisponde ai tipi di certificato supportati dal server, il payload client_certificate_type nel server hello DEVE essere omesso.

L'estensione server_certificate_type nel client hello indica i tipi di certificati che il client è in grado di elaborare quando fornito dal server in un payload di certificato successivo. Se il client hello indica il supporto di chiavi pubbliche grezze nell'estensione server_certificate_type e il server sceglie di utilizzare chiavi pubbliche grezze, il server TLS DEVE inserire la struttura SubjectPublicKeyInfo nel payload Certificate. Con l'estensione server_certificate_type nel server hello, il server TLS indica il tipo di certificato trasportato nel payload Certificate. Questa indicazione aggiuntiva consente di evitare ambiguità di analisi poiché il payload Certificate può contenere il certificato X.509 o una struttura SubjectPublicKeyInfo. Si noti che è consentito un solo valore nell'estensione server_certificate_type quando trasportato nel server hello.

4.3. Client Authentication (Autenticazione del client)

Quando il server TLS ha specificato RawPublicKey come client_certificate_type, l'autenticazione del client TLS sul server TLS è supportata solo tramite l'autenticazione del SubjectPublicKeyInfo del client ricevuto tramite un metodo fuori banda.

4.4. Server Authentication (Autenticazione del server)

Quando il server TLS ha specificato RawPublicKey come server_certificate_type, l'autenticazione del server TLS sul client TLS è supportata solo tramite l'autenticazione del SubjectPublicKeyInfo del client ricevuto tramite un metodo fuori banda.