In TLS, il client annuncia la sua versione massima supportata . Quindi il server risponde con la versione del protocollo che verrà effettivamente utilizzata per la connessione.
Quindi, ad esempio, se un server conosce TLS 1.0 e 1.1 e il client annuncia "Supporto fino a TLS 1.2", il server, senza sapere cosa può essere TLS 1.2, può ancora rispondere : "bene, useremo 1.1".
In teoria, se un client dice "Suppongo fino a TLS 1.38" (che sarà codificato in ClientHello
come due byte di valore 0x03 0x27), un server che supporta fino a TLS 1.2 non avrà alcun indizio di quali sono le versioni TLS 1.3, 1.4 ... a 1.38 (e, in effetti, tali versioni non esistono ancora, il massimo definito è TLS 1.2 adesso); tuttavia, quel server può ancora dire: "1.38 è più alto / più tardi di 1.2, quindi il client dovrebbe conoscere TLS 1.2" e procedi dicendo: "useremo 1.2".
In pratica, alcuni server sono scritti male e quando un client dice "TLS 1.3" rilasciano la connessione. Questo è un bug del server; ma molto diffuso. Questo bug è spesso designato dall'espressione "intolleranza alla versione". Alcuni di questi server buggy accettano alcuni tipi di versioni sconosciute, ma non tutte. Per esempio. alcuni server tollererebbero qualsiasi versione "1.x" per qualsiasi x nell'intervallo da 0 a 254, ma rifiuterebbero una versione "2.y".
A causa dell'intolleranza alla versione, i client (browser Web) devono già includere il codice di emergenza che tenta più volte. Per esempio. prova prima a connettersi con "1.2" in ClientHello
, ma se la connessione fallisce, il client prova nuovamente con "1.0" come versione supportata massima. Questo è noioso e noioso. Un server che non tollera la versione 1.3 di TLS è un server problematico quando viene specificato TLS 1.3 e i browser iniziano a utilizzarlo.