¿Es posible actualizar la versión SSL de una conexión solo desde el lado del servidor?

2

Estoy intentando averiguar si hay una manera de actualizar la versión SSL de SSLv3 a TLSv1 de una conexión haciendo solo cambios en el lado del servidor.

En mi caso, tanto la aplicación cliente como el servidor utilizan OpenSSL (v0.9.8o), por lo que ambos admiten versiones SSL hasta TLSv1. Cada vez que el cliente desea establecer una conexión con el servidor, utiliza SSLv3.0 de forma predeterminada cuando inicia el protocolo de enlace SSL (es decir, ClientHello, Versión 3.0) y, por lo tanto, se establece una conexión con el servidor utilizando SSLv3.0.

Editar: La versión SSL predeterminada en la aplicación cliente está codificada de forma rígida a SSLv3.0.

Sin hacer ningún cambio en el código del lado del cliente, hay una manera de actualizar la conexión a TLSv1 haciendo solo cambios en el código del lado del servidor. ¿Tal vez mediante el uso de la renegociación SSL?

Nota: por supuesto, cambiar la versión predeterminada de la aplicación cliente para que inicie el protocolo de enlace con TLSv1 establece una conexión TLSv1 con éxito, sin embargo, esa no es una opción en mi caso por varias razones.

Cualquier referencia es muy apreciada. Gracias por tu ayuda.

    
pregunta jaybird19 16.12.2014 - 17:43
fuente

3 respuestas

1

En el protocolo de enlace SSL / TLS, el cliente envía (como parte de su ClientHello ) la versión máxima que admite; entonces el servidor elige la versión que se utilizará, que debería ser la más alta que admita el servidor, pero no más alta que el valor enviado por el cliente.

  • Si el cliente envía "SSL 3.0" como la versión con mayor compatibilidad, entonces el servidor tiene razón al usar SSL 3.0.

  • Si el cliente solo admite SSL 3.0, no obtendrá nada más que SSL 3.0.

  • Las renegociaciones no cambiarán nada. Una renegociación es simplemente un nuevo apretón de manos. Si el cliente realmente quiere decir "SSL 3.0" en su ClientHello , entonces lo dirá una y otra vez.

  • Si el cliente realmente admite versiones posteriores (TLS 1.0 o más) pero no lo dice, entonces:

    1. El cliente tiene errores o hace estupideces, y debe ser arreglado.
    2. Debido a que el cliente no cumple con los estándares, es difícil asumir de manera confiable cualquier comportamiento de su comportamiento.
    3. Sin embargo, es concebible que si el servidor responde con una versión superior (por ejemplo, TLS 1.0), entonces el cliente acepta usarlo aunque esté más allá del valor que el cliente anunciado .

Si el cliente utiliza OpenSSL como una biblioteca compartida (también conocida como "DLL"), es posible que tenga la opción de sustituir esa DLL de OpenSSL por otra que ignore el número de versión proporcionado por el cliente, y en su lugar anuncie lo que realmente apoya Este es un tipo de cambio del lado del cliente que no requiere cambiar el código de la propia aplicación del cliente y, por lo tanto, puede aplicarse incluso si el código fuente de esa aplicación no está disponible. Todavía es un truco horrible.

Una solución alternativa sería envolver al cliente dentro de algún tipo de proxy del lado del cliente, en esencia ejecutando un Ataque Man-in-the-Middle .

Si realmente no puede modificar el cliente de la manera descrita anteriormente, lo mejor que puede esperar es elegir (en el servidor) una suite de cifrado que minimice las deficiencias conocidas de SSL 3.0. En particular, la aplicación de un cifrado con RC4 evitará el ataque de POODLE (pero luego obtendrás los sesgos conocidos en RC4: elige tu veneno).

    
respondido por el Thomas Pornin 16.12.2014 - 19:12
fuente
1

Algo está mal en el lado del cliente que suena.

El cliente debe iniciar la sesión indicando la versión de protocolo más alta que puede aceptar .

TLS v1 se enumera como "3.1" para indicar > SSL3:

  

Desde los números de versión negociados en el   Los mensajes ClientHello y ServerHello de SSL son 3.0 y anteriores, los números de versión para   ser negociado con TLS y el futuro r   Las evidencias continuarán negociando como la versión 3.1.   o mas alto. Esto se hará para denotar una revisión de SSL 3.0, pero para promover hacia atrás   compatibilidad entre clientes y servidores mediante SSL o TLS.

Source

Más aclaraciones:

El cliente DEBE declarar la versión más alta que puede admitir, y el servidor aceptará, ofrecerá una versión más baja o declarará PROTOCOL_VERSION y cerrará. De ietf.org :

  

Un servidor TLS también puede recibir un ClientHello que contiene   Número de versión más pequeño que el más alto compatible   versión. Si el servidor desea negociar con clientes antiguos,   Se procederá según corresponda para la versión más alta.   soportado por el servidor que no es mayor que   ClientHello.client_version. Por ejemplo, si el servidor   admite TLS 1.0, 1.1 y 1.2, y client_version es TLS   1.0, el servidor procederá con un TLS 1.0 ServerHello. Si   El servidor soporta (o está dispuesto a usar) solo versiones mayores   que client_version, DEBE enviar una alerta de "protocol_version"   mensaje y cierre la conexión.

    
respondido por el Digital Chris 16.12.2014 - 18:03
fuente
0

Puede simplemente rechazar el nivel inferior de conexión si no quiere que se use. Al establecer una conexión SSL / TLS, el servidor le permite al cliente saber qué es lo que puede admitir y los dos determinan cuál es la mejor opción.

Si el cliente admite TLS y está siendo forzado a SSL3.0, es probable que algo esté mal en el extremo del cliente (o puede ser un proxy SSL más antiguo, por ejemplo). Algo a lo largo de la ruta no permite que se elija TLS o las preferencias del cliente se configuran de forma muy extraña para elegir una conexión de seguridad más baja en lugar de una de mayor seguridad.

Su mejor apuesta es simplemente rechazar SSL3.0 si no quiere que la gente lo use. Es bastante fácil para un atacante forzar a un cliente a un nivel inferior de protocolo si su servidor lo admite, por lo que su mejor opción es no admitirlo. Esto puede significar que algunas personas con navegadores extremadamente desactualizados no puedan acceder a su sitio, pero dejarlo abierto puede comprometer a todos sus visitantes.

    
respondido por el AJ Henderson 16.12.2014 - 18:41
fuente

Lea otras preguntas en las etiquetas