Passa al contenuto principale

3. Indicazione del nome del server

[RFC5246] non fornisce un meccanismo per un client di indicare al server il nome del server che sta contattando. Potrebbe essere desiderabile per i client fornire queste informazioni al fine di facilitare connessioni sicure a server che ospitano più server 'virtuali' a un singolo indirizzo di rete sottostante.

Per fornire il nome del server, i client POSSONO includere un'estensione di tipo "server_name" nel client hello (esteso). Il campo "extension_data" di questa estensione DEVE contenere "ServerNameList" dove:

struct {
NameType name_type;
select (name_type) {
case host_name: HostName;
} name;
} ServerName;

enum {
host_name(0), (255)
} NameType;

opaque HostName<1..2^16-1>;

struct {
ServerName server_name_list<1..2^16-1>
} ServerNameList;

La ServerNameList NON DEVE contenere più di un nome dello stesso name_type. Se il server ha compreso l'estensione ClientHello ma non riconosce il nome del server, il server DOVREBBE intraprendere una delle due azioni seguenti: abortire l'handshake inviando un avviso fatale unrecognized_name(112), o continuare l'handshake. NON È RACCOMANDATO inviare un avviso di livello warning unrecognized_name(112), poiché il comportamento del client in risposta agli avvisi di livello warning è imprevedibile. Se esiste una mancata corrispondenza tra il nome del server utilizzato dall'applicazione client e il nome del server della credenziale scelta dal server, questa mancata corrispondenza diventerà evidente quando l'applicazione client eseguirà l'identificazione dell'endpoint del server, momento in cui l'applicazione client dovrà decidere se continuare o meno la comunicazione. Le implementazioni TLS sono incoraggiate a rendere disponibili ai chiamanti dell'applicazione informazioni sugli avvisi di livello warning che sono stati ricevuti o inviati durante un handshake TLS. Tali informazioni possono essere utili per scopi diagnostici.

Attualmente, gli unici nomi di server supportati sono i nomi host DNS; tuttavia, ciò non implica alcuna dipendenza di TLS da DNS, e altri tipi di nomi possono essere aggiunti in futuro (da un RFC che aggiorna questo documento). TLS PUÒ trattare i nomi di server forniti come dati opachi e passare i nomi e i tipi all'applicazione.

"HostName" contiene il nome host DNS completamente qualificato del server, come compreso dal client. Il nome host è rappresentato come una stringa di byte utilizzando la codifica ASCII senza punto finale. Ciò consente il supporto di nomi di dominio internazionalizzati attraverso l'uso di A-label definiti in [RFC5890]. I nomi host DNS non fanno distinzione tra maiuscole e minuscole. L'algoritmo per confrontare i nomi host è descritto in [RFC5890], Sezione 2.3.2.4.

Gli indirizzi IPv4 e IPv6 letterali non sono consentiti in "HostName".

È RACCOMANDATO che i client includano un'estensione di tipo "server_name" nel client hello ogni volta che localizzano un server tramite un tipo di nome supportato.

Un server che riceve un client hello contenente l'estensione "server_name" PUÒ utilizzare le informazioni contenute nell'estensione per guidare la sua selezione di un certificato appropriato da restituire al client, e/o altri aspetti della politica di sicurezza. In questo caso, il server DEVE includere un'estensione di tipo "server_name" nel server hello (esteso). Il campo "extension_data" di questa estensione DEVE essere vuoto.

Se un server riceve una ServerNameList contenente un name_type o un ServerName che non supporta, DEVE abortire l'handshake con un avviso fatale unsupported_extension.

Se un'applicazione negozia un nome di server utilizzando un protocollo applicativo, poi passa a TLS, e se viene inviata un'estensione server_name, allora l'estensione DOVREBBE contenere lo stesso nome che è stato negoziato nel protocollo applicativo. Se il server_name è stabilito nell'handshake di sessione TLS, il client DOVREBBE verificare che il server_name sia coerente con l'identità del server negoziata dal protocollo a livello applicativo, se applicabile.

Quando l'estensione del nome del server viene utilizzata in una sessione ripresa, il server NON DOVREBBE utilizzarla per decidere se accettare o meno la ripresa, a meno che non mantenga il binding. Il server DOVREBBE ignorare questa estensione in una sessione ripresa e continuare la ripresa utilizzando il nome del server associato alla sessione originale. Per essere in grado di assicurarsi che il nome del server presentato nel client hello corrisponda al nome presentato originariamente, è RACCOMANDATO che le implementazioni mantengano informazioni sul nome del server attraverso una ripresa di sessione.