RFC 8461 MTA-STS:用 DNS 与 HTTPS 强制 SMTP 传输层加密

IETF Standards Track RFC 8461 · SMTP MTA Strict Transport Security · 译自标准核心机制

概述

SMTP 依赖 STARTTLS(RFC 3207)在会话中协商 TLS,可抵御被动流量窃听。但 STARTTLS 是"机会型"加密:攻击者只要能剥离会话中的 250 STARTTLS 响应,或篡改收件域的 MX 解析,就能把加密会话降级为明文,进而实施中间人拦截。RFC 8461 定义的 MTA-STS 让收件域通过 DNS + HTTPS 发布一份"期望策略",声明发送方应当对该域强制 TLS,从而在协议层面消除降级空间。

为什么需要 MTA-STS

传统的 opportunistic TLS 存在两类可被主动利用的弱点:

MTA-STS 不依赖 DNSSEC,而是依托 Web PKI(浏览器级证书信任链)来验证策略文件本身,使发送方能确认"这份强制 TLS 策略确实来自该域"。

策略发现:TXT 记录 + HTTPS 策略文件

发送方按两步发现策略:

  1. 查询 _mta-sts.<Policy Domain> 的 TXT 记录,确认策略版本与 id(用于判断缓存是否过期)。
  2. 通过 HTTPS GET https://mta-sts.<Policy Domain>/.well-known/mta-sts.txt,要求 Policy Host 提供匹配 mta-sts DNS-ID 的合法 X.509 证书;仅 HTTP 200 有效,不跟随 3xx 重定向,不使用 HTTP 缓存。

策略文件字段

字段说明约束
version策略版本,当前仅 STSv1必填,仅一次
modeenforce / testing / none必填,仅一次
max_age策略缓存生命周期(秒,最大 31557600)必填,仅一次
mx允许的 MX 主机模式(如 mail.example.com*.example.net可多条;none 模式除外

三种模式

部署示例

DNS TXT 发现记录:

_mta-sts.example.com. IN TXT "v=STSv1; id=20260726085700Z;"

HTTPS 策略文件 /.well-known/mta-sts.txt

version: STSv1
mode: enforce
mx: mail.example.com
mx: *.example.net
max_age: 604800

与 TLS-RPT(RFC 8460)协同

MTA-STS 设计上需与 TLS-RPT(RFC 8460)配合:当策略 modenone 时,下列事件应作为可报告失败上报——存在有效 TXT 但 HTTPS 策略获取失败、联系到的 MX 不支持 STARTTLS 或证书未按策略验证。testing 模式正是为了在影响投递前,通过 TLS-RPT 收集部署问题报告。

参考文献

  1. RFC 8461 — SMTP MTA Strict Transport Security (MTA-STS) §3 策略发现、§4 策略应用
  2. RFC 8460 — SMTP TLS Reporting (TLSRPT) §4 失败类型注册表
  3. RFC 3207 — SMTP Service Extension for Secure SMTP over TLS (STARTTLS)
  4. RFC 7672 — SMTP Security via Opportunistic DNS-Based Authentication of Named Entities (DANE) TLSA
  5. RFC 6125 — Representation and Verification of Domain-Based Application Service Identity