SSL ha recibido una clave Diffie-Hellman efímera débil: cómo resolver este problema
En algunos casos, como cuando un certificado SSL no está correctamente instalado en el servidor, aparecerá el siguiente mensaje en el navegador: Ha ocurrido un error al conectar con www.sitio.com. SSL ha recibido una clave Diffie-Hellman efímera débil en el mensaje de negociación "Intercambio de claves de servidor". (Código de error: ssl_error_weak_server_ephemeral_dh_key).
La página que está intentando ver no se puede mostrar porque la autenticidad de los datos recibidos no ha podido ser verificada. Contacte con los propietarios del sitio web para informarles de este problema.
La razón de este problema es que el servidor intenta establecer una conexión segura utilizando una clave de cifrado débil (menos de 1024 bits). El tamaño recomendado de la clave de cifrado es de 2048 bits. La forma más fácil de generar este tipo de clave de cifrado mejorada es utilizar OpenSSL:
Openssl dhparam -out dhparams.pem 2048
Para resolver el problema con diferentes servidores, debe seguir los pasos siguientes:
1.Especificar conjuntos de cifrado seguros
2.Definir los parámetros adecuados para el algoritmo Diffie-Hellman
Solución para Apache
Los parámetros SSL se pueden definir de forma global en el archivo httpd.conf o en hosts virtuales específicos.
Conjuntos de cifrado
Desactivar el soporte de SSLv2 y SSLv3 y activar el soporte de TLS permitiendo / deshabitando de forma explícita determinados cifrados en el orden especificado:
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
Parámetros Diffie-Hellman:
En las versiones recientes de Apache (2.4.8 y superior), así como de OpenSSL 1.0.2 y posterior, puede especificar directamente un archivo con los parámetros Diffie-Hellman:
SSLOpenSSLConfCmd DHParameters "{path to dhparams.pem}"
Si utiliza Apache con LibreSSL o trabaja con versiones de Apache 2.4.7 u OpenSSL 0.9.8a o posteriores, puede añadir los parámetros Diffie-Hellman generados anteriormente al final del archivo de su certificado.
Restablecer la configuración:
Sudo service apache2 reload
Solución para Nginx
En el bloque del servidor en la configuración del sitio (/etc/nginx/sites-enabled/default), agregue lo siguiente:
Conjuntos de cifrado:
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
Parámetros Diffie-Hellman
Ssl_dhparam {path to dhparams.pem}
Volver a cargar la configuración:
Sudo nginx -s reload
Microsoft IIS
1. Abra el editor de objetos de directiva de grupo (ejecute gpedit.msc en la línea de comando).
2. Vaya a Configuración del equipo, Plantillas administrativas, Red, y haga clic en Ajustes de configuración SSL.
3. En la sección de Ajustes de configuración SSL, abra el parámetro Prioridad de suite de cifrado SSL
4. Configure cifrados estables. La lista de cifrados puede consultarse en el sitio web de Microsoft o en la página de Mozilla.
Lighttpd
Los cambios se realizan en /etc/lighttpd/lighttpd.conf.
Conjuntos de cifrado:
ssl.cipher-list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA "
Parámetros Diffie-Hellman
Ssl.dh-file = "{path to dhparams.pem}"
Restablecer la configuración:
Sudo service lighttpd restart
Apache Tomcat
En el archivo server.xml (para JSSE)
Conjuntos de cifrado:
<Connector
ciphers="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_SHA256,TLS_ECDHE_RSA_WITH_AES_128_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_SHA,TLS_ECDHE_RSA_WITH_AES_256_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_SHA384,TLS_ECDHE_RSA_WITH_AES_256_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_128_SHA,TLS_DHE_DSS_WITH_AES_128_SHA256,TLS_DHE_RSA_WITH_AES_256_SHA256,TLS_DHE_DSS_WITH_AES_256_SHA,TLS_DHE_RSA_WITH_AES_256_SHA"
/>
Nota: Para utilizar cifrados AES de 256 bits, debe instalar archivos de política de jurisdicción de fuerza ilimitada de JCE. Puede encontrarlos en el siguiente enlace.
Postfix SMTP
Ambos parámetros deben especificarse en /etc/postfix/main.cf.
Conjuntos de cifrado:
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA, KRB5-DES, CBC3-SHA
Parámetros Diffie-Hellman
smtpd_tls_dh1024_param_file = ${config_directory}/dhparams.pem
Restablecer la configuración:
sudo postfix reload
Sendmail
Se pueden realizar cambios en la sección LOCAL_CONFIG del archivo /etc/mail/sendmail.mc.
Conjuntos de cifrado:
O CipherList=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Parámetros Diffie-Hellman
O DHParameters={path to dhparams.pem}
Restablecer la configuración:
sudo service sendmail restart
Dovecot
Se pueden realizar cambios en /etc/dovecot.conf.
Conjuntos de cifrado:
ssl_cipher_list=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_prefer_server_ciphers = yes (Dovecot 2.2.6 o superior)
Parámetros Diffie-Hellman:
#regenerates every week
ssl_dh_parameters_length = 2048
Restablecer la configuración:
sudo doveadm reload
HAProxy
Los cambios se realizan en la sección global de la configuración.
Conjuntos de cifrado:
ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Parámetros Diffie-Hellman:
Añadir al final del archivo .crt file con el parámetro Diffie-Hellman generado con OpenSSL.
Nota: a pesar de la opción tune.ssl.default-dh-param, que le permite especificar el tamaño máximo de los números primos utilizados para DHE, colocar parámetros arbitrarios en el archivo de su certificado sobrescribirá estos valores.
Restablecer la configuración:
sudo haproxy -f haproxy.cfg -p $(</var/run/haproxy-private.pid) -st $(</var/run/haproxy-private.pid)
Amazon Elastic Load Balancing
El último conjunto de parámetros SSL predefinidos (2015-05) utiliza cifrados ECDHE, no DHE, que son resistentes a los ataques LogJam. Puede consultarse información detallada en la documentación.
OpenSSH
El protocolo SSH está protegido contra los ataques LogJam, en los que los atacantes pueden cambiar una conexión a una criptografía más débil. Sin embargo, muchas implementaciones de SSH, incluidas las OpenSSH, utilizan números primos; por ejemplo, el Grupo 2 de Oakley de 1024 bits. No obstante, existen varias maneras de resolver este problema. El primer método, y el más sencillo, es hacer que los clientes utilicen el algoritmo Diffie-Hellman en curvas elípticas. En particular, Curve25519. Esto puede realizarse configurando algoritmos de intercambio de claves:
KexAlgorithms curve25519-sha256@libssh.org
Si desea continuar el soporte del algoritmo Diffie-Hellman no elíptico, debe desactivar el soporte del Grupo 1 eliminando diffie-hellman-group1-sha1. Puede dejar diffie-hellman-group14-sha1, que utiliza números primos de 2038 bits.
También puede generar nuevos grupos Diffie-Hellman:
ssh-keygen -G moduli-2048.candidates -b 2048
ssh-keygen -T moduli-2048 -f moduli-2048.candidates
Entonces deberá instalar moduli-2048 en el archivo de módulos de su sistema. En Debian / Ubuntu, se encuentra en /etc/ssh/moduli. SSH selecciona (de manera aleatoria) los grupos de este archivo, por lo que usted debe añadir los nuevos grupos generados al archivo de módulos y eliminar los antiguos.
Si tiene alguna pregunta o inquietud, no dude en ponerse en contacto con el equipo de asistencia de LeaderTelecom utilizando la información de contacto proporcionada en el sitio web.