El mismo certificado de Let’s Encrypt que asegura tu sitio web también puede cifrar tus conexiones de correo electrónico. Esta guía cubre la configuración de TLS para los servidores de correo más comunes.
Por qué el correo electrónico necesita TLS
Sin TLS, el tráfico de correo (incluyendo contraseñas y contenido de mensajes) se envía en texto plano:
- SMTP (envío de correo) — puerto 25/587 sin cifrar por defecto
- IMAP (lectura de correo) — puerto 143 sin cifrar por defecto
- POP3 (lectura de correo) — puerto 110 sin cifrar por defecto
TLS cifra estas conexiones de la misma manera que HTTPS cifra el tráfico web. Los clientes de correo modernos esperan TLS y advertirán a los usuarios sobre conexiones sin cifrar.
Configuración del certificado
Puedes usar los mismos archivos de certificado de GetHTTPS tanto para tu servidor web como para tu servidor de correo, siempre que el certificado cubra el nombre de host que usa tu servidor de correo (por ejemplo, mail.example.com).
Obtén un certificado que cubra tu nombre de host de correo:
- En GetHTTPS, añade
mail.example.com(o el nombre de host al que apunte tu registro MX) - Puedes incluirlo junto con tu dominio web:
example.com+www.example.com+mail.example.com - Descarga los archivos:
fullchain.pem,privkey.pem
Postfix (SMTP)
Edita /etc/postfix/main.cf:
# TLS for outbound mail (sending)
smtp_tls_security_level = may
smtp_tls_loglevel = 1
# TLS for inbound mail (receiving) — STARTTLS on port 25/587
smtpd_tls_cert_file = /etc/ssl/gethttps/fullchain.pem
smtpd_tls_key_file = /etc/ssl/gethttps/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_loglevel = 1
Para submission (puerto 587), edita /etc/postfix/master.cf:
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
Recarga: sudo systemctl reload postfix
Dovecot (IMAP/POP3)
Edita /etc/dovecot/conf.d/10-ssl.conf:
ssl = required
ssl_cert = </etc/ssl/gethttps/fullchain.pem
ssl_key = </etc/ssl/gethttps/privkey.pem
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = no
Nota el < antes de la ruta del archivo: Dovecot usa esta sintaxis para leer el contenido del archivo en línea.
Recarga: sudo systemctl reload dovecot
Puertos IMAP/POP3
| Servicio | Sin cifrar | STARTTLS | TLS implícito (recomendado) |
|---|---|---|---|
| IMAP | 143 | 143 (upgrade) | 993 |
| POP3 | 110 | 110 (upgrade) | 995 |
| SMTP submission | 587 | 587 (upgrade) | 465 (smtps) |
Los clientes de correo modernos deben conectarse a los puertos de TLS implícito (993, 995, 465). Configúralos en Dovecot y Postfix junto con los puertos STARTTLS.
Verificar TLS del correo
# Test SMTP STARTTLS
openssl s_client -connect mail.example.com:587 -starttls smtp
# Test IMAP implicit TLS
openssl s_client -connect mail.example.com:993
# Test SMTP implicit TLS (smtps)
openssl s_client -connect mail.example.com:465
Busca Verify return code: 0 (ok) y los detalles de tu certificado.
Renovación
Cuando renueves tu certificado de Let’s Encrypt, reemplaza los archivos y recarga tanto tu servidor web como tu servidor de correo:
sudo systemctl reload nginx # web
sudo systemctl reload postfix # SMTP
sudo systemctl reload dovecot # IMAP
Si usas Certbot con --deploy-hook, añade las recargas del servidor de correo al script del hook.
Preguntas frecuentes
¿Puedo usar el mismo certificado para web y correo?
Sí, siempre que el SAN (Subject Alternative Name) del certificado incluya el nombre de host del servidor de correo. Si tu MX apunta a mail.example.com, incluye ese nombre al solicitar el certificado.
¿Let’s Encrypt funciona para servidores de correo?
Sí. Los certificados de Let’s Encrypt son certificados X.509 estándar que funcionan con cualquier servicio compatible con TLS, no solo con servidores web. El certificado no sabe si se usa para HTTPS, SMTP, IMAP o cualquier otra cosa.
¿Necesito un certificado separado para cada protocolo de correo?
No. Un solo certificado funciona para SMTP (Postfix), IMAP (Dovecot) y tu servidor web simultáneamente. Apunta todos los servicios a los mismos archivos fullchain.pem y privkey.pem.
¿Qué hay de Microsoft Exchange?
Exchange usa el formato PFX/PKCS#12. Convierte tus archivos PEM a PFX, luego importa vía Exchange Admin Center → Servers → Certificates → Import. El proceso es similar a la instalación de certificados en IIS.