什么是 DKIM?
DKIM (DomainKeys Identified Mail) 是在 RFC 6376 中定义的电子邮件认证方法。它使用非对称加密技术 — 私钥在您的邮件服务器上为外发邮件签名,发布在 DNS 中的公钥允许任何接收服务器验证该签名。如果邮件在签名后被篡改,签名将失效。
与 SPF 不同,DKIM 验证的是邮件内容本身(邮件头和/或正文),而不只是发送 IP。这使其在发送者 IP 发生变化的邮件转发场景中具有弹性。
为什么需要 DKIM?
1邮件完整性
证明邮件正文和邮件头自离开您的服务器后未被修改
2支持转发
签名嵌入在电子邮件中,不与发送 IP 绑定 — 在经过中继转发时依然有效
3DMARC 必需项
DMARC 可以使用 DKIM 对齐作为通过/失败决策的基础
4提升送达率
Gmail、Outlook 等在过滤决策中会给予带有 DKIM 签名的邮件很高的信任
DKIM 工作原理 — 步骤详解
您生成一对公钥/私钥,并配置您的邮件服务器使用私钥。
您在 `selector._domainkey.yourdomain.com` 以 DNS TXT 记录的形式发布公钥。
当您发送电子邮件时,邮件服务器会对选定的邮件头和正文进行哈希处理,然后用私钥对该哈希值进行签名。
签名作为 `DKIM-Signature` 头部添加到电子邮件中。
接收服务器读取 `DKIM-Signature`,从 DNS 获取公钥,解密签名,并重新对邮件进行哈希以进行比较。
匹配意味着邮件是真实且未被篡改的。不匹配则表示被篡改或配置错误。
DKIM DNS 记录 (公钥)
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADC...AQAB关键字段
v=DKIM1— 版本标识符k=rsa— 密钥类型 (rsa 或 ed25519)p=— Base64 编码的公钥h=— 可接受的哈希算法 (sha256)s=— 服务类型 (email 或 *)t=s— 严格模式标志DKIM-Signature 头部 (邮件中)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=yourdomain.com; s=mail2024;
h=from:to:subject:date:message-id;
bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=;
b=mY93xZ...签名字段含义
常见 DKIM 问题
正文被修改
某些邮件列表或病毒扫描程序会修改正文,导致 bh= 正文哈希失效
缺少 DNS 记录
在发送邮件前,验证您的 TXT 记录已发布并完成传播
选择器错误
签名中的 s= 必须与 DNS 记录名称中的选择器匹配
密钥长度太短
至少使用 2048 位 RSA 密钥。1024 位密钥被认为是不安全的,会被某些服务商拒绝
常见问题解答
DKIM 为邮件添加数字签名。接收服务器利用该签名验证邮件是否由域名所有者授权,并确认内容在传输过程中未被篡改。
它是用于在 DNS 中定位公钥的唯一字符串。通常在您的邮件服务提供商 (ESP) 设置中或已发送邮件头的 's=' 标签中可以找到。
通常是选择器名称错误、DNS 未完成传播或 TXT 记录添加到了错误的域名层级。
可以。如果您使用多个邮件服务,建议为每个服务设置唯一的选择器。这是维持多平台安全的最佳实践。
有效的 DKIM 签名能建立发件人信誉,使 ISP 更信任您的邮件,从而减少被拦截的几率。
私钥保存在邮件服务器用于签名,公钥发布在 DNS 中。接收方使用公钥解密并验证签名。这种非对称加密是安全的基础。