Aplicaciones OpenBSD Seguridad OpenSSL

OpenSSL + Apache HTTPS

Introducción

Como sabrán OpenBSD trae por defecto en su Apache 1.3.XX, el módulo mod_ssl activado, pero no estara funcionando hasta que creemos los certificados y llaves correspondientes. Un poco de teoria de la mano de Wikipedia:

El sistema criptográfico con clave pública RSA es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye (en forma autenticada preferentemente), y otra privada, la cual es guardada en secreto por su propietario.

Una clave es un número de gran tamaño, que una persona puede conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes.

Cuando se quiere enviar un mensaje, el emisor busca la clave pública de cifrado del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, éste se ocupa de descifrarlo usando su clave oculta.

Los mensajes enviados usando el algoritmo RSA se representan mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100) elegidos al azar para conformar la clave de descifrado.

Empecemos de una vez

Para que httpd(8) soporte https tendremos que crear un certificado RSA de la siguiente manera:

Generando certificado RSA

# openssl genrsa -out /etc/ssl/private/server.key 1024

Este comando generará una llave de 1024 bits, ahora bien si lo que quieren es generar una llave encriptada con una contraseña (para levantar el servicio) deberian hacer algo asi (no lo recomiendo para algo 'hogareño' o administrado por nosotros mismos):

Generando certificado RSA con llave y clave

# openssl genrsa -des3 -out /etc/ssl/private/server.key 1024

Ahora tendriamos que generar una petición de certificado firmado para que algún organismo de certificación nos pueda firmar el certificado y aprobarlo (esto se usa en caso que sea algo real):

Petición de firma del certificado por una Organización

# openssl req -new -key /etc/ssl/private/server.key \
-out /etc/ssl/private/server.csr

El archivo server.csr puede entonces darte la certificación del organismo que firme la llave.

O lo podemos firmar nosotros de la siguiente manera:

Petición de firma del certificado por nosotros mismos

# openssl x509 -req -days 365 -in /etc/ssl/private/server.csr \
-signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt

Recuerden que si lo firmamos nosotros mismos en -days 365 podriamos poner algunos dias mas, para que no expire tan rápido, pero esto no es necesario, es solo una comodidad.

Pasos finales

Si ya tenemos los archivos /etc/ssl/server.crt y /etc/ssl/private/server.key podriamos iniciar httpd(8) con la opción -DSSL. Recuerden que si ya tenian corriendo httpd(8) deberian matarlo y volver a iniciarlo con esa opción. En caso de que quieran que inicie en 'modo' SSL, deberian setearlo de esta manera en el archivo /etc/rc.conf:

Inicio de httpd con SSL en el archivo /etc/rc.conf

# use -u to disable chroot, see httpd(8)
httpd_flags="-DSSL"             # for normal use: "" (or "-DSSL" ssl(8))

Conclusiones

Espero que le haya servido y a partir de ahora tienen su servidor Web resguardado con SSL. Cualquier duda, ayuda, agregado, comentario lo pueden hacer por los medios habituales.


Personal Tools