Passa al contenuto principale

Appendice E. Retrocompatibilità (Backward Compatibility)

Questa appendice discute i problemi di compatibilità tra TLS 1.2 e le versioni precedenti.

E.1. Compatibilità con TLS 1.0/1.1 e SSL 3.0 (Compatibility with TLS 1.0/1.1 and SSL 3.0)​

A causa di nuove funzionalità e alcuni cambiamenti strutturali, non esiste interoperabilità diretta tra TLS 1.2 e TLS 1.1, TLS 1.0 e SSL 3.0. Tuttavia, TLS 1.2 contiene un meccanismo mediante il quale un'implementazione TLS 1.2 può negoziare con versioni precedenti.

E.1.1. Negoziazione della versione​

TLS fornisce un meccanismo integrato per la negoziazione della versione come parte dell'handshake:

  1. Versione in ClientHello:

    • Il client indica la versione più alta che supporta nel ClientHello
    • Le implementazioni DOVREBBERO indicare TLS 1.2 (versione {3, 3}) nel ClientHello
  2. Versione in ServerHello:

    • Il server seleziona la versione più alta supportata sia da sé che dal client
    • Se il server non supporta la versione suggerita dal client, seleziona una versione inferiore
  3. Versione del livello di record:

    • La versione del record ClientHello DOVREBBE essere impostata su {3, 1} (TLS 1.0) per la massima compatibilità
    • I record successivi utilizzano la versione negoziata

E.1.2. Estensioni​

TLS 1.2 introduce nuove estensioni e modifiche alle estensioni esistenti:

  • Estensione signature_algorithms: I client TLS 1.2 DEVONO includere questa estensione
  • I server di versioni precedenti ignoreranno le estensioni che non comprendono

E.1.3. Suite di cifratura​

Alcune suite di cifratura sono specifiche per TLS 1.2:

  • Suite di cifratura che utilizzano la PRF SHA-256
  • Nuove suite di cifratura AEAD

Quando si negozia con versioni precedenti, queste suite di cifratura NON DOVREBBERO essere offerte nel ClientHello.

E.1.4. Raccomandazioni per l'implementazione​

Le implementazioni client DOVREBBERO:

  • Supportare più versioni TLS
  • Annunciare la versione più alta supportata nel ClientHello
  • Essere pronte ad accettare una versione inferiore
  • Implementare la protezione contro il fallback di versione (SCSV)

Le implementazioni server DOVREBBERO:

  • Supportare più versioni TLS per un'ampia compatibilità
  • Preferire la versione di protocollo più alta
  • Gestire correttamente i ClientHello delle versioni precedenti

Esempio di flusso di negoziazione:

Client (supporta TLS 1.2, 1.1, 1.0)
-> ClientHello (version=3.3)
Versioni supportate: TLS 1.2, 1.1, 1.0

Server (supporta solo TLS 1.1, 1.0)
<- ServerHello (version=3.2)
Selezionato: TLS 1.1

La connessione continua utilizzando TLS 1.1

E.2. Compatibilità con SSL 2.0 (Compatibility with SSL 2.0)​

SSL 2.0 NON DOVREBBE essere utilizzato nelle nuove implementazioni. Tuttavia, per la compatibilità con i sistemi legacy, alcune implementazioni potrebbero dover comprendere i ClientHello in formato SSL 2.0.

E.2.1. ClientHello SSL 2.0​

Il ClientHello SSL 2.0 ha un formato diverso:

uint16 msg_length;          /* Il bit più alto DEVE essere 1 */
uint8 msg_type; /* DEVE essere 1 */
Version version; /* Versione desiderata dal client */
uint16 cipher_spec_length; /* Non può essere 0 */
uint16 session_id_length; /* DEVE essere 0 o 16 */
uint16 challenge_length; /* Non può essere 0 */
CipherSpec cipher_specs[...];
SessionID session_id;
Challenge challenge;

E.2.2. Gestione del ClientHello SSL 2.0​

Un server TLS 1.2 PUÒ accettare un ClientHello incapsulato in formato SSL 2.0, ma DEVE:

  1. Controllare il bit più alto di msg_length
  2. Verificare la validità del formato
  3. Convertirlo in formato TLS per l'elaborazione
  4. Rispondere con un ServerHello in formato TLS

E.2.3. Considerazioni sulla sicurezza​

Importante: Il supporto dei ClientHello in formato SSL 2.0 non significa supportare il protocollo SSL 2.0 stesso. SSL 2.0 ha molte vulnerabilità di sicurezza note e NON DEVE essere negoziato per l'uso.

E.2.4. Raccomandazioni per l'implementazione​

  • I client TLS 1.2 NON DEVONO inviare ClientHello in formato SSL 2.0
  • Il supporto del server per i ClientHello in formato SSL 2.0 è ora PUÒ, piuttosto che DOVREBBE
  • L'invio di ClientHello in formato SSL 2.0 è NON DOVREBBE
  • Le future versioni TLS potrebbero cambiare questo in NON DOVREBBE supportare

E.3. Evitare il rollback della versione man-in-the-middle (Avoiding Man-in-the-Middle Version Rollback)​

Le versioni precedenti del protocollo erano vulnerabili agli attacchi di rollback della versione in cui un attaccante poteva forzare una connessione a utilizzare una versione di protocollo precedente (più debole).

E.3.1. Meccanismi di protezione​

TLS 1.2 utilizza più meccanismi per prevenire il rollback della versione:

  1. Verifica del messaggio Finished:

    • Il messaggio Finished contiene un hash di tutti i messaggi di handshake
    • Include i campi di versione da ClientHello e ServerHello
    • Qualsiasi modifica della versione causerà il fallimento della verifica di Finished
  2. TLS_FALLBACK_SCSV:

    • Valore di suite di cifratura di segnalazione definito in RFC 7507
    • I client includono questo valore quando ritentano una connessione con una versione inferiore
    • Il server rifiuta la connessione se supporta una versione superiore

E.3.2. Requisiti di implementazione​

I client DEVONO:

  • Registrare le versioni precedentemente tentate
  • Includere TLS_FALLBACK_SCSV quando si riprova con downgrade
  • Verificare il messaggio Finished

I server DEVONO:

  • Controllare la presenza di TLS_FALLBACK_SCSV
  • Inviare un avviso inappropriate_fallback se è supportata una versione superiore
  • Calcolare e verificare correttamente il messaggio Finished

E.3.3. Scenari di esempio​

Connessione normale:

Client -> ClientHello (TLS 1.2)
Server <- ServerHello (TLS 1.2)
... Handshake normale ...
Successo!

Downgrade legittimo:

Client -> ClientHello (TLS 1.2)
Server <- ServerHello (TLS 1.1)
... Handshake TLS 1.1 ...
Successo!

Attacco rilevato:

Client -> ClientHello (TLS 1.2)
L'attaccante modifica in (TLS 1.0)
Server <- ServerHello (TLS 1.0)
... L'handshake continua ...
Client -> Finished (verifica fallita!)
Connessione interrotta!

Nuovo tentativo con SCSV:

Client -> ClientHello (TLS 1.2) - Fallisce
Client -> ClientHello (TLS 1.1, TLS_FALLBACK_SCSV)
Il server rileva SCSV e supporta TLS 1.2
Server <- Alert: inappropriate_fallback
Connessione interrotta - Attacco di downgrade rilevato!

Nota: Per informazioni complete sulla compatibilità e spiegazioni dettagliate, si prega di fare riferimento al testo completo dell'appendice E della RFC 5246.