Fijación de certificado SSL con certificados autofirmados

0

Estoy tratando de entender cómo funciona la fijación de certificados con certificados autofirmados. Mi idea es que un servidor con un certificado autofirmado aceptará las conexiones solo de los clientes que tienen el certificado de servidor (identificación de certificado).

He generado la clave privada del servidor & archivos de certificado utilizando el comando siguiente

 Server: openssl req -x509 -days 365 -newkey -sha512 rsa:4096 -keyout keyfile.key -out certfile.cert

Y luego estoy tratando de aceptar una conexión con este comando

Server: openssl s_server -accept 5000 -key keyfile.key -cert certfile.cert
Client:openssl s_client -connect localhost:5000

La conexión es exitosa pero parece que el Servidor está enviando su certificado durante el Apretón de manos, que no es lo que estoy esperando, así que probé el siguiente comando

Server: openssl s_server -accept 50020 -key keyfile.key -cert certfile.cert -Verify 0
Client: openssl s_client -connect localhost:50020

Ahora el cliente no puede conectarse y el servidor está dando este error:

 140736924775432:error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate:s3_srvr.c:3269:

No estoy seguro de cómo especificar el archivo de certificado del servidor desde el lado del cliente. He copiado el Certificado de servidor (certfile.cert) al cliente y lo he intentado con el siguiente comando, pero esto también requiere una clave privada.

Client: openssl s_client -connect localhost:50020 -cert certfile.cert

¿Me estoy confundiendo con Servidor & Certificados del cliente y ¿hay alguna forma para que el Cliente especifique el certificado del servidor?

    
pregunta Harish 07.12.2016 - 20:30
fuente

1 respuesta

2

Creo que no has entendido bien cómo funcionan la fijación de TLS y el certificado. El cliente no especificará qué certificado devolverá el servidor (aparte de usar la extensión SNI para establecer el nombre de host esperado) pero el servidor devolverá exactamente el certificado que debe ser utilizado por el cliente para identificar el servidor. El cliente verificará su situación de anclaje con un certificado autofirmado si el certificado enviado coincide con el certificado esperado.

El envío de este certificado dentro de un protocolo de enlace completo (es decir, no se reanuda) no es opcional cuando se usa la autenticación basada en certificado, es decir, no hay forma de que el servidor no envíe el certificado (pero prueba la posesión de la clave privada correspondiente) Porque el cliente ya lo sabe. Para obtener más información, consulte Cómo funciona SSL / TLS .

    
respondido por el Steffen Ullrich 07.12.2016 - 20:41
fuente

Lea otras preguntas en las etiquetas