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:

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:

ssl1-apache24

Creación de directorios y copiado de archivos

Añadimos a los “index.html” de ambos directorios el contenido indicado en nuestro escenario:

index.html editado

Editando “index.html”

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

a2enmod ssl

Activando el módulo SSL con a2enmod ssl

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í.

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

Archivo ports.conf

Contenido del archivo ports.conf

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:

Archivo .conf con SSL por 443

Contenido del archivo www.srvweb.com.conf con la definición de los dos virtualhost con y sin SSL

Activamos el sitio:


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:


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.

prueba-ssl-apache24

Captura de pantalla que muestra dos navegadores con la dirección www.srvweb.com con modo 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:

options-indexes

Captura con “Option Indexes FollowSymLink” Activado

Sin embargo, el sitio seguro no tiene activadas estas opciones:

Conexión segura SSL sin options

Conexión SSL sin “Options”

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.

    Sugerencias y dudas

    ¿Quieres añadir alguna sugerencia?

    ¿Would you like to ask something or tell us what you think about us?

    ¿Te gustaría cambiar algo de esta web?

    Would you like to change something in this site?

    ¿Quieres publicar algo aquí?

    Would you like to publish a post in this blog?

    Si tu respuesta es afirmativa, recuerda que tienes que especificar tu email en el recuadro inferior para que podamos enviarte el formulario.

    Si quieres, puedes indicar un email para que te respondamos

    You can add an email where we can send our reply

    Para minimizar que los bots usen este formulario, por favor, inserta el siguiente código en el recuadro
    In order to void the internet bots to use this form, please, insert the code in the square

    Para usar CAPTCHA, tienes que tener instalado el plugin Really Simple CAPTCHA.

    Código:


    Usted consiente, a través de la marcación de la presente casilla, al tratamiento de sus datos con las finalidades descritas en la Política de Privacidad.

    Usted declara, a través de la marcación de la presente casilla, bajo su propia responsabilidad, tener cumplidos los catorce años de edad, respondiendo de manera exclusiva y personal de la veracidad de dicha declaración y asumiendo, por ende, las posibles responsabilidades legales al respecto.

    Usted consiente, a través de la marcación de la presente casilla, para la recepción de comunicaciones comerciales y de cortesía relacionadas con nuestra entidad a través del teléfono, correo postal ordinario, fax, correo electrónico o medios de comunicación electrónica equivalentes.