El entorno sería un servidor apache2 ya configurado , al cual le vamos añadir autentifcación SSL basado en certificados.La idea es generar tantos certificados como usuarios tenga el sistema, y firmarlos con el mismo CA que tiene el certificado el servidor, en este caso, usaremos un CA “self-signed”, y nosotros mismos actuaremos de CA.
1.- Creamos nuestra entidad CA:
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Ojo: El campo CN ( Common Name) no puede ser iguales!
2.- Generamos la clave del servidor , el certificado (CSR) y lo firmamos con nuestro CA, con una validez de 365 días y al ser el primer certificado emitido, lo numeraremos con un serial 01.
openssl genrsa -des3 -out servidor.key 4096
openssl req -new -key servidor.key -out servidor.csr
openssl x509 -req -days 365 -in servidor.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out servidor.crt
3.- Integración en apache2:
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/servidor.crt
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /etc/apache2/ssl/ca.crt
SSLCertificateKeyFile /etc/apache2/ssl/servidor.key
Si queremos que apache2 no nos pida la contraseña cada vez que lo iniciemos:
openssl rsa -in servidor.key -out servidor-sin-contrasena.key
4.- Crear certificados de usuario para que puedan ser importados desde un navegador:
openssl genrsa -des3 -out $1.pem 2048
openssl req -new -key $1.pem -out $1-petic-cert-client.pem
openssl x509 -CA ca.crt -CAkey ca.key -req -in $1-petic-cert-client.pem -set_serial 3 -days 865 -extfile config2.txt -sha1 -out $1-client-cert.pem
openssl pkcs12 -export -in $1-client-cert.pem -inkey $1.pem -certfile ca.crt -out $1-cert-pck12.p12
