¿El certificado de cliente en SSL HandShake no es seguro?

5

Imagine que tenemos una aplicación que intenta establecer una conexión segura a un servidor mediante SSL. Ahora queremos que el usuario se autentique con un certificado de cliente que almacena en un almacén de claves seguro.

Entonces, si leo esta especificación en el servidor está enviando su certificado durante el protocolo de protocolo de enlace y puede solicitar un certificado del cliente con una solicitud de certificado, si es necesario. Ahora el usuario envía su certificado al servidor tal como lo hizo el servidor antes, lo que significa en texto sin formato ya que aún no se han intercambiado las claves.

Lo que no estoy obteniendo ahora es, si el certificado del cliente se envía en texto sin formato y el certificado no está vinculado a un dispositivo específico y la clave pública del cliente dentro de su certificado no se utiliza para generar la clave simétrica que es utilizado para el cifrado más tarde, ¿Por qué no es posible que un atacante olfatee el protocolo de protocolo de enlace entre el cliente y el servidor, suponiendo que esté sentado en la misma LAN inalámbrica que su víctima? De esta forma, podía ver el certificado del cliente, copiarlo y usarlo por su cuenta.

Entonces, ¿cómo se evita este escenario? Debido a que el atacante no podría cambiar algunos datos del certificado ya que no tiene la clave privada con la que se firmó el certificado, pero ¿no sería suficiente copiar el certificado para robar la identidad de sus víctimas? ¿Que me estoy perdiendo aqui? ¿Está el certificado vinculado al dispositivo después de todo? Pero pensé que no, ya que solo contiene información sobre el cliente y su clave pública.

Pensé que sería una mejor idea enviar el certificado del cliente después del protocolo de intercambio cuando se intercambió una clave simétrica y los datos de la aplicación están cifrados. Sé que también puede usar credenciales de usuario adicionales como un nombre de usuario y una contraseña, pero ahora estoy hablando de la seguridad del certificado del cliente.

Entonces, ¿qué piensas?

    
pregunta ESer 27.11.2012 - 17:00
fuente

4 respuestas

6

El certificado solo contiene la clave pública, que son datos públicos. La parte importante no es el mensaje Certificate que envía el cliente, sino el mensaje CertificateVerify que también envía el cliente. Ese mensaje contiene una firma digital que el cliente computa usando su clave privada, y sobre los mensajes anteriores. El atacante puede olfatear todo lo que quiera, no obtendrá la clave privada, que no se envía, y no podrá calcular otra firma, aplicable sobre otro intercambio de SSL.

    
respondido por el Thomas Pornin 27.11.2012 - 17:52
fuente
4

Incluso cuando el certificado del cliente está visible, la firma realizada con la clave privada no se puede falsificar. Las respuestas anteriores dieron más detalles sobre el mensaje Certificate Verify , pero el principio de clave pública / privada es el mismo que para los certificados de servidor (o mecanismos criptográficos asimétricos en general): si no tiene la clave privada, no puede hacerse pasar por la entidad a la que se emitió el certificado.

Un problema secundario de la autenticación del certificado del cliente es que, si se hace durante el protocolo inicial, el certificado es visible para el intruso. En algunos casos, esto puede no ser satisfactorio, ya que puede revelar la identidad del usuario (por ejemplo, CN=Bob Smith ).

Una forma de mitigar esto es usar la autenticación del cliente solo en un protocolo de negociación renegociado.

    
respondido por el Bruno 27.11.2012 - 23:30
fuente
2

El cliente firmará su mensaje con su clave privada que se puede descifrar usando la clave pública que se comparte abiertamente y se confía en que corresponda al cliente. Dado que el servidor puede descifrar esta información con la clave pública del cliente, sabe que la información provino del cliente. En el caso de que el siguiente paso de la negociación sea RSA, el contenido del paquete es una parte de una clave cifrada con la clave pública del servidor, por lo que solo el servidor puede descifrar el segundo nivel de cifrado.

En cuanto a un usuario deshonesto que retira el certificado y trata de secuestrar la sesión, el servidor tiene la clave pública del usuario y el atacante no podrá generar información que descifre con esa clave pública, por lo que la conexión se garantiza que el originador de la conexión continuará siendo el cliente de la conexión.

Si el certificado del cliente no se comparte previamente, sería posible evitar que se forme una sesión con el cliente y en su lugar sustituir la clave pública de un atacante, pero en ese momento el usuario objetivo no estaría en la sesión y no lo haría. Tener la información clave para la sesión. La misma prevención de MITM se aplica como SSL de certificado de servidor normal después del protocolo de enlace inicial, la provisión de un certificado de cliente simplemente garantiza que la identidad del cliente permanezca igual en una o más sesiones.

    
respondido por el AJ Henderson 27.11.2012 - 17:51
fuente
1

También algo más a tener en cuenta. Para hacer ilícito el certificado de un cliente, necesita un certificado que haya sido firmado por una Autoridad de Certificación, cuyo trabajo es responder por quién es usted. El cliente solo debe confiar en los certificados que han sido firmados por una CA con reputación.

    
respondido por el user5065 27.11.2012 - 21:06
fuente

Lea otras preguntas en las etiquetas