Configuración Servidor Apache
Certificados TLS
El primer paso para ejecutar esta guía es obtener los certificados TLS.
Recuerde que el tamaño de las claves es un aspecto importante de la seguridad, actualmente está generalizado el tamaño de 2048 bis, pero la recomendación es usar 4096 bits para una mayor robustez.
Plantilla de configuración segura
/etc/apache2/conf-available/ssl-params.conf
SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256
SSLCipherSuite SSL ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256
# Requires Apache 2.4.36 & OpenSSL 1.1.1
SSLProtocol -all +TLSv1.3 +TLSv1.2
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# Older versions
# SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off |
Explicación
Crear el fichero de configuración para el host
Crearemos un fichero en la ruta /etc/apache2/conf-available/<nombre_fichero>
Como <nombre_fichero> podemos poner algo representativo como " ssl-params.conf ", en el cual añadiremos la plantilla diseñada arriba.
Habilitar los módulos y encabezados SSL de Apache
Instalación de mod_ssl
$ sudo a2enmod ssl
$ sudo a2enmod headers |
Directivas básicas
Se debe indicar el puerto de escucha, nombre del servidor, las rutas de acceso a la clave privada, certificado del servidor y de la CA:
/etc/apache2/sites-available/default-ssl.conf
Listen 443
<VirtualHost *:443>
ServerName www.example.com or IP
SSLEngine on
SSLCertificateFile "/path/to/www.example.com.cert"
SSLCertificateKeyFile "/path/to/www.example.com.key"
SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
</VirtualHost> |
Configuración de privilegios
Es necesario restringir el acceso a la carpetas donde se encuentra la clave privada:
Privilegios
Abrir puerto del firewall local
Apertura del puerto 443 del firewall:
Apertura de puertos
Configuración para cifrado fuerte
Con esta configuración:
Evitamos el uso de versiones anticuadas de SSL y TLS (Se recomienda usar siempre TLSv1.2 ó v1.3)
La habilitación
SSLHonorCipherOrder
asegura que se sigan las preferencias de cifrado del servidor en lugar de las del cliente.La desactivación
SSLCompression
evita los ataques de Oracle de compresión TLS (por ejemplo, CRIME ).La desactivación
SSLSessionTickets
garantiza que Perfect Forward Secrecy no se vea comprometido si el servidor no se reinicia con regularidad.
Configuración cifrado fuerte
Habilitar OCSP
Para habilitar una conexión segura cliente-servidor, el cliente tiene que verificar que el certificado es de confianza y no ha caducado, por que tiene que consultar al emisor del certificado. Esto provoca un tiempo de carga mayor para la página que repercute en el usuario final. Para resolver este problema podemos configurar Apache para que obtenga un mensaje firmado del servidor OCSP y al inicializar una conexión con algún cliente, unirlo al handshake inicial. De esta manera el cliente puede estar seguro de que el certificado no está caducado, evitando preguntar explícitamente al servidor OCSP.
Directivas para OCSP