SSLv3 Handshake pero cliente TLSv1 hola

4

Estoy tratando de entender el protocolo de protocolo de enlace, cuando tuvimos nuestro modo de depuración ssl, vimos que el protocolo de enlace es SSLv3, pero el Cliente Hola como TLSv1.

enlace

¿Qué significa eso?

El cliente envía SSLv3 ClientHello para que un servidor que entienda solo SSLv3 pueda procesar ese mensaje y continuar con un protocolo de enlace SSLv3. Pero SSLv3 ClientHello también dice "por cierto, conozco TLSv1, así que si también conoces TLSv1, hagamos TLSv1 en lugar de SSLv3.

Corríjalo, si esto no tiene sentido, no soy un tipo de redes / IS.

    
pregunta Neetha 06.03.2015 - 15:09
fuente

3 respuestas

7

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 .

    
respondido por el Thomas Pornin 06.03.2015 - 16:37
fuente
1

Mientras omite cualquier información sobre la pila de software que está utilizando, asumo que esto es solo otro caso del uso de rutinas de manejo de SSLv3 para analizar los datos de TLSv1. Esto es posible porque ambos protocolos son muy similares. Con las pilas OpenSSL encontrará muchas rutinas que hablan sobre SSLv3 o tienen algo con sslv3 en el nombre de la función, incluso si procesan datos TLSv1.0 +.

    
respondido por el Steffen Ullrich 06.03.2015 - 15:15
fuente
1

Esto es bastante correcto. Los detalles son que aparecen en los RFC de TLS , pero aquí está la versión corta:

Los mensajes TLS se envían con varias capas; un mensaje de ClientHello se envía dentro de un registro TLSPlaintext, que se transporta a través de (generalmente) TCP. El registro TLSPlaintext tiene un campo de "versión", que es de donde proviene el SSLv3 que está viendo. El mensaje de ClientHello tiene un campo "versión_cliente", que es el valor TLSv1 informado.

Se supone que una implementación TLS acepta cualquier versión que comience con "3" (TLSv1 es 3.1, TLSv1.1 es 3.2, etc.). En la práctica, algunos servidores fallarán silenciosamente (en lugar de dar una alerta útil) si esta versión es más alta de lo que pueden admitir. Por lo tanto, los clientes generalmente envían "3.0" (SSLv3) o la versión mínima que pueden admitir.

    
respondido por el bonsaiviking 06.03.2015 - 16:35
fuente

Lea otras preguntas en las etiquetas