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_KEYHMAC 密钥
  • [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_filesmtpd_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_certssl_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_certificatetls_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.comexample.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 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.