← RFC Reference

RFC 8689: SMTP 要求 TLS 选项

Standards Track Transport Security Published March 2026
ELI5: 普通的电子邮件加密就像问信使"如果装甲车有空的话,请使用它"。如果装甲车正在忙,信使耸耸肩,就用普通货车。REQUIRETLS 是信封上的一个戳记,说"装甲车或根本不要投递"。这条消息宁愿退回也不愿以未加密的方式传送。

为什么存在这个机制

服务器间电子邮件加密(通过 STARTTLS)默认是**机会性的**。如果接收服务器不支持 TLS,或者中间人攻击者剥离了 STARTTLS 功能,大多数发送服务器会回退到明文传递。邮件会送达,但没有加密。

MTA-STS 和 DANE 这样的技术在域级别解决了这个问题——它们让接收域声明"发往我们的所有邮件都必须使用 TLS"。但这些是**接收方**策略。**发送方**没有办法说"这条特定邮件需要在每一跳都使用 TLS"。

RFC 8689 用两个互补的机制填补了这个空白:

工作原理

REQUIRETLS SMTP 扩展

发送方在 SMTP 事务期间通过将 REQUIRETLS 作为参数添加到 MAIL FROM 命令来声明其意图:

# 服务器在 EHLO 中公告 REQUIRETLS 支持 S: 220 mx.example.com ESMTP C: EHLO sender.example.org S: 250-mx.example.com S: 250-STARTTLS S: 250-REQUIRETLS S: 250 OK # 先升级到 TLS C: STARTTLS S: 220 Go ahead # ... TLS 握手及证书验证 ... C: EHLO sender.example.org S: 250-mx.example.com S: 250-REQUIRETLS S: 250 OK # 带 REQUIRETLS 标志提交 C: MAIL FROM:<alice@example.org> REQUIRETLS S: 250 OK C: RCPT TO:<bob@example.com> S: 250 OK

每一跳的处理流程

当中继服务器处理带有 REQUIRETLS 标志的邮件时,必须在转发前执行这些规则:

  1. TLS 是强制性的。到下一跳的连接必须使用 TLS。如果下一个服务器不支持 STARTTLS,邮件不能被传递——它会被退回。
  2. 证书验证是必需的。下一跳的 TLS 证书必须有效且与服务器主机名匹配(通过 DANE/TLSA 或 Web PKI)。自签名或不匹配的证书会导致邮件被退回。
  3. REQUIRETLS 标志会传播。如果中继服务器也支持该扩展,它必须将 REQUIRETLS 参数传递到下一跳。如果下一跳不支持 REQUIRETLS,中继可以在能够通过 DANE 或 MTA-STS 验证 TLS 的情况下仍然传递。

TLS-Required 头

对于通过 MSA 提交且不直接控制 SMTP 参数的发送方,TLS-Required 头提供了相同的信号:

TLS-Required: No ; 等等——"No" 意味着"不需要 TLS"? ; 正确。该头有两个值: ; TLS-Required: No → 明确选择退出 REQUIRETLS ; (使用正常的机会性 TLS) ; 头的缺失意味着正常行为。 ; REQUIRETLS 信封标志是正信号。

TLS-Required: No 头是专门设计作为选择退出机制的。它告诉发送 MTA:"即使 REQUIRETLS 通常会应用于这条邮件(例如,因为域范围策略),也不要对这条特定邮件强制执行。"这对于像密码重置或通知之类的邮件很有用,其中传递比保证加密更重要。

退回行为

当 REQUIRETLS 阻止传递时,发送服务器生成一份未递送报告(退回)。退回本身也必须通过 TLS 发送——REQUIRETLS 也适用于 DSN(递送状态通知)邮件。如果退回无法安全传递,它会被静默丢弃而不是以明文发送(以避免泄露有关原始邮件的信息)。

# 下一跳不支持 TLS——REQUIRETLS 阻止传递 C: EHLO relay.example.org S: 250-mx.recipient.com S: 250 OK # 未公告 STARTTLS——无法通过 REQUIRETLS 传递 # 中继生成退回给 alice@example.org: # 550 5.7.30 REQUIRETLS support required but not available

关键技术细节

与 MTA-STS 和 DANE 的关系

机制 谁设置策略 范围 验证方法
MTA-STS 接收域 发往该域的所有邮件 Web PKI(HTTPS 获取)
DANE 接收域 发往该域的所有邮件 DNSSEC + TLSA 记录
REQUIRETLS 发送服务器/用户 逐邮件 每一跳的 DANE 或 MTA-STS

REQUIRETLS 是互补的,而非竞争的。MTA-STS 和 DANE 保护接收域的入站邮件。REQUIRETLS 保护特定的出站邮件。带有 REQUIRETLS 的邮件在每一跳使用 DANE 或 MTA-STS 进行验证——如果某一跳都不可用,传递失败。

TLS 版本要求

REQUIRETLS 需要 TLS 1.2 或更高版本。使用 TLS 1.0 或 1.1 的连接不满足要求,这与RFC 8996 弃用较旧 TLS 版本的规定一致。

增强状态码

代码 含义
5.7.30 需要 REQUIRETLS 支持但下一跳不可用
5.7.31 无法遵守 REQUIRETLS(例如,下一跳的证书无效)

常见错误

可传递性影响

Related RFCs