¿Puede un cliente SSL enviar CLIENTE HELLO con la versión 3.2 y NO negociar 3.1. Para sslv2 y 3, uno podría hacer eso enviando ssl23 CLIENT HELLO o SSL3. Por favor, proporcione información sobre cómo se puede admitir 3.2 pero NO 3.1 o si es posible.
Hay una forma teórica que se explica en el apéndice E de RFC 5246 ; pero su implementación no es necesariamente fácil.
En el mensaje ClientHello
, el cliente envía una "versión de protocolo" que es la más alta que el cliente admite (y está dispuesta a usar). Esto incluye el mensaje implícito "pero también puedo admitir algunas versiones anteriores". Luego, el servidor elige la versión que se usará y la declara en su mensaje ServerHello
. Por ejemplo, el cliente puede haber enviado "hasta TLS 1.1" (codificado como 0x0302) y el servidor podría responder "haremos TLS 1.0" (codificado como 0x0301).
No hay forma de que el cliente anuncie de manera proactiva las exclusiones (como en: "Admito TLS 1.1, pero no quiero hacer TLS 1.0"). Sin embargo, si el servidor intenta usar una versión de protocolo que el cliente no quiere admitir, entonces el cliente siempre tiene la posibilidad de cerrar la conexión. El apéndice E dice que:
Si la versión elegida por el servidor no es compatible con el cliente (o no aceptable), el cliente DEBE enviar una alerta de "protocol_version" mensaje y cierre la conexión.
En general, , si el cliente desea admitir solo un conjunto no contiguo de versiones de protocolo, entonces puede imponer eso mediante el uso de varios intentos de conexión. Por ejemplo, supongamos que, por algún motivo, el cliente desea hacer TLS 1.1 o SSL 3.0, pero no TLS 1.0. En ese caso, el cliente puede enviar primero un ClientHello
especificando TLS 1.1 como la versión con mayor soporte, y, si el servidor intenta usar TLS 1.0, el cliente puede cerrar la conexión (preferiblemente con el mensaje de alerta "protocol_version"), y luego vuelva a conectarse, esta vez enviando un ClientHello
especificando SSL 3.0 como la versión con mayor compatibilidad.
Esto funciona solo si el contexto de uso es tal que el cliente puede intentar varias conexiones (por ejemplo, estamos hablando de HTTPS, con conexiones TCP que el cliente puede abrir a voluntad).
En la práctica , un servidor o un cliente generalmente admite un rango contiguo de versiones de protocolo (por ejemplo, admite TLS 1.1 y 1.2, pero no 1.0 o SSL 3.0). En ese caso, un solo intento de intercambio es suficiente: o el servidor elegirá en el primer intento una versión de protocolo que sea aceptable para el cliente, o no hay una versión que sea aceptable para el cliente y el servidor y nunca funcionará.
Si una implementación de un cliente SSL ofrece una API para deshabilitar el soporte de una versión de protocolo anterior, es otra pregunta, por supuesto.
Lea otras preguntas en las etiquetas tls