Configuración SSLCipherSuite en Apache para admitir TLS 1.0, 1.1 y 1.2

8

Tengo un servidor web Apache 2.4.7 que ejecuta varios nombres de dominio con una sola dirección IP. Como resultado de la vulnerabilidad de Poodle, agregué la siguiente SSLCipherSuitelínea. Funcionó bien por un tiempo, pero los usuarios informan problemas para acceder a la página en Firefox. Por desgracia, pedirles a los usuarios que cambien de navegador no es una opción, por lo que necesito cambiar la configuración para que sea compatible con TLS 1.0, 1.1 y 1.2.

Las configuraciones actuales son:

<VirtualHost ZYX.XYZ.org:443>
DocumentRoot /var/www/ZYX.XYZ/www
ServerName ZYX.XYZ.org

<Directory "/var/www/ZYX.XYZ/">
  allow from all
  Options -Indexes
</Directory>

SSLEngine on
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH
SSLCertificateFile /etc/apache2/ssl/XYZ.org.crt
SSLCertificateKeyFile /etc/apache2/ssl/XYZ.org.key
SSLCACertificateFile /etc/apache2/ssl/gd_bundle-g2-g1.crt
</VirtualHost>

Si miramos la prueba de Qualys , vemos que el servidor solo es compatible con TLS 1.2.

¿Cuál sería la configuración adecuada para habilitar TLS 1.0, TLS 1.1 y TLS 1.2, de modo que el sitio pueda admitir navegadores más antiguos y también mantener un nivel de seguridad decente?

Kristian
fuente

Respuestas:

13

La siguiente configuración es (o solía ser) la mejor configuración según SSLLabs:

SSLProtocol +TLSv1.2 +TLSv1.1 +TLSv1
SSLCompression off
SSLHonorCipherOrder on
SSLCipherSuite "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA"

Sin embargo, excluirá todos los navegadores antiguos (¡incluido Opera Mini!), Porque carece de conjuntos de cifrado que no sean PFS y RC4. Puede agregar lo siguiente (antes de la cita de cierre, por supuesto) para habilitar RC4, incluida una reserva (última entrada) a RC4 sin PFS:

:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:RC4-SHA

Debe alentar a los usuarios a actualizar lo antes posible. RC4 está roto y ya no debe usarse, especialmente sin PFS.

Para lograr mejores calificaciones, también envíe un encabezado HSTS (para que esto funcione, debe habilitarlo mod_header):

Header always set Strict-Transport-Security "max-age=63072000;"

Esta configuración no funcionará para Apache <2.2.26, ya que no es compatible con la criptografía de curva elíptica.

Actualización :
Acabo de marcar, todavía es bueno para A +. :) Sin embargo, creo que esto requiere un certificado con SHA256.

Actualización de octubre de 2015 :
recientemente encontré otro generador para configuraciones SSL , proporcionado por Mozilla. Ordena cifrados para que Chrome no diga que está utilizando un conjunto de cifrado obsoleto.

Daniel B
fuente
3

Encontré esta recomendación en Cipherli.st :

SSLCipherSuite AES128+EECDH:AES128+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
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)" 
Kristian
fuente
3
 SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH
                                                           ^^^^^^^^

La desactivación de los conjuntos de cifrado SSLv3 desactiva todos los conjuntos de cifrado introducidos con SSL3.0. Dado que estos conjuntos de cifrado también se usan con versiones SSL posteriores (TLS1.0 +) y los nuevos conjuntos de cifrado se introdujeron principalmente con TLS1.2, esta configuración hace que TLS1.0 y TLS1.1 no estén disponibles debido a que no hay cifrados compartidos. Por lo tanto, el protocolo está efectivamente restringido a TLS1.2.

Si llama openssl ciphers -V <cipher>con su cadena de cifrado, verá que todos los cifrados disponibles requieren TLS1.2.

Por ejemplo: openssl ciphers -V TLSv1.2.

Steffen Ullrich
fuente