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