jueves, 29 de mayo de 2008

HOW-TO OpenSSL

Comenzaremos instalando una entidad certificadora:

1.Se instala openssl

#apt-get install openssl

2.Crear los siguientes directorios dentro de el directorio /etc/ssl/
certificadora/
certificadora/certs
certificadora/private
certificadora/newcerts
certificadora/crl
*”certificadora/” es un nombre de directorio que puede variar según el criterio de quien configure la entidad en contraste los subdirectorios de la misma deben tener los nombres señalados en este how-to.

#mkdir -p /etc/ssl/certificadora/certs
#cd etc/ssl/certificadora/
#mkdir private newcerts crl

3.luego de esto ingresamos al archivo de configuracion del openssl /etc/ssl/openssl.cnf

#pico /etc/ssl/openssl.cnf

4.en el archivo (/etc/ssl/openssl.cnf) encontraremos las siguientes lineas (los numeros en negrilla son el numero de cada linea en el archivo):

37 dir = /etc/ssl/certificadora
38 certs = /etc/ssl/certificadora/certs
39 crl_dir = /etc/ssl/certificadora/crl
40 database = /etc/ssl/certificadora/index.txt
43 new_certs_dir = /etc/ssl/certificadora/newcerts
45 certificate = /etc/ssl/certificadora/pub.crt
46 serial = /etc/ssl/certificadora/serial
50 private_key = /etc/ssl/certificadora/private/priv.key
68 default_days = 365 # dias en que caduca el certificado

5.Por ultimo generamos un certificado para nuestro CA (entidad certificadora).

#openssl req -nodes -new -keyout midominio.key -out midominio.csr

Luego lo firmamos

#openssl ca -out midominio.crt -in midominio.csr


Con esto tenemos lista la entidad certificadora y estamos listos para comenzar a firmar certificados.

Generar Certificados De Cliente:

El certificado se crea desde el equipo cliente de la siguiente manera

$openssl req -x509 -newkey rsa:2048 -keyout cakey.pem -days
365 -out cacert.pem

* Con este comando ademas de generar el certificado tambien generamos las llaves publica y privada del servidor, si ya tienes tus llaves omite la parte -newkey rsa:2048 de esta manera solamente generara el certificado.

solo falta enviarlo a la entidad certificadora nosotros para hacer esto utilizamos ssh:

$scp cacert.pem root@[aqui la ip de el CA]:/tmp

para hacer esto se necesita tener pasword de root, en caso de que no seas el adminisrtador de la entidad certificadora y no tengas contraseña de root por obvias razones puedes pasar tu certificado con otro usuario para esto le dises al administrador de el CA te cree un usuario y lo copias de la siguiente manera

ejemplo

$scp cacert.pem miuser@[aqui la ip de el CA]:/home/miuser

ya solo falta que la CA (entidad certificadora) firme el certificado (valga la redundancia) y nos devuelva el certificado ya firmado.


Firma De Certificados Por La Entidad Certificadora

Despues de generar los certificados como cliente es necesario que una entidad certificadora los firme.
El certificado que vamos a firmar es el mismo que generamos en el ejemplo anterior cacert.pem.

El comando para firmar es facil:

#openssl ca -out certfirmado.crt -in cacert.pem

La interpretacion tambien es sencilla, simplemente le dijimos a la entidad certificadora que tome el certificado cacert.pem, lo firme y lo exporte a un certificado nuevo en este caso llamado certfirmado.pem el cual seria el certificado ya firmado y el que habria que instalar en nuestro sitio web.



Integrar OpenSSL Con Un Servidor Web

Ahora solo queda integrar openSSL con nuestro servidor web, para la prueba utilizaremos apache 2.6 (obviaremos la instalacion y configuracion del apache asi que daremos por hecho que ya tienes configurado tu servidor web).

Teniendo en cuenta que ya tu servidor web esta corriendo y puedes acceder a el normalmente procederemos a agregarle la seguridad SSL, para esto agregamos las siguientes lineas en el archivo /etc/apache2/sites-available/default:

NameVirtualHost *:443
ServerAdmin sgarcia@misena.edu.co
DocumentRoot /var/www/
SSLEngine on
SSLCertificateFile /etc/ssl/certfirmado.crt [ruta del certificado firmado]
SSLCertificateKeyFile /etc/ssl/cakey.pem [ruta de la llave privada creada] anteriormente
ServerName mypage.mydomain.com
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

Ahora debemos cargar los modulos de SSL en Apache

#a2enmod

Lo que sigue ahora es iniciar el Apache con SSL

#/etc/init.d/apache2 force-reload (Con este comando forzamos a Apache a cargar los modulos de SSL)

Ahora podemos proceder a probar si aun tenemos acceso normalmente a nuestro sitio web y notaran que se puede acceder tanto con HTTP como con HTTPS, pero al ingresar con este nos saca un aviso que nos dice que la pagina web solicitada tiene un certificado firmado por una entidad desconocida y pide autorizacion del usuario para ingresar.
Para que esto no suceda mas debemos instalar el certificado de la entidad certificadora en nuestro navegador.
En Mozilla Firefox se hace de la siguiente manera:
Editar
Preferencias
Avanzado
Cifrado
Ver certificados
Autoridades
Importar
Despues de esto podremos ingresar normalmente a la pagina con HTTPS.

© 2008, Stiven Garcia, Andres Uran, Andres Ruiz, Ferney Martinez
Este how-to Esta licenciado bajo los terminos de creative commons