jueves, 29 de mayo de 2008

How-to OpenSSL

HOW-TO OpenSSL

Comenzaremos instalando una entidad certificadora:


Se instala openssl

#apt-get install openssl

  1. 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

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

    #pico /etc/ssl/openssl.cnf

  2. 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

  3. 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



Descarga este How-to en formato pdf aqui

No hay comentarios: