Si estás administrando un servidor de correo en Fedora 36 con Dovecot, Postfix, SpamAssassin, opendkim, opendmarc y otros servicios relacionados, probablemente te has encontrado con este molesto error en el log:
imap-login: Error: Diffie-Hellman key exchange requested, but no DH parameters provided. Set ssl_dh=</path/to/dh.pem
Este mensaje suele aparecer cuando Dovecot intenta usar un cifrado basado en Diffie-Hellman (DH) para una conexión TLS, pero no se ha proporcionado un archivo de parámetros DH. Afortunadamente, este error no solo se puede solucionar fácilmente, sino que también es una oportunidad para mejorar la seguridad de tu configuración TLS.
🧠 ¿Qué es Diffie-Hellman y por qué aparece este error?
Diffie-Hellman es un método de intercambio de claves usado en algunas suites de cifrado TLS. Su propósito es permitir que el cliente y servidor negocien una clave secreta incluso si la comunicación es interceptada.
Dovecot puede usar suites de cifrado como DHE-RSA-AES256-GCM-SHA384
, que requieren que tú le proporciones un archivo de parámetros DH (ssl_dh
). Si no se lo das, te lanza ese error.
Pero hoy en día es más recomendable usar ECDHE (basado en curvas elípticas), que es más rápido, más seguro y no requiere ese archivo DH.
✅ Solución rápida: eliminar el uso de DHE
La forma más efectiva de evitar el error y mejorar la seguridad es dejar de usar cifrados DHE y confiar solo en ECDHE.
1. Edita el archivo 10-ssl.conf
de Dovecot
Ubicación típica:
/etc/dovecot/conf.d/10-ssl.conf
2. Asegúrate de tener la siguiente configuración moderna y segura:
# Activar SSL
ssl = yes
# Certificados
ssl_cert = </etc/pki/tls/certs/archivo.cer
ssl_key = </etc/pki/tls/private/archivo.key
ssl_ca = </etc/pki/tls/certs/archivo.pem
# TLS moderno
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes
# Cifrado seguro (solo ECDHE, sin DHE ni RC4)
ssl_cipher_list = ECDHE-ECDSA-AES256-GCM-SHA384:\
ECDHE-RSA-AES256-GCM-SHA384:\
ECDHE-ECDSA-AES128-GCM-SHA256:\
ECDHE-RSA-AES128-GCM-SHA256:\
!DHE:!aNULL:!eNULL:!LOW:!EXP:!MD5:!RC4:!3DES
# Opcional: desactivar compresión TLS (evita ataques tipo CRIME)
ssl_options = no_compression
Con esto, Dovecot usará solo TLS 1.2 y 1.3, con suites modernas y robustas.
🔄 ¿Y si todavía quieres usar DHE?
Si por alguna razón necesitas habilitar suites DHE, entonces sí necesitas generar el archivo dh.pem
:
openssl dhparam -out /etc/dovecot/dh.pem 2048
Luego agrégalo a tu configuración:
ssl_dh = </etc/dovecot/dh.pem
Pero nuevamente, esto no es necesario si configuras solo ECDHE como te mostramos.
🔍 Verificación y pruebas
Después de aplicar los cambios, reinicia Dovecot:
sudo systemctl restart dovecot
Y verifica que no haya más errores DH:
sudo journalctl -xe | grep dovecot
También puedes probar la conexión TLS con:
openssl s_client -connect mail.tu-dominio.com:993
Asegúrate de que el cipher negociado sea ECDHE, no DHE.
✅ Beneficios de esta configuración
- Eliminas el error de
ssl_dh
- Fortaleces la seguridad de tu servidor
- Cumples con buenas prácticas de TLS modernas (Mozilla, Qualys SSL Labs)
- Mejora la compatibilidad con clientes modernos (Thunderbird, Outlook, etc.)
🧩 Bonus: ¿y TLS 1.3?
No necesitas configurarlo manualmente. Dovecot en Fedora 36 lo habilita automáticamente si tu OpenSSL lo soporta. Al establecer:
ssl_min_protocol = TLSv1.2
ya permites TLS 1.2 y 1.3 por defecto. ¡Perfecto!
📝 Conclusión
Corregir el error de Diffie-Hellman en Dovecot no solo es sencillo, sino que también te permite revisar y fortalecer toda la configuración SSL/TLS de tu servidor de correo. En este artículo aprendiste:
- Qué causa el error y cómo evitarlo
- Cómo usar solo suites ECDHE modernas
- Qué parámetros incluir para un
10-ssl.conf
seguro - Cómo comprobar que todo funcione correctamente
¡Tu servidor estará más seguro, sin errores y listo para producción!