Вы находитесь на странице: 1из 5

CREAR UNA PKI EN UBUNTU

Directorio de SSL: /usr/lib/ssl


Archivo configuracin SSL: /usr/lib/ssl/openssl.cnf
Script para la CA: /usr/lib/ssl/misc/CA.pl

https://www.openssl.org/docs/apps/openssl.html
https://www.openssl.org/docs/apps/req.html

CREACION DE UN CERTIFICADO AUTOFIRMADO


#mkdir /etc/apache2/ssl
#openssl req -newkey rsa:2048 -x509 -sha256 -days 365 -nodes
-out /etc/apache2/ssl/www_redinterna.pem
-keyout /etc/apache2/ssl/www_redinterna.key

-newkey rsa:2048 > creamos una nueva clave privada y especificamos la longitud de clave
-x509 > crear un certificado autofirmado
-sha256 > usar algoritmo de resumen sha256
-days256 > crear el certificado para una validez de 365 das
-nodes > la clave privada no ser encriptada (evita tener que introducir cada vez la contrasea para acceder
a la clave privada)
-out > archivo de salida donde almacenar el certificado
-keyout > archivo de salida donde almacenar la clave privada

Generating a 2048 bit RSA private key


...................................++++++
..............................++++++
writing new private key to '/etc/apache2/ssl/apache.pem'
----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]:Almeria
Locality Name (eg, city) []:Huercal-Overa
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Cura
Valera
Organizational Unit Name (eg, section) []:Dpto. Informatica
Common Name (eg, YOUR name) []:www.redinterna.org
Email Address []:admin@redinterna.org

El Common Name es conveniente que sea la pgina web de la que queramos crear el certificado.
De esta forma, aunque SI que nos aparecer el mensaje de que el certificado no ha sido firmado
por una CA de confianza, al menos NO nos aparecer el mensaje de que es para otro sitio
diferente.

CREACION DE UNA AUTORIDAD DE CERTIFICACIN


Si lo que tenemos entre manos es un proyecto muy serio, y necesitamos crear un certificado SSL
firmado de verdad por alguna de las autoridades certificadoras cuyos certificados raz estn ya
incluidos en todos los navegadores estndar (p.e. VeriSign), tras hacer la compra y seguir todos
los trmites necesarios, tendremos que crear una clave privada y generar una peticin de
certificado para firmar y envirsela a la autoridad certificadora:
Apache SSL/TLS Strong Encryption: FAQ: How do I create a real SSL Certificate?.
Sin embargo, si estamos en el entorno de la Intranet de una compaa, donde podramos controlar
que todos los sistemas incluyeran el certificado raz de la misma, o, simplemente, para estudiar
cmo hacerlo, podramos generarnos nuestro propio certificado raz, autoproclamndonos a
nosotros mismos como autoridad certificadora.

OpenSSL dispone de varios script para realizar ciertas tareas. Uno de ellos es CA.pl, que en
Ubuntu se encuentra en el directorio /usr/lib/ssl/misc/CA.pl.
Antes de lazar el script, nos crearemos un directorio de trabajo donde crear nuestra CA y desde
donde posteriormente crearemos los certificados web y los firmaremos por la nuestra CA.
Cuando lancemos el script, se nos crear dentro un directorio llamado demoCA con todos los
archivos de la CA creada. Este directorio es configurable cambiando el archivo de configuracin
de SSL.

#cd
#mkdir miCA
#cd miCA
Lanzaremos el script con el siguiente parmetro:

#/usr/lib/ssl/misc/CA.pl -newca
Al arrancar el script, nos pedir una contrasea. Esta contrasea ser la contrasea de la CA y se
nos pedir cada vez que queramos firmar un certificado.
Al final de proceso, por seguridad, se nos pide otra contrasea extra, pero esta vez la podemos
omitir. Despus de esto, tendremos que volver a introducir la contrasea de la CA establecida
anteriormente para firmar el certificado de la CA.

