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


viernes, 22 de mayo de 2009

Instalación de servidor Web con certificado seguridad

Instalación de servidor Web con certificado seguridad

Para porder tener nuestro servidor web con certificado de seguridad pues 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


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

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

- 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

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. En mi caso es:

Common Name (eg, YOUR name) []:aldana.seguridad.net

- 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 autofirmado 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=Unidad de Certificacion/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 iniciales para el servidor web

El servidor web que decidí usar es el lighttpd, el cual me parece bueno y además ya lo he usado antes.

- Instalamos el servidor lighttpd

root@orex2:~# aptitude install lighttpd

- Verificamos que la versión instala soporte ssl ingresando:

root@orex2:~# /usr/sbin/lighttpd -v


Deberá aparecer algo como:

lighttpd-1.4.19 (ssl) - a light and fast webserver Build-Date: Jul 29 2008 18:58:09

De lo contrario sera necesario descargar el código fuente del servidor y recompilarlo, pero generalmente la versión disponible en los repositorios es la que soporta ssl.

- Ahora creamos el directorio con el nombre "ssl" dentro de la carpeta de configuración de lighttpd, y dentro de éste el directorio con el nombre de nuestro dominio y el sufijo ".in" que en mi caso seria "aldana.seguridad.net.in".
En este ultimo directorio debemos copiar el certificado y la llave del servidor y el certificado de la CA, es decir srv_santiago.crt , srv_santiago.key , ca_santiago.crt

root@orex2:/# cd etc/lighttpd/ssl/aldana.seguridad.net.in/ root@orex2:/etc/lighttpd/ssl/aldana.seguridad.net.in# dir srv_santiago.crt srv_santiago.key ca_santiago.crt

- Luego copiamos las siguientes 3 lineas que tienen como objetivo, que el lighttpd no nos solicite el password de la llave cada vez que inicie el servidor

root@orex2:/etc/lighttpd/ssl/aldana.seguridad.net.in# cp srv_santiago.key srv_santiago.bak
root@orex2:/etc/lighttpd/ssl/aldana.seguridad.net.in# cp aldana.seguridad.net.in.pem srv_santiago.bak

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


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


- Estando todavia sobre el directorio que acabamos de crear, generamos un archivo .pem (en mi caso aldana.seguridad.net.in.pem) el cual concatena la llave y el certificado:
root@orex2:/etc/lighttpd/ssl/aldana.seguridad.net.in# cat no.pwd.srv_santiago.key srv_santiago.crt >aldana.seguridad.net.in.pem

- Finalmente copiamos las siguientes 2 lineas para configurar los permisos del fichero creado

root@orex2:/etc/lighttpd/ssl/aldana.seguridad.net.in# chmod 0600 aldana.seguridad.net.in.pem
root@orex2:/etc/lighttpd/ssl/aldana.seguridad.net.in# chown root:root /etc/lighttpd/ssl/aldana.seguridad.net.in -R



Paso #4: Configuración de lighttpd.conf

Luego de tener creado el archivo aldana.seguridad.net.in.pem que es el que finalmente usara el servidor para extraer el certificado y la llave, no queda sino modificar el archivo de configuración del servidor web lighttps.conf

- Se abre /etc/lighttpd/lighttpd.conf y se le agregan las siguientes lineas:

$SERVER["socket"] == "aldana.seguridad.net:443" {
ssl.engine = "enable" ssl.pemfile = "/etc/lighttpd/ssl/aldana.seguridad.net.in/aldana.seguridad.net.in.pem" ssl.ca-file = "/etc/lighttpd/ssl/aldana.seguridad.net.in/ca_santiago.crt" server.name = "aldana.seguridad.net" server.document-root = "/var/www/sitiossl/" }

Donde:
$SERVER["socket"] == "aldana.seguridad.net:443"...indica el dominio y el puerto 443 de https
ssl.engine = "enable"...habilita ssl
ssl.pemfile = "/etc/lighttpd/ssl/aldana.seguridad.net.in/aldana.seguridad.net.in.pem"...la ruta del archivo .pem que creamos
server.name = "aldana.seguridad.net"...el dominio
server.document-root = "/var/www/sitiossl/"...la raiz del sitio que servirá el servidor web

- Luego ingresamos a /etc/hosts y agregamos la linea:

127.0.0.1 aldana.seguridad.net


Esto con el fin de tener asociado el dominio que sirve el servidor a la direccion ip de loop.

- Finalmente reiniciamos el servidor ingresando:

/etc/init.d/lighttpd restart

Si todo sale bien debe aparecer

root@orex2:~# /etc/init.d/lighttpd restart
* Stopping web server lighttpd [ OK ] * Starting web server lighttpd [ OK ]



Probando el servidor
- 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.

No hay comentarios:

contador