Existe una herramienta muy utilizada en sistemas como balanceadores, proxys, servidores web, centrales VoIP, servidores de correo, etc… que nos ofrece el cifrado asimétrico para todas nuestras aplicaciones de forma rápida y sencilla.
En esta práctica aprenderemos a cifrar las comunicaciones HTTP y convertirlas en HTTPS sin tocar nuestro servidor web, así como el cifrado en cualquier otra aplicación de nuestro propio desarrollo que necesite del cifrado asimétrico para garantizar la seguridad en la comunicación.
La ventaja de esta solución es que es simple, estable, ampliamente utilizada en sistemas de producción y nos sirve a modo de «navaja suiza» para cifrados TLS/SSL (criptografía asimétrica).
La herramienta en cuestión se llama stunnel y se trata de una herramienta multiplataforma (todos los sistemas basados en Unix/Linux y la familia Windows). Stunnel utiliza criptografía de clave pública con certificado digital X.509 para asegurar la conexión SSL.
Ejemplo de procedimiento de cifrado de HTTP y convertirlo en HTTPS de forma facil
1.- instalar stunnel en un sistema debian
# apt-get install stunnel
2.- Creación de certificado x509 para cifrado.
# openssl req -new -x509 -days 3650 -nodes -out stunnel.pem -keyout stunnel.pem
# cp stunnel.pem /etc/stunnel/
!!OJO!!, esto nos generará el «private key» y el «certificate» juntos en un mismo archivo «stunnel.pem», que está muy bien para el caso que nos ocupa, pero con otros programas precisará de ambas cosas por separado y por tanto habría que cambiar el fichero de salida del flag -keyout poniendo:
-keyout stunnel.key.
3.- Configurar stunnel para cifrar el puerto 80
editar el fichero de configuración /etc/stunnel/stunnel.conf y realizamos los siguientes cambios:
# nano /etc/stunnel/stunnel.conf
cert = /etc/stunnel/stunnel.pem
[http]
accept = 443
connect = 80
Este caso es para realizar el stunnel en la misma máquina donde se encuentra el servidor web. En caso de ejecutar el stunnel en una máquina distinta de donde se encuentra el servidor web, habría que especificar la ip de la maquina en cuestión. Si la el servidor web está por ejemplo en la ip 192.168.1.22 sería:
# nano /etc/stunnel/stunnel.conf
cert = /etc/stunnel/stunnel.pem
[http]
accept = 443
connect = 192.168.1.22:80
4.- Habilitar stunnel editando para ello el fichero /etc/default/stunnel4
# nano /etc/default/stunnel4
ENABLED=1
5.- Por último iniciar el demonio stunnel
# /etc/init.d/stunnel4 restart
Esto es todo. Como ya se ha indicado al principio, esta técnica es aplicable a cualquier aplicación o servicio que escuche por un puerto y se precise de forma rápida, estable y segura una comunicación de cifrado de datos.