# ./CA.pl -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.......................................................................................
++++++
......................++++++
writing new private key to './demoCA/private/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]:Spain
Locality Name (eg, city) []: Huercal-Overa
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Cura Valera
Organizational Unit Name (eg, section) []:Dpto Informatica
Common Name (eg, YOUR name) []:CA IES Cura Valera
Email Address []:admin@iescuravalera.es
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
bf:8a:98:f2:48:c0:84:68
Validity
Not Before: Feb 18 19:02:57 2009 GMT
Not After : Feb 18 19:02:57 2012 GMT
Subject:
countryName
= ES
stateOrProvinceName
= Spain
organizationName
= IES Cura Valera
organizationalUnitName
= Dpto Informatica
commonName
= CA IES Cura Valera
emailAddress
= admin@iescuravalera.es
X509v3 extensions:
X509v3 Subject Key Identifier:
BD:85:EB:33:B0:0B:06:74:9A:F3:AB:18:95:D5:4B:CB:76:B8:EA:83
X509v3 Authority Key Identifier:
keyid:BD:85:EB:33:B0:0B:06:74:9A:F3:AB:18:95:D5:4B:CB:76:B8:EA:83
DirName:/C=ES/ST=Spain/O=IES Cura Valera/OU=Dpto Informatica
serial:BF:8A:98:F2:48:C0:84:68
X509v3 Basic Constraints:
CA:TRUE
Certificate is to be certified until Feb 18 19:02:57 2012 GMT (1095 days)
Write out database with 1 new entries
Data Base Updated

Al finalizar el proceso, se nos crearn entre otros, dos archivos importantes:

./demoCA/cacert.pem > certificado pblico de la CA


./demoCA/private/cakey.pem > clave privada de la CA
El archivo cacert.pem es el certificado de la nuestra autoridad certificadora y debemos de
instalarlo en los navegadores para que haya confianza al entrar en la web (al igual que estn
instalados por defecto los certificados de empresas certificadores como Verisign).

CREACION DE UN CERTIFIADO FIRMADO POR LA CA CREADA


Creamos la peticin o Certificate Signing Request (CSR) por parte del servidor web. Esta peticin
y su posterior firma la realizaremos dentro del directorio que hemos creado para crearnos nuestra
CA, para que los comandos encuentren bien la ruta hacia los archivos de nuestra CA.
#cd
#cd miCA
#openssl req -newkey rsa:1024 -nodes -out servidor.csr -keyout servidor.key

IMPORTANTE: a la hora de crear es peticin, en el campo Common Name debemos de ponerle la


URL de la pgina web del servidor a la que vamos a acceder mediante https. Este campo no debe
de coincidir con el Common Name introducido al crear el certificado raz de la CA.

Country Name (2 letter code) [AU]:ES


State or Province Name (full name) [Some-State]:Spain
Locality Name (eg, city) []: Huercal-Overa
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Cura Valera
Organizational Unit Name (eg, section) []:redinterna.org
Common Name (eg, YOUR name) []:www.redinterna.org
Email Address []:admin@redinterna.org

El comando anterior nos crea dos archivos:

servidor.csr > peticin a firmar por la CA


servidor.key > clave privada del servidor

Y una vez creado el .csr, debemos de firmarlo por nuestra CA. Para firmar la peticin, se nos
pedir la clave de nuestra CA.
#openssl ca -policy policy_anything -out servidor.pem -infiles servidor.csr

Este comando nos creara el siguiente archivo:

servidor.pem > certificado del servidor firmado por la AC

CONFIGURACION NECESARIA EN APACHE


Una vez que temos los certificados creados, debemos de configurar Apache. Para hacer esto,
debemos de:
-

Copiar la clave privada y el certificado firmado por la CA a un directorio de apache


Activar el mdulo SSL
Definir correctamente el Host Virtual

Nos creamos la carpeta ssl.crt dentro del directorio /etc/apache2/


Una vez creada, copiaremos los dos archivos:

servidor.key
servidor.pem
Activaremos el mdulo SSL con el comando
# a2enmod SSL

Tendremos que modificar el VirtualHost definido de la siguiente forma:


<VirtualHost *:443>

SSLEngine On
SSLCertificateKeyFile /etc/apache2/ssl.crt/servidor.key
SSLCertificateFile /etc/apache2/ssl.crt/servidor.pem

</VirtualHost>

CONFIGURACION NECESARIA EN EL NAVEGADOR WEB


Para que el navegador web no nos muestre un error de confianza, debemos de instalar el
certificado de nuestra CA en nuestro navegador web.
El certificado est en formato .pem y este formato no es compatible con sistemas windows o con
algunos navegadores. Es posible que tengamos que convertirlo a otro formato antes de instalarlo
en el navegador:

Convertir de PEM > DER (nos situaremos en el directorio donde este el cacert.pem)
#openssl x509 -in cacert.pem -out cacert.cer -sha1 -outform DER

Convertir de PEM > P12 (nos situaremos en el directorio donde se han creado las claves del servidor)
#openssl pkcs12 -export -in servidor.pem -inkey servidor.key
-certfile demoCA/cacert.pem -out newcert.p12