Transport Layer Security (TLS) y Secure Sockets Layer (SSL) son protocolos criptográficos que proveen una conexión segura a través de Internet. Utilizan criptografía asimétrica para autenticar claves de intercambio, criptografía simétrica para lograr confidencialidad y funciones hash llamadas MAC para verificar integridad.

Los servidores Web, por ejemplo Apache, utilizan TLS y SSL para implementar el protocolo HTTPS (Hypertext Transfer Protocol Secure). A través de este protocolo los clientes pueden navegar sitios de forma segura garantizando confidencialidad (los pedidos sólo pueden ser interpretados por el cliente y el servidor), integridad (los pedidos no han sido alterados durante el tránsito) y autenticidad (el servidor es quien dice ser). De esta forma se evita: 1- Que un tercero sea capaz de "ver" el tráfico entre cliente y servidor, y obtener información confidencial o sensible en la comunicación; 2- Que un tercero sea capaz de interponerse entre cliente y servidor para alterar pedidos o respuestas (ataque man-in-the-middle); 3- Que un servidor de un tercero se haga pasar por otro (por ejemplo: un servidor atacante que se hace pasar por el servidor del banco, generalmente involucra un ataque DNS previo o algún tipo de XSS).

Gracias a HTTPS podemos navegar tranquilos por portales de bancos, correo electrónico, etc. En la actualidad debería ser un estándar de facto en la industria, pero lamentablemente existen muchos sitios Web que aún no lo utilizan, y a veces nuestras credenciales e información sensible viajan por la red en formato "plano", es decir sin codificar, al alcance de cualquier atacante.

Este artículo explica cómo instalar y configurar SSL en Apache, utilizando un servidor CentOS 6.4 como ejemplo.



Partiendo de una instalación mínima de CentOS 6.4, el primer paso consiste en instalar el servidor apache y el módulo "mod_ssl" el cual implementa HTTPS:

yum install httpd mod_ssl

Crear un directorio base para un sitio de prueba:

mkdir /var/www/html/prueba

Dentro de este directorio, crear un archivo index.html:

touch /var/www/html/prueba/index.html

Con el siguiente contenido:

HTTPS Funciona!

Configurar correctamente los permisos para el directorio base y el archivo index.html:

chown -R apache:apache /var/www/html/prueba
chmod -R 440 /var/www/html/prueba

En CentOS el usuario con el que corre Apache es apache, a diferencia de Debian y derivados donde el usuario es www-data.

Luego es necesario crear un directorio donde almacenar los certificados y clave privada:

mkdir /etc/httpd/conf/ssl

En este directorio se deben almacenar el certificado para el sitio junto con su clave privada, y el certificado de la entidad certificante (en caso de ser necesario). Si no se posee un certificado, es posible generar un certificado autofirmado como lo explica el siguiente tutorial: Cómo crear tu propia autoridad certificante (CA).

Luego de guardar los certificados en el directorio /etc/httpd/conf/ssl, deshabilitar SELinux para evitar conflictos de acceso a los certificados:

vi /etc/sysconfig/selinux

Utilizar SELINUX=disabled.

Verificar que los permisos de acceso a los archivos de certificados y clave sean los adecuados (400), de lo contrario apache puede no iniciar correctamente:

chmod 400 /etc/httpd/conf/ssl/*
chown apache:apache /etc/httpd/conf/ssl/*

Al instalar "mod_ssl", por defecto agrega un VirtualHost que escucha en el puerto 443 (HTTPS). Este VirtualHost se encuentra definido en el archivo /etc/httpd/conf.d/ssl.conf junto con el resto de la configuración de SSL. Editar el archivo ssl.conf para configurar correctamente el VirtualHost:

vi /etc/httpd/conf.d/ssl.conf

Suponiendo que el sitio al que queremos acceder mediante HTTPS es "www.pepe.org", agregar o modificar las siguientes líneas que se encuentran dentro de la sección <VirtualHost _default_:443>:

Parámetros del sitio

    ServerAdmin webmaster@pepe.org
    ServerName www.pepe.org
    ServerAlias *.pepe.org
    ErrorLog logs/pepe.org-error_log
    CustomLog logs/pepe.org-access_log common
    LogLevel warn

Directorio raíz del sitio

    DocumentRoot "/var/www/html/prueba"

Ruta a los certificados

    SSLCertificateKeyFile "/etc/httpd/conf/ssl/pepe.org.key"
    SSLCertificateChainFile "/etc/httpd/conf/ssl/ca.crt"
    SSLCertificateFile "/etc/httpd/conf/ssl/pepe.org.crt"

Finalmente, se deberá modificar el tag <VirtualHost> cambiando "_default_" por el nombre del sitio que corresponda (por ejemplo "pepe.org").

Luego de reiniciar Apache, acceder al sitio anteponiendo https:// en la URL.

service httpd restart

Si todo está configurado correctamente debería mostrar el mensaje "HTTPS Funciona!" de acuerdo al archivo index.html creado al comienzo del tutorial. De lo contrario, se deberá revisar el log de errores definido en la configuración del VirtualHost. Si se utiliza un certificado autofirmado, el navegador muestra una advertencia de seguridad indicando que el sitio no es de confianza, ignorar y continuar.


Tal vez pueda interesarte


Compartí este artículo