En TLS, el cliente anuncia su versión máxima admitida . Luego, el servidor responde con la versión del protocolo que realmente se usará para la conexión.
Por ejemplo, si un servidor conoce TLS 1.0 y 1.1, y el cliente anuncia "Admito hasta TLS 1.2", el servidor, sin saber qué TLS 1.2 puede ser , todavía puede responder : "bien, usaremos 1.1".
Teóricamente, si un cliente dice "Admito hasta TLS 1.38" (que se codificará en ClientHello
como dos bytes de valor 0x03 0x27), un servidor que admita hasta TLS 1.2 no tendrá ninguna pista de qué son las versiones 1.3, 1.4 ... a 1.38 de TLS (y, de hecho, dichas versiones aún no existen, el máximo definido es TLS 1.2 en este momento); sin embargo, ese servidor todavía puede decir: "1.38 es mayor / posterior a 1.2, por lo que el cliente debe conocer TLS 1.2" y continuar con la siguiente declaración: "usaremos 1.2".
En la práctica, algunos servidores están mal escritos, y cuando un cliente dice "TLS 1.3" se desconecta. Este es un error de servidor; Pero una muy extendida. Ese error a menudo es designado por la expresión "intolerancia de versión". Algunos de estos servidores con errores aceptan algunos tipos de versiones desconocidas, pero no todas. P.ej. algunos servidores tolerarían cualquier versión "1.x" para cualquier x en el rango de 0 a 254, pero rechazaría una versión "2.y".
Debido a la intolerancia a la versión, los clientes (navegador web) ya deben incluir un código de contingencia que lo intenta varias veces. P.ej. primero intente conectarse con "1.2" en ClientHello
, pero si la conexión falla, el cliente intentará nuevamente con "1.0" como la versión máxima admitida. Esto es aburrido y torpe. Un servidor que no tolera TLS versión 1.3 es un servidor que será problemático cuando se especifique TLS 1.3 y los navegadores comiencen a usarlo.