Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

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

chown root:root /etc/pki/tls/private/example.com.key
chmod 600 /etc/pki/tls/private/example.com.key

Abrir puerto del firewall local

Apertura del puerto 443 del firewall:

Apertura de puertos

firewall-cmd --permanent --add-port=443
firewall-cmd --reload

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

SSLProtocol         all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite      ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
SSLHonorCipherOrder on
SSLCompression      off
SSLSessionTickets   off

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

SSLUseStapling On
SSLStaplingCache "shmcb:ssl_stapling(32768)"
  • No labels