Compatibilidad con el protocolo SSL

1

Si me conecto a un servidor con una versión específica del protocolo SSL, pero no se ofrecen suites de cifrado bajo ese protocolo, ¿ese protocolo seguirá considerándose compatible?

Por ejemplo, conectando a un servidor usando SSLv2: el servidor acepta mi cliente-hola SSLv2, pero en la respuesta no hay suites de cifrado compatibles. SSLv2 es inseguro y nunca debería ser compatible, pero si el protocolo está habilitado y no hay suites de cifrado disponibles, ¿se considera que aún se admite?

    
pregunta Jak 12.01.2017 - 12:26
fuente

4 respuestas

4

Se considera compatible una versión de protocolo si puede finalizar con éxito el protocolo de enlace TLS con esta versión de protocolo. Dado que un protocolo de intercambio exitoso incluye un intercambio de claves que requiere un cifrado, no cuenta como exitoso si no se puede encontrar un cifrado común.

    
respondido por el Steffen Ullrich 12.01.2017 - 12:50
fuente
2

Si su cliente se implementa de acuerdo con las especificaciones, debería abortar si no recibe un cifrado correspondiente en el servidor.


En SSL 2.0 [1] esto se vería de la siguiente manera:

NO-CIPHER-ERROR Este error es devuelto por el cliente al servidor cuando no puede encontrar un tamaño de clave o cifrado que admite que también es compatible con el servidor. Este error no es recuperable.


Y en TLS 1.2 [2] como sigue:

handshake_failure       La recepción de un mensaje de alerta handshake_failure indica que el       El remitente no pudo negociar un conjunto aceptable de seguridad       Parámetros dados las opciones disponibles. Este es un error fatal.


[1] enlace

[2] enlace

    
respondido por el Hacktiker 12.01.2017 - 12:54
fuente
0

No.

SSL / TLS decide la versión del protocolo de la siguiente manera:

  • El cliente envía un mensaje de ClientHello que contiene la versión más alta de SSL / TLS admitida por el cliente.
  • El servidor compara su versión máxima admitida de SSL / TLS con la admitida por el cliente e intenta elegir la versión más alta admitida por el cliente y el servidor.
  • Si se selecciona una versión apropiada, se envía nuevamente dentro del mensaje de ServerHello. De lo contrario, la conexión se cerrará con un mensaje de error.

En el caso de que su cliente intente utilizar SSLv2, su paquete inicial de ClientHello informaría la versión máxima como SSLv2. Si el servidor no es compatible con SSLv2, rechazará la conexión. Si su cliente reportó una versión más alta admitida en ClientHello, entonces el servidor no respondería con ningún conjunto de cifrado SSLv2, y por lo tanto no sería posible una conexión SSLv2.

    
respondido por el Polynomial 12.01.2017 - 12:50
fuente
0

Basándome en las respuestas hasta ahora, he realizado algunas tareas de depuración utilizando una versión anterior de Apache httpd con SSLv2 habilitado y obtengo los siguientes registros de depuración; uno con SSLv2 habilitado (pero sin cifrados) y otro con SSLv2 deshabilitado:

SSLv2 no habilitado:

[info] [client 192.168.56.1] Connection to child 66 established (server 127.0.1.1:443)
[info] Seeding PRNG with 656 bytes of entropy
[debug] ssl_engine_kernel.c(1901): OpenSSL: Handshake: start
[debug] ssl_engine_kernel.c(1909): OpenSSL: Loop: before/accept initialization
[debug] ssl_engine_io.c(1881): OpenSSL: read 11/11 bytes from BIO#7f86fdb62540 [mem: 7f86fdb69e70] (BIO dump follows)
[debug] ssl_engine_io.c(1814): +-------------------------------------------------------------------------+
[debug] ssl_engine_io.c(1853): | 0000: 80 25 01 00 02 00 0c 00-00 00 10                 .%.........      |
[debug] ssl_engine_io.c(1859): +-------------------------------------------------------------------------+
[debug] ssl_engine_kernel.c(1938): OpenSSL: Exit: error in SSLv2/v3 read client hello A
[info] [client 192.168.56.1] SSL library error 1 in handshake (server 127.0.1.1:443)
[info] SSL Library Error: 336027900 error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol speaking not SSL to HTTPS port!?
[info] [client 192.168.56.1] Connection closed to child 66 with abortive shutdown (server 127.0.1.1:443)

