Cifrando con Apache 2.4
En una entrada anterior, veíamos cómo montar un servidor Apache 2.4 desde cero usando el modo terminal de Ubuntu 14.04LTS Server y cómo preparar el servidor para que escuchara en diferentes puertos, gestionara varios host virtuales y cómo configurar los archivos de Apache para que cumplan con los requisitos que buscamos.
Ahora os enseñaré cómo preparar un sitio web para que envíe la información cifrando los datos con una clave autofirmada.
Escenario
Usaremos una máquina virtual bajo Virtualbox. Esta máquina virtual contiene una instalación de Linux Ubuntu 14.04LTS Server.
Vamos a preparar dos servidores virtuales con el mismo nombre: “www.srvweb.com”.
- El primero con acceso SSL por el puerto 443, directorio raíz en “/var/www/html/segura”. El archivo “index.html” contendrá la frase “Acceso seguro a www.srvweb.com”.
- El segundo sin cifrado SSL por el puerto 80, directorio raíz en “/var/www/html/insegura”. El archivo index.html contendrá la frase “Acceso NO seguro a www.srvweb.com”
SSL paso a paso
Pasamos a trabajar como superusuarios con “sudo su” e introduciendo la clave correspondiente.
Accedemos al directorio que alojará los archivos y creamos los elementos necesarios para ambos “virtualhost” que usaremos después:
1 2 | root@ubuntu:/var/www/html# mkdir segura root@ubuntu:/var/www/html# mkdir insegura |
Para ahorrar trabajo, voy a copiar el contenido de cualquiera de los virtualhost del tutorial anterior:
Añadimos a los “index.html” de ambos directorios el contenido indicado en nuestro escenario:
El archivo “index.html” del directorio “insegura” queda editado también con el contenido del “escenario2.
Activando el módulo mod_ssl de Apache2.4
El módulo encargado de las comunicaciones cifradas con Apache es “mod_ssl”. Para su activación podemos crear el enlace simbólico o utilizar las herramientas que proporciona apache:
a2enmod ssl
La activación del módulo indicará dónde buscar para crear un certificado autofirmado con el que se cifrarán los datos enviados.
Creando nuestro certificado autofirmado para Apache2.4
Con objeto de mantener cierto orden, vamos a crear el directorio “/etc/apache2/ssl” en el que guardaremos el certificado:
mkdir /etc/apache2/ssl
Este es el momento perfecto para crear nuestro certificado autofirmado que usará Apache. Para ello tendremos que usar el comendo “make-ssl-cert” usando los parámetros contenidos en el archivo “/usr/share/ssl-cert/ssleay.cnf”. Tenéis la documentación completa de “ssleay.cnf” aquí.
1 | make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/certificado.pem |
El sistema realizará varias preguntas que podremos responder o, simplemente, continuar hasta la finalización de la ejecución. Ahora tenemos un archivo “certificado.pem” y un enlace simbólico al mismo.
Integrando el certificado en la configuración de nuestro VirtualHost
En primer lugar, comprobaremos el archivo “ports.conf” con objeto de determinar si está configurado para la escucha en el puerto 443.
Como podemos ver en la captura adjunta, la configuración por defecto implica la escucha en el puerto 443 si el módulo SSL está activo, como es el caso en el que estamos. Si no hubiéramos activado el módulo, lo haremos ahora.
La creación de nuestro virtualhost ahora es un poco más compleja, ya que deberemos añadir nuevas opciones que indiquen al servidor qué certificado usar y dónde está. Así, en la siguiente captura tenéis el ejemplo completo:
Activamos el sitio:
1 2 | a2ensite www.srvweb.com.conf service apache2 restart |
Ojo, el archivo que os he puesto en la captura contiene un pequeño error. Se trata de una “V” en mayúscula donde debe insertarse en minúscula:
1 2 | DocumentRoot /Var/www/html/insegura # La V debe ir en minúscula o apache no encontrará el directorio. |
Comprobando el funcionamiento
La prueba de fuego llega en este momento. Abrimos el navegador en una máquina cliente con el servidor DNS configurado o con el archivo “/etc/hosts” con el apunte a la IP del servidor apache y escribimos en la barra de navegación las dirección “http://www.srvweb.com” y otra ventana con “https://www.servweb.com”.
La apertura del enlace SSL cifrado implica la descarga del certificado, con lo que el navegador mostrará un mensaje de error indicando este extremo. Además, al ser un certificado autofirmado, el navegador intentará hacernos desistir de la visita al sitio. Aceptamos lo que indica y podremos entrar en nuestros nuevos sitios seguro e inseguro.
Al haber especificado como opciones de directorio “Indexes” y “FollowSymLink” para el sitio inseguro, Apache nos enviará un listado de directorio con el contenido de los directorios en “/var/www/html/inseguro/” si no hubiera un “index.html” en cada uno, es decir, podremos descargar cualquier archivo contenido en esos directorios lo que supondría un problema de seguridad:
Sin embargo, el sitio seguro no tiene activadas estas opciones:
Se pueden añadir otras opciones al servidor para cada sitio y para directorios específicos en cada sitio. Además, existe la opción de crear un archivo “.htaccess” con parámetros específicos que ayudarán al SEO, impedirán accesos, bloquearán IPs y otras muchas con las que podremos controlar la forma cómo queremos que los visitantes accedan a los sitios que hemos creado. Todo eso lo veremos en otras prácticas y tutoriales posteriores.
Ref.: Documentación en inglés de Apache SSL
Ref: Cómo crear sitios con Apache2.4 paso a paso
Como siempre, el artículo tiene licencia Creative Commons – Compartir – Igual – No comercial. Si encuentras algún error, por favor, házmelo saber con objeto de corregir lo que corresponda.