¿Cómo se selecciona la versión TLS entre el cliente y el servidor? [duplicar]

0

Tenemos un problema donde una aplicación cliente, que tiene habilitados TLS 1.0, 1.1 y 1.2, no se puede conectar a un servidor utilizando solo TLS 1.0.

Después de deshabilitar TLS 1.2 y 1.1 en el cliente, se puede establecer la conexión.

Así que me preguntaba; ¿Cómo se determina la versión TLS entre el cliente y el servidor?

    
pregunta oɔɯǝɹ 29.08.2017 - 09:44
fuente

2 respuestas

3

Parece que su aplicación (lado del cliente) no acepta el repliegue de negociación de versión durante el establecimiento de la sesión SSL / TLS.

La versión TLS es negociada inicialmente por el cliente (mensaje de saludo del cliente) especificando la versión más alta que admite entre otros parámetros (parámetros de cifrado, etc.). Texto de RFC 5246, TLS v1.2:

  

versión del cliente:         La versión del protocolo TLS mediante la cual el cliente desea         Comunicarse durante esta sesión. Esto DEBE ser el último         Versión (valor más alto) soportada por el cliente. Para esto         versión de la especificación, la versión será 3.3 (ver         Apéndice E para detalles sobre compatibilidad hacia atrás).

Una vez que el servidor recibe el saludo del cliente, envía el saludo del servidor con la versión SSL / TLS elegida, entre otros parámetros elegidos, según la información del saludo del cliente. Texto de RFC 5246, TLS v1.2:

  

versión_servidor:         Este campo contendrá el menor del sugerido por el cliente.         en el cliente hola y el más alto soportado por el servidor. por         Esta versión de la especificación, la versión es 3.3. (Ver         Apéndice E para detalles sobre compatibilidad con versiones anteriores.

Un resumen de todo esto se muestra en el siguiente diagrama:

YodiríaqueelproblemaesquesuaplicacióndeClientenoaceptaelreplieguedelaversiónTLSdurantelanegociaciónyesporesoquefuncionaaldeshabilitarTLSv1.1yTLSv1.2.VerifiqueeltextoennegritaenelRFC5246,ApéndiceE:

  

UnclienteTLS1.2quedeseenegociarconservidoresmásantiguos  envíeunClienteHelloTLS1.2normal,quecontenga{3,3}(TLS1.2)en
  ClientHello.client_version.Sielservidornosoportaesto
  versión,responderáconunServerHelloquecontengaunaversiónanterior.  númerodeversión.Sielclienteaceptautilizarestaversión,elcliente  lanegociaciónprocederásegúncorrespondaparaelprotocolonegociado.

    

Silaversiónelegidaporelservidornoescompatibleconelcliente  (onoaceptable),elclienteDEBEenviarunaalertade"protocol_version"
  mensaje y cierre la conexión.

Un enfoque fácil para depurar esto, podría ser verificar los registros del servidor y la aplicación (no especificó qué aplicaciones está usando) en modo detallado para que pueda ver los mensajes de negociación. Otros más avanzados pueden ser poner wirehark / tcpdump para verificar los parámetros de negociación. Esto debería ser factible sin demasiados problemas, ya que esta información no viaja encriptada.

    
respondido por el b0rt 29.08.2017 - 11:13
fuente
0

La mayoría de los programas de hoy intentan usar la versión más alta posible cuando intentan conectarse. Si eso falla, retroceden una versión hasta que se encuentra una versión compatible en el otro extremo. Si el programa no es lo suficientemente inteligente como para hacer eso automáticamente, deberá indicarle manualmente que use una versión anterior (como prácticamente lo hizo en su caso).

    
respondido por el Overmind 29.08.2017 - 09:51
fuente

Lea otras preguntas en las etiquetas