使用自己的域名发信时,应在 DNS 中配置 DKIM 记录。正确设置有助于邮件认证和送达能力。没有 DKIM,接收方就缺少这种验证签名内容完整性的方式。Google、Yahoo 和 Microsoft 针对不同发件群体发布了认证要求;小流量域名也适合配置 DKIM。请核实各服务的最新规则。
本文介绍生成密钥、发布 DNS 记录、启用签名和验证结果的整个流程,重点是步骤、语法和常见错误。无论手动创建记录还是使用托管平台,DKIM 的基本原理都一样。
什么是 DKIM 记录?
DKIM 记录是包含密码学密钥对中公钥部分的 DNS TXT 记录。邮件服务器用私钥为出站邮件签名,接收方从 DNS 获取公钥并检查签名,确认签名域名对邮件承担责任,以及被签名覆盖的邮件头和正文是否保持完整。DKIM 定义见 RFC 6376,它是现代邮件认证的重要组成部分。
创建 DKIM 记录的 4 个步骤
步骤 1:生成 DKIM 密钥对
发布记录前,需要先获得密钥对。私钥留在实际签名系统中,公钥放入 DNS。生成方式取决于你的发送配置。
如果使用托管邮箱服务,例如 Google Workspace、Microsoft 365 或 Zoho,供应商会提供密钥和 DNS 配置。在 Google Workspace 中,进入管理控制台 > 应用 > Google Workspace > Gmail > 认证电子邮件,选择生成新记录。界面名称可能随版本变化。
如果运行自己的邮件服务器,例如 Postfix、Exim 或 OpenDKIM,可在命令行生成:
openssl genrsa -out dkim_private.pem 2048
openssl rsa -in dkim_private.pem -pubout -out dkim_public.pem
条件允许时,使用 2048 位密钥。旧指南可能提到 1024 位;到了 2026 年,这种长度提供的密码学安全余量较小,但并非所有接收方都会一律拒绝 1024 位签名。请检查接收方要求及 DNS 主机对长记录的支持。
还需要选择一个选择器,即标识该密钥的名称。选择器便于轮换密钥,也可为不同服务使用不同密钥。常用名称有 google、s1、mail2026,或服务名称,如 sendgrid。
步骤 2:将公钥添加到 DNS
现在在域名的 DNS 区域创建 DKIM 记录。登录 Cloudflare、Route 53、GoDaddy 或 Namecheap 等供应商,添加 TXT 记录,并遵循其面板的输入格式。
主机名或名称字段:
selector._domainkey.yourdomain.com
将 selector 替换为步骤 1 选择的名称。如果选择器是 s1,域名是 example.com,完整记录名为:
s1._domainkey.example.com
值字段:
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2K4PavXoNY8eGK2u...truncated...base64encodedpublickey
p= 标签包含完整的 Base64 公钥。去掉 -----BEGIN PUBLIC KEY----- 等 PEM 标记和换行,确保密钥数据连续且没有插入分隔符。
重要:单个 TXT 字符串最多包含 255 个八位字节。常规的 2048 位 RSA 公钥需要分成多个字符串。有些面板会自动拆分,另一些要求手动放入双引号,每段不超过 255 个字符。应放在同一条 TXT 记录内,而不是发布多条独立记录。DKIM 验证时会将这些部分拼接。
步骤 3:在邮件服务器上启用 DKIM 签名
仅发布 DNS 记录不会产生签名。发送系统必须实际使用私钥为出站邮件签名。
Google Workspace:在生成密钥的管理界面启用“开始认证”。
OpenDKIM(Postfix/Exim):修改 /etc/opendkim.conf:
Selector s1
KeyFile /etc/opendkim/keys/example.com/dkim_private.pem
Domain example.com
Socket inet:8891@localhost
使用 Postfix 时,在 /etc/postfix/main.cf 中加入 milter:
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
重启两个服务:
sudo systemctl restart opendkim
sudo systemctl restart postfix
第三方发送服务,例如 SendGrid、Mailgun 和 Amazon SES,各自有启用流程。通常会提供 CNAME 或 TXT 配置,发布到 DNS 后再在控制面板中验证。请按供应商的最新文档操作。
步骤 4:验证记录
不要假定已经成功,应检查实际结果。
使用命令行:
dig TXT s1._domainkey.example.com +short
响应中应出现公钥。空结果可能是缓存尚未更新,也可能是记录名称错误。常见说明会给出最长约 48 小时的粗略等待范围,有些更新几分钟就能看到。实际时间取决于 TTL、供应商和是否正确发布;单纯等待不会修复配置错误。
发送测试邮件:向 Gmail 地址发送邮件并查看原始邮件头,查找:
Authentication-Results: mx.google.com;
dkim=pass header.i=@example.com header.s=s1
dkim=pass 表示这封测试邮件的该签名通过验证,还应检查域名对齐及其他发送路径。如果显示 dkim=fail 或 dkim=neutral,请检查配置和下节常见问题。
DKIM 记录语法说明
创建记录时,理解各标签有助于避免错误。完整结构示例如下:
v=DKIM1; k=rsa; t=s; p=MIIBIjANBgkqhkiG9w0BAQE...
| 标签 | 是否必需 | 含义 |
|---|---|---|
v=DKIM1 | 是 | 版本,必须为 DKIM1。 |
k=rsa | 否 | 密钥类型。RSA 是默认值且应用广泛。Ed25519 也已标准化,请核实发送方和接收方支持情况。 |
p= | 是 | Base64 公钥。空的 p= 表示撤销该密钥。 |
t=s | 否 | 要求 DKIM 身份 i= 的域名与签名域名 d= 完全一致,不允许其子域名;这并非 DMARC 的 From 对齐设置。 |
t=y | 否 | 测试标记。RFC 建议接收方不要因 DKIM 测试失败而区别对待邮件,但这不保证接收;验证后移除此标记。 |
创建 DKIM 记录时的常见错误
团队首次配置 DKIM 时,往往会重复遇到以下问题。
1. 公钥含换行。从 PEM 文件复制时很常见。把换行一起粘贴到 DNS 值中可能破坏密钥,应去掉 Base64 数据中的换行和空白。
2. DNS 名称中的选择器错误。密钥使用 s1,服务器却配置为 default。接收方查询 default._domainkey.example.com 时找不到公钥。DNS 选择器必须与实际签名选择器完全一致。
3. 同一选择器下发布多个 DKIM 记录。SPF 每个域名只应有一条记录,DKIM 则可以使用多个选择器,但每个选择器的密钥引用必须明确。为 s1._domainkey 发布两条 TXT 可能导致验证失败,不应指望接收方挑选正确的一条。
4. 忘记启用签名。DNS 只发布公钥,服务器仍要实际用私钥为出站邮件签名。没有签名,记录就不会发挥作用。
5. 使用 1024 位密钥。它们仍可能有效,但安全余量较小。Google 发件指南建议条件允许时使用 2048 位。生成新密钥对,以新选择器发布公钥并更新发送配置。等旧签名邮件不再需要旧密钥后,再通过清空 p= 撤销。
DKIM、SPF 与 DMARC:完整认证体系
DKIM 是三部分邮件认证框架中的一部分。
SPF 验证发送服务器的 IP 是否得到被检查域名的授权。转发时 IP 改变,SPF 可能失败。还未配置时,请先阅读SPF 记录设置指南,以及SPF 如何用于邮件,理解 10 个触发 DNS 的项这一限制和其他约束。
DKIM 的签名与内容相关,而不是与发送 IP 相关,因此可能在转发后保持有效,前提是被签名的数据没有发生影响验证的变化。这让 DKIM 成为 SPF 的重要补充。
DMARC 将它们与可见 From 域名关联。如果两者都没有成功且对齐,发布的策略可以建议观察、隔离或拒收;最终处理由接收方决定。至少 SPF 或 DKIM 要通过并且与 From 域名对齐。
可考虑的目标是 SPF 和 DKIM 均成功对齐,再核实合法发送路径后将 DMARC 设为 p=reject。这有助于减少域名冒用,但不保证良好域名声誉或更好的收件箱投递。
对于企业,这套认证是安全邮件运营的基础之一,但不能替代其他防护措施。
TrekMail 如何帮助配置 DKIM
单个域名可以手动配置,多个域名则会增加密钥轮换、选择器管理和错误排查的工作量。适当自动化并明确负责人,有助于减少运维负担。
TrekMail 描述了 SPF/DKIM/DMARC 设置向导,可提供 DNS 值并显示域名检查状态。哪些密钥由平台生成或管理,取决于发送路径。使用外部 SMTP 时应采用其供应商的配置。验证工具可以发现部分问题,但不能保证防止所有投递故障。
- Nano($0):BYO SMTP,例如 Amazon SES 或 Mailgun。DKIM 按实际 SMTP 供应商说明设置。文中描述无需信用卡,请核实当前条件。
- Starter($3.50/月):文中描述托管 SMTP 和 DKIM 支持;请核实自动生成与轮换功能。所述 14 天免费试用需要卡片。
- Pro($10/月):文中描述多个发送域名,请确认独立 DKIM 选择器及管理能力。所述试用期为 14 天。
- Agency($23.25/月):文中描述通过一个面板管理 100+ 客户域名,请核实当前限制、轮换和监控功能。所述试用期为 14 天。
重点并不只是方便。DKIM 配置错误可能直到认证或投递异常才被注意到,自动检查有助于更早发现,但不会覆盖全部故障场景。
结论
正确配置需要合适的密钥对,条件允许时采用 2048 位,在正确选择器下发布 TXT,实际启用签名并验证结果。单域名的设置输入可能约十分钟完成,DNS 更新和故障排查则可能另需时间。
完成 DKIM 后,继续配置 SPF 和 DMARC。它们改善认证并限制部分冒用风险,但不会让域名免受所有安全威胁。
如果不想完全手动管理 DNS,可以免费试用 TrekMail并了解向导。仍需核实实际发送服务对应的配置值。