Su último párrafo es correcto: de hecho, en el mensaje ClientHello
, el cliente anuncia su "versión máxima admitida". Por lo tanto, un cliente que admita tanto SSL 3.0 como TLS 1.0 dirá "Sé hasta TLS 1.0" (internamente, "TLS 1.0" está codificado como "SSL 3.1"), pero seguirá aceptando su uso SSL 3.0. La versión del protocolo que se utilizará es elegida por el servidor (en su mensaje ServerHello
).
Lo que observas, sin embargo, es un artefacto de otra peculiaridad de SSL, que es que la versión se indica dos veces . Es decir, todo el tráfico en SSL se envía como registros , y todos los registros tienen un encabezado de cinco bytes que indica:
- El tipo de datos en el registro (el tipo es "mensaje de intercambio", "alerta", "cambiar especificación de cifrado" o "datos de aplicación") (un byte).
- La versión del protocolo de registro (dos bytes).
- La longitud del registro (dos bytes).
Así que la línea de informe que observa:
http-8443-14, READ: SSLv3 Handshake, length = 87 *** ClientHello, TLSv1
probablemente significa: "Se ha observado un registro del tipo 'handshake message', versión SSL 3.0 y longitud de 87 bytes. Su contenido resultó ser un mensaje ClientHello
que dice internamente 'I, el cliente, protocolo de soporte versiones hasta TLS 1.0 '. "
Es habitual que los clientes SSL usen una versión "baja" (3.0) en el primer registro porque hay servidores SSL antiguos y dañados que no solo no admiten TLS, sino que también entran en pánico y mueren cuando se enfrentan a un registro etiquetado "TLS 1.0", aunque el formato de un registro TLS 1.0 sin cifrar es absolutamente idéntico al de un registro SSL 3.0 sin cifrar (excepto la versión en el encabezado del registro).
Para obtener más información sobre dichos detalles sobre SSL, lea esto .