SSLv2 habilitado, pero no se ofrecen cifrados:

[info] [client 192.168.56.1] Connection to child 6 established (server 127.0.1.1:443)
[info] Seeding PRNG with 656 bytes of entropy
[debug] ssl_engine_kernel.c(1901): OpenSSL: Handshake: start
[debug] ssl_engine_kernel.c(1909): OpenSSL: Loop: before/accept initialization
[debug] ssl_engine_io.c(1881): OpenSSL: read 11/11 bytes from BIO#7fefb8bd5540 [mem: 7fefb8bdce70] (BIO dump follows)
[debug] ssl_engine_io.c(1814): +-------------------------------------------------------------------------+
[debug] ssl_engine_io.c(1853): | 0000: 80 25 01 00 02 00 0c 00-00 00 10                 .%.........      |
[debug] ssl_engine_io.c(1859): +-------------------------------------------------------------------------+
[debug] ssl_engine_io.c(1881): OpenSSL: read 28/28 bytes from BIO#7fefb8bd5540 [mem: 7fefb8bec11b] (BIO dump follows)
[debug] ssl_engine_io.c(1814): +-------------------------------------------------------------------------+
[debug] ssl_engine_io.c(1853): | 0000: 05 00 80 03 00 80 01 00-80 07 00 c0 42 8e 70 80  ............B.p. |
[debug] ssl_engine_io.c(1853): | 0010: 2f 51 05 45 fe d2 37 a8-57 38 04 eb              /Q.E..7.W8..     |
[debug] ssl_engine_io.c(1859): +-------------------------------------------------------------------------+
[debug] ssl_engine_kernel.c(1909): OpenSSL: Loop: SSLv2 read client hello A
[debug] ssl_engine_kernel.c(1909): OpenSSL: Loop: SSLv2 write server hello A
[debug] ssl_engine_io.c(1881): OpenSSL: read 2/2 bytes from BIO#7fefb8bd5540 [mem: 7fefb8bec110] (BIO dump follows)
[debug] ssl_engine_io.c(1814): +-------------------------------------------------------------------------+
[debug] ssl_engine_io.c(1853): | 0000: 80 03                                            ..               |
[debug] ssl_engine_io.c(1859): +-------------------------------------------------------------------------+
[debug] ssl_engine_io.c(1881): OpenSSL: read 3/3 bytes from BIO#7fefb8bd5540 [mem: 7fefb8bec112] (BIO dump follows)
[debug] ssl_engine_io.c(1814): +-------------------------------------------------------------------------+
[debug] ssl_engine_io.c(1853): | 0000: 00 00 01                                         ...              |
[debug] ssl_engine_io.c(1859): +-------------------------------------------------------------------------+
[debug] ssl_engine_kernel.c(1933): OpenSSL: Exit: failed in SSLv2 read client master key A
[info] [client 192.168.56.1] SSL library error 1 in handshake (server 127.0.1.1:443)
[info] SSL Library Error: 335982795 error:1406B0CB:SSL routines:GET_CLIENT_MASTER_KEY:peer error no cipher
[info] [client 192.168.56.1] Connection closed to child 6 with abortive shutdown (server 127.0.1.1:443)

El apretón de manos falla en ambos casos, por diferentes razones. Por lo tanto, una falla de reconocimiento es equivalente a que el protocolo no sea compatible (según la respuesta aceptada).

    
respondido por el Jak 12.01.2017 - 15:53
fuente

Lea otras preguntas en las etiquetas