Crear una Entidad certificadora CA

De Wikillano

Contenido

Paquetes

Lo primero que voy a hacer es instalar el paquete openssl

saturno:~# apt-get install openssl

Cambio de directorio:

saturno:~# cd /etc/ssl/certs/


Crear la CA

Creo la Entidad Certificadora, nos pedira datos y una passphrase para nuestra CA “la memorizamos”

saturno:/etc/ssl/certs# openssl req -x509 -newkey rsa:1024 -keyout cakey.pem -days 3650 -out cacert.pem

Generating a 1024 bit RSA private key
..........++++++
................................................++++++
writing new private key to 'cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Barcelona
Locality Name (eg, city) []:BCN
Organization Name (eg, company) [Internet Widgits Pty Ltd]:wikillano
Organizational Unit Name (eg, section) []:wikillano dept
Common Name (eg, YOUR name) []:ballano@ya.com
Email Address []:ballano@ya.com
saturno:/etc/ssl/certs#

Con este comando creamos un CA para certificados X509 con algoritmo de encriptación rsa de 1024 bytes. Con el −keyout le indicamos que la clave privada de nuestra CA se almacene en el fichero cakey.pem y la clave publica −out en el cacert.pem. la opcion -days 3650 es para que nuestra CA no expire en 10 años.

Ahora que ya tenemos nuestra propia entidad certificadora podemos crear los certificados que queramos.


Generamos la clave privada

saturno:/etc/ssl/certs# openssl genrsa -des3 -out serv-priv.pem -passout pass:password 1024

resultado:

Generating RSA private key, 1024 bit long modulus
...................................................++++++
...........++++++
e is 65537 (0x10001)

Con esto se genera la clave privada la cual tendrá un algoritmo de cifrado triple des (−des3) de 1024 y se almacenara en el fichero (−out) serv−priv.pem y con el comando //passout pass:// indicamos la passfrase para nuestra clave privada. yo le he puesto el mismo pass de antes, pero imagino que es igual ya que el password que debe coincidir es el de la clave privada con la pública. Ahora generamos la petición de certificado


Peticion de certificado:

openssl req -new -subj "/DC=wiki.ballano.net/OU=net/CN=wiki.ballano.net/O=wikillano" -key serv-priv.pem -passin pass:password -out petic-certificado-serv.pem

A la petición le indicamos que usará la clave privada que hemos hecho en el anterior comando -key serv-priv.pem y le indicamos el password que usamos en el anterior (-passing pass):pass y como salida (-out)le indicamos que genere el siguiente fichero petic-certificado-serv.perm. Crear el certificado

Finalmente ya podemos emitir el certificado. Para definir las características de un certificado openssl dispone del directorio /etc/ssl donde hay un fichero openssl.cnf con lo que podemos definir las características. Pero hay una forma mas simple de darle estas características, mediante la generación de un fichero de configuración por parte nuestra.ej:

creamos un fichero llamado “config1.txt” con el siguiente contenido:

basicConstraints = critical,CA:FALSE
extendedKeyUsage = serverAuth

En el fichero le indicamos el basicConstraints=critical,CA:FALSE para que cumpla con el X509v3 y con la RFC3280. También le indicamos que el certificado servira para un servidor con lo siguiente extendedKeyUsage=serverAuth, por ejemplo un servidor web que es para lo que lo utilizaré más adelante.


Ahora si, creamos el certificado:

saturno:/etc/ssl/certs# openssl x509 -CA cacert.pem -CAkey cakey.pem -req -in petic-certificado-serv.pem -days 3650 -extfile config1.txt -sha1 -CAcreateserial -out servidor-cert.pem

Resultado:

Signature ok
subject=/DC=wiki.ballano.net/OU=net/CN=wiki.ballano.net/O=wikillano
Getting CA Private Key
Enter pass phrase for cakey.pem:
saturno:/etc/ssl/certs#

En el comando anterior indicamos que sera un certificado del tipo x509 cuya CA (−CA) esta definida en el fichero cacert.pem (realizado anteriormente) y que usa como clave privada (−CAkey) el fichero cakey.pem y que el certificado a generar tendrá las especificaciones definidas en el apartado anterior (−req −in) las cuales están en el fichero de petición petic−certificado−serv.pem. El certificado tendrá una validez de diez años.

Durante la ejecución del comando se nos pedirá la clave de la CA.

Al final la cosa queda más o menos así:

CA Certificado cakey.pem serv-priv.pem cacert.pem servidor-cert.pem Conclusión

Pues ya tenemos los certificados listos para utilizarlos con nuestro servidor web.

Links de interes y agradecimientos a:

http://www.shadowsland.com

http://bulma.net/body.phtml?nIdNoticia=2280

Herramientas personales