...las cosas que me gustan, descubro o aprendo.


lunes, 25 de mayo de 2009

Instalación de Servidor Web Apache con Certificado de Seguridad

Instalación de servidor Web apache con certificado seguridad


Para poder tener nuestro servidor web con certificado de seguridad lo primero es crear los certificados digitales, para lo cual vamos a utilizar openssl.

En el mundo real lo que haríamos con el openssl seria crear no un certificado, sino una petición o requerimiento de certificado es decir un request (archivo .crs) el cual se le envía a la entidad certificadora (CA). Luego la CA nos devolverá el certificado como tal (archivo .crt), que es el que se debería instalar en nuestro servidor web.
Pero para este trabajo lo que vamos a hacer es instalar un certificado digital, firmado por una CA que nosotros mismos creamos. Entonces a continuación, lo que se hará sera crear un certificado auto-firmado para nuestra CA y luego con éste, crearemos el certificado que vamos a instalar el servidor web.

NOTA: Si no se tiene el openssl, se puede instalar con:


aptitude install openssl


Paso #1: Creación del certificado auto-firmado para nuestra CA

- Creamos primero la llave privada para nuestra CA

root@orex2:~# cd Certificados/CA
root@orex2:~/Certificados/CA# openssl genrsa -des3 -out ca_santiago.key 1024

Donde:
-des3...algoritmo de cifrado
-out ca_santiago.key...nombre de la llave
1024...tamaño de la llave en bits

Luego nos pedirá un password para asegurar como tal el archivo de la llave


- Con la llave creada, se genera entonces el certificado digital

root@orex2:~/Certificados/CA# openssl req -new -x509 -days 365 -key ca_santiago.key -out ca_santiago.crt

Donde:
-x509...es el estándar del certificado
-days 365...es la vigencia del certificado -key ca_santiago.key...es la llave que creamos en el paso anterior -out ca_santiago.crt...para especificar el nombre del certificado

Primero se nos pedirá el password que le pusimos a la llave, y luego la información que llevara el certificado de nuestra CA. En mi caso ingrese la siguiente informacion:

Country Name (2 letter code) [AU]:CO
State or Province Name (full name) [Some-State]:Antioquia
Locality Name (eg, city) []:Medellin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:OREX
Organizational Unit Name (eg, section) []:Unidad de Certificacion
Common Name (eg, YOUR name) []:www.orex.com.co
Email Address []:info@orex.com.co


Paso #2: Creación del certificado para el servidor web

- Creamos la llave privada para nuestro certificado, así como creamos la llave anterior

root@orex2:~# cd Certificados/servidorweb/
root@orex2:~/Certificados/servidorweb# openssl genrsa -des3 -out srv_santiago.key 1024

- Con la llave creada creamos el request del certificado digital

root@orex2:~/Certificados/servidorweb# openssl req -new -key srv_santiago.key -out srv_santiago.crs

Luego nos pide el password de la llave que acabamos de crear, y la información queremos que valla en el certificado. Uno de los campos a tener en cuenta es el Common Name pues es importante que allí se se ingrese el nombre de dominio de nuestro servidor web. Lo que ingrese en mi caso fue:

Country Name (2 letter code) [AU]:CO
State or Province Name (full name) [Some-State]:Antioquia
Locality Name (eg, city) []:Medellin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Aldana s.a.
Organizational Unit Name (eg, section) []:Departamento de Seguridad
Common Name (eg, YOUR name) []:aldana.seguridad.net
Email Address []:santiago@aldana.seguridad.net

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

- Con el request anterior y con el certificado de nuestra CA, vamos a firmar el certificado del servidor, es decir finalmente vamos a crear el certificado para el servidor web

root@orex2:~/Certificados/servidorweb# openssl x509 -req -in srv_santiago.crs -out srv_santiago.crt -sha1 -CA ../CA/ca_santiago.crt -CAkey ../CA/ca_santiago.key -CAcreateserial -days 120

Donde:
-req -in srv_santiago.crs...es el request del certificado del servidor
-sha1...es el algoritmo para obtener el hash
-CA ../CA/ca_santiago.crt -CAkey ../CA/ca_santiago.key...son las rutas del certificado auto-firmado de nuestra CA y su llave privada respectivamente
-days 120...es la vigencia del certificado

Luego nos pedirá el password de la llave de la CA, y si todo sale bien saldrá algo como esto:

Signature ok
subject=/C=CO/ST=Antioquia/L=Medellin/O=Aldana s.a./OU=Departamento de Seguridad/CN=aldana.seguridad.net/emailAddress=santiago@aldana.seguridad.net
Getting CA Private Key
Enter pass phrase for ../CA/ca_santiago.key:

Con esto queda listo el certificado srv_santiago.crt y su llave srv_santiago.key , los cuales son necesarios para el siguiente paso.


Paso #3: Configuraciones preliminares para el servidor

El servidor web que vamos a usar es el apache2

- Instalamos el servidor apache2

root@orex2:~# aptitude install apache2

- Ahora creamos un directorio con el nombre "ssl" en la ruta /etc/apache2/ y dentro de este copiamos los archivos del certificado y la llave del sitio (srv_santiago.crt y srv_santiago.key) que creamos en el paso 2.

