La teoria, come esposta nello standard è la seguente:
server_version
This field will contain the lower of that suggested by the client
in the client hello and the highest supported by the server.
Nel messaggio ClientHello
, il client annuncia una singola versione e questo significa "Suppongo tutte le versioni fino a quella versione". Ad esempio, se il client dice "TLS 1.1", il client promette in qualche modo di poter gestire SSL 3.0, TLS 1.0 e TLS 1.1. Si suppone che il server scelga la versione del protocollo più recente supportata da client e server.
Tuttavia, le implementazioni client sanno che non viviamo in un mondo perfetto, e alcuni server sbagliano a volte, quindi fanno collegamenti in un loop. Ad esempio, il client annuncia per la prima volta "TLS 1.2", ma se l'handshake non riesce per qualche motivo che potrebbe essere dovuto al debole supporto del server, il client può riprovare, annunciando solo "TLS 1.1" o "TLS 1.0". Non tutti i client lo fanno, ma questo è comune per i browser Web. Come spiegato da @dave, unClientHello
di TLS all'1,2% potrebbe essere più grande di una versione precedente e fare in modo che server mal scritti su di esso, quindi il comportamento "riprova con una versione inferiore" è, purtroppo, necessario.
Come spiegato sopra, il client annuncia solo un intervallo, quindi il cliente non può esprimere un supporto "con buchi", ad es. supportare TLS 1.0 e 1.2 ma non 1.1 (non che abbia molto senso). Allo stesso modo, il client invia sia la "versione massima supportata del protocollo" sia l'elenco ordinato di suite di crittografia supportate, quindi il client non può esprimere in una sola ClientHello
una preferenza come: "facciamo TLS 1.2 e AES-CBC, ma se dobbiamo usare TLS 1.0 quindi preferirei RC4 perché temo mortalmente l'attacco BEAST ". Se un cliente vuole applicare tali preferenze, allora deve fare il trucco "connessioni multiple".
Per riassumere , il normale paradigma di SSL è: il client suggerisce, il server sceglie . Ma se il cliente vuole forzare il server a utilizzare una specifica versione di protocollo e / o suite di crittografia, può, occasionalmente, ricorrere a tali collegamenti tramite i re-collegamenti e i browser Web esistenti.