bg-tutorials

如何在邮件服务器上安装 ACME SSL 证书

在本指南中,你将学习如何在邮件服务器上安装 ACME SSL 证书,特别是使用支持ACME + EAB 的商业供应商在Postfix、Dovecot 和 Exim 上安装。我们将使用acme.sh注册你的 ACME 账户,为你的邮件主机名签发证书,然后将证书直接插入邮件服务器的 TLS 配置中。

邮件服务器 ACME SSL

本指南假设有一个基于 Linux 的邮件服务器和一个商业 CA,该 CA 提供 ACME 目录 URL 和 EAB 凭据(密钥 ID + HMAC)。由于不同发行版和主机设置的邮件环境各不相同,因此请将本指南视为一个清晰、可靠的蓝图,但在使用过程中一定要检查自己服务器的路径、服务名称和 TLS 设置。


开始之前

如果这些基础知识都已准备就绪,您将会更加顺利:

  • 邮件主机名,例如 mail.example.com,并带有指向邮件服务器的 A/AAAA 记录
  • 指向该主机名的MX 记录(常见设置)
  • 使用sudo 或root通过 Shell/SSH 访问邮件服务器
  • 提供 ACME 目录 URL(如 https://acme.yourca.com/v2/acme)、EAB 密钥 ID 和 EAB HMAC 密钥的商业 CA 帐户
  • 邮件堆栈:Postfix/Exim 用于 SMTP,Dovecot 用于 IMAP/POP3

我们将使用DNS-01 验证,因为即使您的邮件服务器不运行公共网站,它也能正常工作,而且在生产中通常是首选。


步骤 1:在邮件服务器上安装 acme.sh

您将直接在邮件服务器上安装 ACME 客户端,这样它就能更新证书并将证书写入磁盘,供 Postfix/Dovecot/Exim 读取。

在邮件服务器上:

curl https://get.acme.sh | sh
source ~/.bashrc
acme.sh --version

如果看到版本号,说明客户端已安装就绪。如果source ~/.bashrc 行不起作用,请退出并重新登录,然后再次运行acme.sh --version 。


步骤 2:注册 ACME 账户(使用 EAB)

接下来,您需要使用商业 CA 面板上的 EAB 凭证,在商业 CA 注册 ACME 帐户。acme.sh 通过--eab-kid 和--eab-hmac-key 支持 EAB。

在邮件服务器上运行此功能:

acme.sh --register-account \
  --server https://acme.yourca.com/v2/acme \
  --eab-kid YOUR_EAB_KID \
  --eab-hmac-key YOUR_EAB_HMAC_KEY \
  --accountemail [email protected]

更换:

  • https://acme.yourca.com/v2/acme 使用您 CA 的ACME 目录 URL
  • YOUR_EAB_KID 与密钥 ID
  • YOUR_EAB_HMAC_KEY 的HMAC 密钥
  • [email protected] 用您的真实管理电子邮件发送过期通知

每个账户只需执行一次。如果命令失败,几乎总是 URL 或 EAB 值有错字。


步骤 3:通过 DNS-01 签发证书

现在,您需要为用户将要连接的主机名申请证书,例如mail.example.com (或imap.example.com,smtp.example.com 。只需选择您在客户端配置中实际使用的主机名)。

签发证书(手动 DNS)

运行:

acme.sh --issue \
  -d mail.example.com \
  --dns dns_manual \
  --server https://acme.yourca.com/v2/acme

--dns dns_manual 告诉acme.sh ,您将在 DNS 面板中手动添加 TXT 记录。

客户端将输出类似内容:

Please add a TXT record:
_acme-challenge.mail.example.com → some-long-token-value

添加 TXT 记录

在 DNS 提供商的面板中,创建 TXT 记录:

  • 名称: _acme-challenge.mail.example.com
  • 值:由 acme.sh

等待几分钟让 DNS 传播,然后用 DNS 验证:

dig TXT _acme-challenge.mail.example.com +short

如果在那里看到了令牌,请再次运行acme.sh --issue 命令完成验证。验证成功后,acme.sh 会将文件存储在~/.acme.sh/mail.example.com/ 下。

在该目录中至少有

  • fullchain.cer – 证书加中间链
  • mail.example.com.key– 私有密钥
  • ca.cer– CA 证书(如果您的 CA 单独提供)。

我们将在接下来的步骤中使用它们。


第 4 步:配置 Postfix 以使用 ACME 证书(SMTP)

Postfix 需要知道新证书和密钥的位置。Postfix 中的 TLS 由smtpd_tls_cert_file 和smtpd_tls_key_file 等选项控制。

首先,将文件复制到一个稳定的位置,例如

sudo mkdir -p /etc/ssl/mail
sudo cp ~/.acme.sh/mail.example.com/fullchain.cer /etc/ssl/mail/mail-fullchain.cer
sudo cp ~/.acme.sh/mail.example.com/mail.example.com.key /etc/ssl/mail/mail.key
sudo chown root:root /etc/ssl/mail/*
sudo chmod 600 /etc/ssl/mail/mail.key

然后告诉 Postfix 使用它们:

sudo postconf -e 'smtpd_use_tls = yes'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/mail/mail-fullchain.cer'
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/mail/mail.key'
sudo postconf -e 'smtp_tls_security_level = may'
  • smtpd_* 设置控制接收邮件(向您发送邮件的客户端)
  • smtp_* 设置控制外发邮件(您的服务器向他人发送邮件)

应用更改:

sudo systemctl restart postfix

如果您的发行版仍使用service ,请相应调整命令。


步骤 5:配置 Dovecot 以使用 ACME 证书(IMAP/POP3)

Dovecot 可 处理 IMAP 和 POP3。您可以通过将ssl_cert 和ssl_key 指向我们刚刚准备的相同文件来配置 TLS。

打开 Dovecot 的 SSL 配置:

sudo nano /etc/dovecot/conf.d/10-ssl.conf

更新(或添加)这几行:

ssl = yes
ssl_cert = </etc/ssl/mail/mail-fullchain.cer
ssl_key  = </etc/ssl/mail/mail.key

保存文件并重新加载 Dovecot:

sudo systemctl restart dovecot

现在,通过 TLS 发送的 IMAP/POP3 将显示相同的 ACME 商业证书。


可选:在 Exim 中使用相同的证书

如果使用Exim而不是 Postfix 作为邮件服务器,整合方式也类似。Exim 对 TLS 使用tls_certificate 和tls_privatekey 选项。

在 Exim 配置(路径取决于发行版,通常是/etc/exim4/exim4.conf.template或/etc/exim4/conf.d/ 下的 split config)中设置:

tls_certificate = /etc/ssl/mail/mail-fullchain.cer
tls_privatekey  = /etc/ssl/mail/mail.key

然后重新加载 Exim:

sudo systemctl restart exim4

如果服务名称略有不同,请查看您的发行包文档。


步骤 6:测试邮件 TLS

您可以从任何其他安装了OpenSSL 的机器上进行测试。

测试 SMTP(Postfix 或 Exim)

openssl s_client -starttls smtp -connect mail.example.com:587 -showcerts

测试 IMAP(Dovecot)

openssl s_client -starttls imap -connect mail.example.com:143 -showcerts

如果输出结果显示您的商业 CA 和主机名相匹配,就没问题了。


第 7 步:保持续订和重新加载自动化

acme.sh 已经安装了一个 cron 作业,每天检查更新情况。当证书快到期时,它会自动更新并更新~/.acme.sh/mail.example.com/ 中的文件。

要使 Postfix/Dovecot/Exim 始终使用最新版本,您有两个选择:

  1. 将配置直接指向~/.acme.sh/mail.example.com/
    中的文件(例如,smtpd_tls_cert_file = /root/.acme.sh/mail.example.com/fullchain.cer),并确保只有 root 才能读取它们。
  2. 编写一个小型部署脚本,将更新后的文件复制到/etc/ssl/mail/ ,然后重启或重新加载服务器。

脚本示例

#!/usr/bin/env bash
DOMAIN="mail.example.com"
SRC="$HOME/.acme.sh/$DOMAIN"
DEST="/etc/ssl/mail"

sudo cp "$SRC/fullchain.cer" "$DEST/mail-fullchain.cer"
sudo cp "$SRC/$DOMAIN.key"   "$DEST/mail.key"
sudo chown root:root "$DEST/"*
sudo chmod 600 "$DEST/mail.key"

sudo systemctl restart postfix dovecot

该脚本会将新签发的 ACME 证书和私钥复制到服务器的邮件 SSL 目录中,设置正确的所有权和权限,然后重启 Postfix 和 Dovecot,使它们立即开始使用更新后的证书。请使用你的证书而不是占位符。

然后将其接入acme.sh :

acme.sh --install-cert -d mail.example.com \
  --key-file       ~/.acme.sh/mail.example.com/mail.example.com.key \
  --fullchain-file ~/.acme.sh/mail.example.com/fullchain.cer \
  --reloadcmd "/path/to/your/deploy-script.sh"

从现在起,续费将自动进行。


常见问题与故障排除

第一次这样做时,可能会遇到一些问题。下面介绍如何快速解决这些问题。

为什么 ACME 验证失败时会显示 “未授权 “或 “无效响应”?

当 CA 无法验证您的 DNS TXT 记录时,就会出现这种情况。请检查这一点:

  • TXT 记录正是 _acme-challenge.mail.example.com
  • 标记没有多余的引号或空格
  • DNS 已传播 (dig TXT _acme-challenge.mail.example.com +short)
  • 您没有将mail.example.com与example.com混淆

如果不确定,请删除 TXT 记录,重新运行acme.sh --issue ,并重新添加 ACME 给出的准确值。

为什么会出现 “accountDoesNotExist “或 EAB 相关错误?

当您的 ACME 帐户注册与 CA 的 EAB 凭据不匹配时,就会出现这种情况。

修复:

  • 重新检查 ACME 目录 URL(生产版与暂存版)
  • 确保准确复制密钥 ID 和 HMAC,不留任何隐藏空格
  • 使用正确的数值重新运行一次注册命令

商业 CA 拒绝任何与其发布的资料不符的 EAB 注册。

为什么 SMTP/IMAP 仍然显示旧证书?

这意味着服务没有重新加载新证书,或者是从不同路径读取的。检查:

  • Postfix/Dovecot/Exim 中的 TLS 路径与实际文件相匹配
  • 您重新启动了正确的服务 (systemctl restart postfix dovecot exim4)
  • 没有第二个实例、容器或代理服务旧证书

您可以使用

openssl s_client -connect mail.example.com:465 -servername mail.example.com

最后的话

有了这个设置,你的邮件服务器就能向 SMTP 和 IMAP/POP3 客户端提供正式的商业 ACME 证书,而acme.sh则在后台悄悄地处理证书更新。您可以完全控制证书链和文件名,您的用户不会再看到安全警告,您也不必每隔几个月就登录并手动上传新文件。

一旦完成一次,您就可以使用相同的 ACME 账户和流程,对其他主机名、辅助 MX 服务器或其他邮件堆栈重复相同的模式。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.