Win2012R2 TLS1.2 Autenticación mutua: ¿cambiar las especificaciones de cifrado desde el lado del servidor si no hay un certificado del cliente?

2

Estoy probando una aplicación basada en .net que se ejecuta en un servidor Win2012r2 que proporciona servicios web basados en http y confío en SChannel de Windows para implementar la autenticación mutua tls1.2 contra los clientes con capacidad tls1.2.

Hasta ahora, la autenticación mutua ha funcionado muy bien (el certificado del cliente se valida correctamente en la lista de emisores de confianza definidos y activos en el almacén de certificados del equipo local).

Ayer me encontré con el siguiente escenario que de alguna manera me desconcierta: incluso si el cliente presenta una longitud de certificado de 0, el protocolo de enlace parece ser técnicamente exitoso y no da como resultado una falla de protocolo de enlace o una alerta de protocolo de enlace:

  • (en el lado del servidor) Servidor Hello, Certificate, Server Key Exchange, Solicitud de certificado , Server Hello Done;
  • (en el lado del cliente) Certificado, Intercambio de claves de cliente, Cambiar espec. de cifrado, Mensaje de reconocimiento cifrado (sin embargo, el cliente de prueba no proporciona ningún certificado de cliente - longitud del certificado de cliente de 0 - durante el protocolo de enlace);
  • (en el lado del servidor): cambiar la especificación de cifrado , mensaje de Apretón de manos cifrado;

¿Por qué el lado del servidor no está terminando el protocolo de enlace (falla o alerta de Handshake) después de no obtener un certificado de cliente?

¿Podría ser simplemente la forma en que wireshark está interpretando / analizando el proceso de negociación?

¿Es esto algo configurable / ajustable a nivel de SChannel o solo se puede ajustar a nivel de aplicación?

    
pregunta Ottootto 25.02.2017 - 06:15
fuente

1 respuesta

1

Es totalmente válido que el cliente responda a una solicitud de certificado del servidor con un certificado vacío. Depende del servidor cómo tratar este caso, es decir, si tratará un certificado de cliente como opcional o si se requiere el certificado.

No estoy familiarizado con SChannel pero con OpenSSL puede establecer SSL_VERIFY_FAIL_IF_NO_PEER_CERT en SSL_CTX_set_verify si desea que el servidor falle si no se envía ningún certificado de cliente si configura SSL_VERIFY_PEER solo que el certificado de cliente es opcional .

SChannel tiene probablemente un mecanismo similar, pero depende de la aplicación para usarlo. Por lo tanto mirar en la configuración de su servidor HTTP. En el caso de IIS, esto se describe en la documentación que dice eso puede configurar certificados de cliente para que sean ignorados, aceptados o requeridos por el servidor.

    
respondido por el Steffen Ullrich 25.02.2017 - 07:57
fuente

Lea otras preguntas en las etiquetas