Me pregunto si los siguientes pasos son suficientes para proteger mi servicio en la nube, en el sentido de que los usuarios no autorizados no pueden jugar con mi aplicación web.
En otras palabras, ¿es posible pasar por alto este tipo de protección?
Así que los pasos son:
Crear una raíz de autoridad de certificación (que representa este servidor)
Organización & Nombre común: algún identificador humano para esta CA del servidor.
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Crear la clave del cliente y la CSR
Organización & Nombre común = nombre de la persona
openssl genrsa -des3 -out client.key 4096
openssl req -new -key client.key -out client.csr
# self-signed
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
Convertir la clave del cliente a PKCS
Para que se pueda instalar en la mayoría de los navegadores.
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
Convertir la clave del cliente en PEM (combinado)
Combina client.crt y client.key en un solo archivo PEM para programas que utilizan openssl.
openssl pkcs12 -in client.p12 -out client.pem -clcerts
Instale la clave de cliente en el dispositivo cliente (SO o navegador)
Utilice client.p12. Las instrucciones reales varían. Instale el certificado CA en nginx
Para que el servidor web sepa que debe solicitar (y validar) la clave de cliente de un usuario contra el certificado de CA interno.
ssl_client_certificate /path/to/ca.crt;
ssl_verify_client optional; # or 'on' if you require client key
Mi host virtual se ve así:
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile "cert/ca.crt"
¿Alguna sugerencia?