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?