保護你網站的同一個 Let’s Encrypt 證書也可以加密你的郵件連線。本指南涵蓋最常見郵件伺服器的 TLS 配置。
為什麼郵件需要 TLS
沒有 TLS,郵件流量(包括密碼和郵件內容)以明文傳送:
- SMTP(傳送郵件)— 埠 25/587 預設未加密
- IMAP(讀取郵件)— 埠 143 預設未加密
- POP3(讀取郵件)— 埠 110 預設未加密
TLS 加密這些連線的方式與 HTTPS 加密 Web 流量相同。現代郵件用戶端期望 TLS 並會對未加密連線發出警告。
證書設定
你可以將 GetHTTPS 生成的同一套證書檔案同時用於 Web 伺服器和郵件伺服器——只要證書覆蓋了郵件伺服器使用的主機名(如 mail.example.com)。
獲取覆蓋郵件主機名的證書:
- 在 GetHTTPS 中,新增
mail.example.com(或 MX 記錄指向的任何主機名) - 你可以將它與 Web 域名一起包含:
example.com+www.example.com+mail.example.com - 下載檔案:
fullchain.pem、privkey.pem
Postfix (SMTP)
編輯 /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
對於 submission(埠 587),編輯 /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
重新載入:sudo systemctl reload postfix
Dovecot (IMAP/POP3)
編輯 /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
注意檔案路徑前的 <——Dovecot 使用此語法來內聯讀取檔案內容。
重新載入:sudo systemctl reload dovecot
IMAP/POP3 埠
| 服務 | 未加密 | STARTTLS | 隱式 TLS(推薦) |
|---|---|---|---|
| IMAP | 143 | 143(升級) | 993 |
| POP3 | 110 | 110(升級) | 995 |
| SMTP submission | 587 | 587(升級) | 465 (smtps) |
現代郵件用戶端應連線到隱式 TLS 埠(993、995、465)。在 Dovecot 和 Postfix 中同時配置這些埠和 STARTTLS 埠。
驗證郵件 TLS
# 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
查詢 Verify return code: 0 (ok) 和你的證書詳情。
續簽
當你續簽 Let’s Encrypt 證書時,替換檔案並同時重新載入 Web 伺服器和郵件伺服器:
sudo systemctl reload nginx # web
sudo systemctl reload postfix # SMTP
sudo systemctl reload dovecot # IMAP
如果使用 Certbot 配合 --deploy-hook,將郵件伺服器的重新載入新增到 hook 指令碼中。
常見問題
可以將同一個證書用於 Web 和郵件嗎?
可以——只要證書的 SAN(Subject Alternative Name)包含郵件伺服器的主機名。如果你的 MX 指向 mail.example.com,在申請證書時包含該名稱。
Let’s Encrypt 適用於郵件伺服器嗎?
適用。Let’s Encrypt 證書是標準的 X.509 證書,可與任何支援 TLS 的服務配合使用——不僅僅是 Web 伺服器。證書不關心它被用於 HTTPS、SMTP、IMAP 還是其他任何用途。
每個郵件協議都需要單獨的證書嗎?
不需要。一個證書可以同時用於 SMTP(Postfix)、IMAP(Dovecot)和你的 Web 伺服器。將所有服務指向相同的 fullchain.pem 和 privkey.pem。
Microsoft Exchange 怎麼處理?
Exchange 使用 PFX/PKCS#12 格式。將你的 PEM 檔案轉換為 PFX,然後透過 Exchange Admin Center → Servers → Certificates → Import 匯入。過程類似於 IIS 證書安裝。