← RFC Reference

DANE — 基于DNS的SMTP TLS身份验证

Standards Track Transport Security Published March 2026
ELI5: 当您访问网站时,您的浏览器信任数百个证书颁发机构来保证网站身份。DANE 让域所有者可以排除中间商:"这是我的邮件服务器使用的确切证书(或 CA)— 我在我的 DNS 中发布了它,用 DNSSEC 签名,所以您可以自己验证它。" 无需信任 CA。

为什么存在这个

SMTP 和 STARTTLS 有两个根本问题:

  1. 没有身份验证。发送服务器无法可靠地验证接收服务器的 TLS 证书是否合法。SMTP 不使用网络的 CA 信任模型 — 历史上,大多数邮件服务器使用自签名证书,所以发送者学会了接受任何证书。
  2. 降级攻击。主动网络攻击者可以从 EHLO 响应中删除 STARTTLS 广告,强制使用明文投递。

MTA-STS (RFC 8461) 使用 HTTPS 和 Web PKI 解决这些问题。DANE 使用 DNSSEC 和 TLSA 记录解决它们。这两种方法是互补的:DANE 在密码学上更强大(不需要 CA 信任),而 MTA-STS 更容易部署(不需要 DNSSEC)。

工作原理

SMTP 的 DANE(在 RFC 7672 中定义,基于 RFC 6698 中的基础 DANE 规范)分三个步骤工作:

第 1 步:DNSSEC 签名区域

接收域的 DNS 区域 — 以及 MX 目标的区域 — 必须用 DNSSEC 签名。这是不可协商的。没有 DNSSEC,攻击者可以伪造 TLSA 记录,使 DANE 比没有还糟。

第 2 步:发布 TLSA 记录

该域为每个 MX 主机的 SMTP 端口发布 TLSA 记录。TLSA 记录将 TLS 证书(或其公钥,或其 CA)绑定到特定服务。

; TLSA 记录格式:_端口._协议.主机名 TLSA 使用 选择器 匹配类型 数据 _25._tcp.mail.example.com. IN TLSA 3 1 1 a]b2c3d4e5f6...sha256hash...

TLSA 记录字段

字段 值 描述
使用 0 — CA 约束 (PKIX-TA)
1 — 证书约束 (PKIX-EE)
2 — 信任锚声明 (DANE-TA)
3 — 域颁发证书 (DANE-EE)
证书数据如何用于验证。
选择器 0 — 完整证书
1 — SubjectPublicKeyInfo
证书的哪部分要匹配。
匹配类型 0 — 精确匹配
1 — SHA-256
2 — SHA-512
数据如何表示。

第 3 步:发送者验证

当支持 DANE 的发送服务器向 example.com 投递邮件时:

  1. 使用 DNSSEC 验证解析 example.com 的 MX 记录。
  2. 对于每个 MX 主机(例如 mail.example.com),使用 DNSSEC 验证查询 _25._tcp.mail.example.com TLSA。
  3. 如果存在 DNSSEC 验证的 TLSA 记录:连接,执行 STARTTLS,并根据 TLSA 数据验证服务器证书。
  4. 如果验证失败:不投递。邮件排队等待重试。
  5. 如果不存在 TLSA 记录(或未部署 DNSSEC):回退到之前的机会性 TLS。

关键技术细节

推荐的 TLSA 配置

对于 SMTP 服务器,RFC 7672 推荐 DANE-EE(3) SPKI(1) SHA-256(1):

_25._tcp.mail.example.com. IN TLSA 3 1 1 <公钥的 sha256 哈希>

这是最健壮的选择,因为:

生成 TLSA 记录

# 提取服务器公钥的 SHA-256 哈希
openssl x509 -in server.crt -noout -pubkey | \
  openssl pkey -pubin -outform DER | \
  openssl dgst -sha256 -hex
(stdin)= 2a9f8e3b1c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f

# 生成的 TLSA 记录:
_25._tcp.mail.example.com. IN TLSA 3 1 1 2a9f8e3b1c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f

DANE vs. MTA-STS

DANE MTA-STS
信任模型 DNSSEC(不需要 CA) Web PKI(CA 颁发的证书)
需要 DNSSEC 是(硬性要求) 否
自签名证书 支持(使用 3) 不支持
首次使用安全 从第一次使用开始安全 首次使用信任 (TOFU)
部署障碍 DNSSEC(重大) HTTPS 托管(低)
采用情况 荷兰、德国、捷克采用率强;其他地区有限 广泛支持

常见错误

可投递性影响

Related RFCs