- Ubicados dentro de la carpeta que acabamos de crear generamos un archivo .pem (en mi caso aldana.seguridad.net.pem) el cual concatena la llave (srv_santiago.key ) y el certificado (srv_santiago.crt):

root@orex2:/etc/apache2/ssl# cat srv_santiago.key srv_santiago.crt >aldana.seguridad.net.pem
- ingresamos las siguientes 3 lineas que tienen como objetivo crear una llave sin password, para que asi el apache no nos solicite dicho password cada vez que inicie el servidor web.

root@orex2:/etc/apache2/ssl# cp srv_santiago.key srv_santiago.bak 
root@orex2:/etc/
apache2/ssl# cp aldana.seguridad.net.pem
aldana.seguridad.net.pem.bak
root@orex2:/etc/
apache2/ssl# openssl rsa -in srv_santiago.key -out no.pwd.srv_santiago.key


Donde no.pwd.srv_santiago.key sera la llave sin el password

- Finalmente creamos de nuevo el archivo .pem pero esta vez con la llave que no requiere password

root@orex2:/etc/apache2/ssl# cat no.pwd.srv_santiago.key srv_santiago.crt >aldana.seguridad.net.pem

Este ultimo archivo aldana.seguridad.net.pem sera el que finalmente utilizara el apache para sacar de alli el certificado y la llave, y usarlos en el servidor web seguro.

Paso #4: Configuración del sitio ssl
- Habilitamos el modulo ssl del apache digitando:

root@orex2:~# a2enmod ssl

Deberá aparecer algo como:

Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
Run '/etc/init.d/apache2 restart' to activate new configuration!


- Luego entramos a la carpeta
etc/apache2/sites-available/ y buscamos el archivo "default-ssl", el cual nos va a servir como guia para crear el archivo de configuracion de nuestro sitio ssl. Creamos una copia de "default-ssl" y la pegamos en la misma carpeta pero cambiandole el nombre por el de nuestro sitio. Esto se puede hacer ingresando:

root@orex2:~# cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/aldana.seguridad.net

- Abrimos el archivo de configuracion que acabamos de crear y le modificamos las siguientes lineas como aparece a continuacion:


...mas abajo de este archivo (mas o menos en la linea 51) tambien se deben modificar las siguientes dos lineas:

SSLCertificateFile    /etc/apache2/ssl/aldana.seguridad.net.pem
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key


Donde:
VirtualHost aldana.seguridad.net:443>...indica el dominio del sitio y el puerto 443 de https
var/www/ssl...es la raiz donde debera estar el index de nuestro sitio web

SSLCertificateFile /etc/apache2/ssl/aldana.seguridad.net.pem ...se le indica al apache la ruta
donde encontrara el archivo .pem

#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key...se comenta esta linea anteponiendo el "#",
ya que no es necesario indicar la ruta de la llave por que ya en el archivo .pem esta incluida



- Ejecutamos la siguiente linea la cual crea un enlace de nuestro archivo de configuracion dentro de la carpeta "etc/apache2/sites-enabled/" lo que finalmente habilitara nuestro nuevo sitio.

root@orex2:~# a2ensite aldana.seguridad.net


- Por último, reiniciamos apache2:


root@orex2:~# /etc/init.d/apache2 restart



Probando el servidor

Antes de probar el servidor debemos asociar el dominio "aldana.seguridad.net" con la direccion ip de loop.Para esto a ingresamos /etc/hosts y agregamos la linea:

127.0.0.1    aldana.seguridad.net

- y reiniciamos apache2:


root@orex2:~# /etc/init.d/apache2 restart


- Con el mozilla entramos a la pagina https://aldana.seguridad.net e inicialmente nos aparece esto:

Firefox dice que se a producido un error por que el certificado del sitio web esta firmado por una CA desconocida.

- Al dar click en agregar excepcion lo que realmente estamos haciendo instalando el certificado de nuestro servidor web en el firefox, para que asi pueda mostrar la pagina.

Confirmando la excepcion de seguridad, el certificado quedara instalado y nunca mas firefox me volvera a decir que es desconocido, permitiendome asi realzar la conexion segura.

- Si damos click en ver podemos ver el contenido del certificado digital




Aqui se puede ver la informacion que le ingresamos al certificado a la hora de crearlo


- Ahora apenas acepto la excepcion puedo ver la pagina en https, es decir http segura. Tambien se puede observar como abajo a mano derecha de la ventana del navegador web aparece un candadito que indica que se tiene una conexion segura mediante certificado digital.


- Es interezante observar con un sniffer como el es trafico durante la peticion de esa pagina web segura. Y efectivamente vemos como los paquetes tienen su payload encriptado como se aprecia en la siguiente captura:



Asi entonces el certificado me sirvio no solo para la verificacion del sitio web, sino que tambien me permite tener una transmision de la pagina web de manera cifrada.
.
.
.
fin.

1 comentario:

Unknown dijo...

oi,
Esta é uma leitura muito boa para mim, devo admitir que você é um dos melhores blogueiros que eu já saw.Thanks para postar este artigo informativo.
Certificados de servidor ssl

contador