Forzar la autenticación EAP-TLS 1.2 con FreeRadius y OpenSSL

1

Trabajé con el protocolo de enlace TLS DHECE basado en un servidor FreeRADIUS y WPA_supplicant, ambos ejecutando OpenSSL 1.0.1j FIPS.

Después de observar el tráfico de Wireshark, me doy cuenta de que el cliente envía un mensaje de bienvenida del cliente utilizando TLS 1.0. Creo que los certificados ECC tienen un problema con OpenSSL / TLS 1.0.

He probado s_client y s_server con los mismos certificados usando TLS 1.2 y fue EXITOSO.

Parece que no puedo entender cómo cambiar la versión TLS desde 1.0 - > TLS 1.2 en el mensaje de saludo del cliente. Quizás, porque TLS 1.0 no admite cifrados ECC, ¿podría haber un problema? Sin embargo, DEBE forzar un TLS 1.2 porque la nueva versión de SSL lo admite y los cifrados.

Además, el protocolo de enlace falla con "SSLv3_GET_CLIENT_HELLO Fatal HandShake Error" durante el primer paso del protocolo de enlace TLS 1.0.

¿Alguna idea al respecto?

    
pregunta userJoe 31.10.2014 - 01:12
fuente

1 respuesta

1

Como mucho, una respuesta parcial pero demasiado para comentarios razonables.

ECDHE NO requiere TLS1.2, solo 1.0 como dije en el comentario. Lo usé a menudo en openssl 1.0.0 que ni siquiera implementa 1.2, y aún así funciona bien especificando 1.0 en openssl actual o usando java sin sangrado (j7 puede hacer 1.1 y 1.2, pero por defecto es 1.0). De hecho, openssl en realidad admite ECDHE (y otras características de ECC) en SSL3, que el RFC no solicita, por lo que funciona para openssl-to-openssl pero no necesariamente con otras implementaciones; pero no hay una buena razón para usar eso cuando hay disponible TLS1.0 más robusto. Las únicas funciones de cifrado que requieren TLS1.2 son AEAD (en openssl GCM) y SHA2. Si su aplicación requiere ECDHE-ECDSA-AES128-SHA256 pero no ECDHE-ECDSA-AES128-SHA, que fallaría en 1.0. ¿Qué cifrados se ofrecen en su ClientHello? Algunos buscadores de Google encuentran enlace que sugiere al menos la posibilidad de especificar la lista de cifras desde 2012, pero no lo hice No vea ningún documento sobre si y cómo un usuario controla esto.

Lo que me recuerda: ¿estás viendo la versión correcta en ClientHello? Hay dos versiones: capa de registro y protocolo de enlace. OpenSSL utiliza la versión 0301 (TLS1.0) "Record Layer" para que ClientHello ofrezca una variedad de protocolos, para garantizar que un par que implementa solo una versión anterior "negociara hacia abajo" correctamente; es la versión bajo "Protocolo de protocolo de enlace: Cliente Hola" que especifica la versión ofrecida. Y aún no ha dicho cuál es la respuesta en Wireshark: ¿hay una alerta y con qué código, o alguna otra cosa, o qué?

Dicho esto, es posible que desee TLS1.2 por sus otros beneficios o solo por la protección del futuro. Entre los protocolos que implementa openssl, los que ofrece para un cliente o acepta para un servidor están controlados por llamadas que el código respectivo del cliente o de la aplicación del servidor hace. El punto de inicio para un SSL_CTX son los "métodos" para un protocolo específico como SSLv3_*method o TLSv1_2_*method , o el "genérico" SSLv23_*method (un nombre heredado que ahora es engañoso y se puede cambiar en una futura versión de openssl ) seguido de SSL_[CTX_]set_options con (entre otros) SSL_OP_NO_(protocol) bits.

Suponiendo que anteriormente, ClientHello es la versión de registro 0301 Y la versión de handshake 0301, es decir, solo TLS1.0, bien podría ser que wpa_supplicant se haya codificado para hacer específicamente TLSv1_*method . Esto podría haber tenido sentido hace diez años, cuando TLS1 (.0) era el mejor disponible, y había problemas con SSLv2 siendo atacable y SSLv3 inaceptable para el uso de USgovt (aunque en realidad seguro) por lo que alguien podría razonablemente haber sentido "lo haremos". proteger a esos @ #? usuarios de cometer un error y hacer algo inseguro forzando TLS1 ". Si es así, el paso del tiempo ha hecho que este pensamiento sea incorrecto.

    
respondido por el dave_thompson_085 01.11.2014 - 09:41
fuente

Lea otras preguntas en las etiquetas