非官方中文译本声明:本页为 IETF RFC 8460《SMTP TLS Reporting(SMTP TLS 报告,简称 TLS-RPT)》 的中文译本,由 ztpop.net 整理翻译,仅供学习参考。RFC 文档由 IETF 发布,受 BCP 78 与 IETF 信托法律条款约束;本译本保留原文编号与结构,权威性以英文原文为准。英文原文见 rfc-editor.org/rfc/rfc8460。
RFC 8460:SMTP TLS 报告(TLS-RPT)
摘要
现有多种用于在 SMTP 邮件传输代理(MTA)之间建立加密信道的协议,包括 STARTTLS、基于 DNS 的命名实体认证(DANE)TLSA,以及 MTA 严格传输安全(MTA-STS)。这些协议可能因配置错误或主动攻击而失败,导致邮件无法投递,或者在未加密或未认证信道上投递。本文档描述了一种报告机制与格式,发送系统借此可以与接收域共享关于潜在失败的统计信息与具体信息。接收域随后可以利用这些信息检测潜在攻击,并诊断无意的配置错误。
本备忘录的状态
本文档是一份互联网标准跟踪(Internet Standards Track)文档。
本文档是互联网工程任务组(IETF)的产物,代表 IETF 社区的共识,已经过公开评审,并由互联网工程指导组(IESG)批准发布。有关互联网标准的更多信息参见 RFC 7841 第 2 节。
关于本文档当前状态、任何勘误,以及如何就其提供反馈的信息,可在 https://www.rfc-editor.org/info/rfc8460 获取。
版权声明
Copyright (c) 2018 IETF 信托及被列为文档作者的个人。保留所有权利。
本文档受 BCP 78 以及 IETF 信托的《IETF 文档相关法律规定》(https://trustee.ietf.org/license-info)约束,以本文档发布之日生效的版本为准。请仔细审阅这些文档,因为它们描述了您就本文档所享有的权利与限制。从本文档中提取的代码组件必须包含 [RFC 信托法律条款] 第 4.e 节所述的简化 BSD 许可证文本,并按该简化 BSD 许可证所述"不提供担保"的方式提供。
目录
- 1. 引言
- 1.1. 术语
- 2. 相关技术
- 3. 报告策略
- 3.1. 报告策略示例
- 3.1.1. 使用 MAILTO 报告
- 3.1.2. 使用 HTTPS 报告
- 3.1. 报告策略示例
- 4. 报告模式(Schema)
- 4.1. 报告时间范围
- 4.2. 投递摘要
- 4.2.1. 成功计数
- 4.2.2. 失败计数
- 4.3. 结果类型
- 4.3.1. 协商失败
- 4.3.2. 策略失败
- 4.3.2.1. DANE 特有的策略失败
- 4.3.2.2. MTA-STS 特有的策略失败
- 4.3.3. 一般性失败
- 4.3.4. 瞬时失败
- 4.4. JSON 报告模式
- 4.5. 策略样例
- 5. 报告投递
- 5.1. 报告文件名
- 5.2. 压缩
- 5.3. 电子邮件传输
- 5.3.1. 报告示例
- 5.4. HTTPS 传输
- 5.5. 投递重试
- 5.6. 元数据差异
- 6. IANA 考量
- 6.1. 报文头字段
- 6.2. 报告类型
- 6.3. +gzip 媒体类型后缀
- 6.4. application/tlsrpt+json 媒体类型
- 6.5. application/tlsrpt+gzip 媒体类型
- 6.6. STARTTLS 验证结果类型
- 7. 安全考量
- 8. 隐私考量
- 9. 参考文献
- 9.1. 规范性参考文献
- 9.2. 资料性参考文献
- 附录 A. 报告策略示例
- A.1. 使用 MAILTO 报告
- A.2. 使用 HTTPS 报告
- 附录 B. 示例 JSON 报告
- 贡献者
- 作者地址
1. 引言
对 SMTP 的 STARTTLS 扩展 [RFC3207] 允许 SMTP 客户端与主机通过 TLS 建立安全的 SMTP 会话。该协议设计采用一种后来被称为"机会性安全"(Opportunistic Security,OS)[RFC7435] 的方法。这种方法与不支 STARTTLS 的客户端保持互操作性,但这意味着任何攻击者都可能潜在地窃听会话。攻击者可以通过删除 SMTP 会话的某些部分(例如"250 STARTTLS"响应)来执行降级或拦截攻击,或者重定向整个 SMTP 会话(例如通过覆盖投递域解析到的 MX 记录)。
由于此类"降级攻击"对接收 MTA 而言未必显而易见,本文档定义了一种机制,供发送域就 MTA 到 MTA 对话多个阶段的失败进行报告。
接收域也可以利用 MTA-STS [RFC8461] 或 DANE [RFC6698] 所定义的机制来发布额外的加密与认证要求;本文档为兼容 MTA-STS 或 DANE 的发送域定义了一种机制,用于与接收域共享成功与失败统计信息。
具体而言,本文档定义了一种报告模式(schema),涵盖路由、DNS 解析以及 STARTTLS 协商中的失败;DANE [RFC6698] 与 MTA-STS [RFC8461] 的策略验证错误;以及一条标准 TXT 记录,接收域可用其指示此类格式的报告应发送到何处。该报告也可以作为"心跳"信号,表明系统正在按预期成功协商会话期间的 TLS。
本文档旨在作为 SMTP MTA-STS [RFC8461] 规范的配套文档,并为那些实现 DANE [RFC7672] 的部署添加报告能力。
1.1. 术语
本文档中的关键词"MUST(必须)"、"MUST NOT(不得)"、"REQUIRED(要求)"、"SHALL(应)"、"SHALL NOT(不应)"、"SHOULD(应该)"、"SHOULD NOT(不应该)"、"RECOMMENDED(推荐)"、"NOT RECOMMENDED(不建议)"、"MAY(可以)"和"OPTIONAL(可选)",当且仅当它们以全大写形式出现(如这里所示)时,应按照 BCP 14 [RFC2119] [RFC8174] 中的描述进行解释。
我们还为本文档后续使用定义以下术语:
- MTA-STS 策略(MTA-STS Policy):一种机制,管理员可通过它指定给定邮件接收域所期望的 TLS 可用性、呈现的身份标识,以及期望的动作。MTA-STS 在 [RFC8461] 中定义。
- DANE 策略(DANE Policy):一种机制,管理员可通过它使用 DNSSEC 约束某个 MTA 必须支持 STARTTLS,并发布用于验证其呈现证书的标准。SMTP 的 DANE 在 [RFC7672] 中定义,其基础规范在 [RFC6698] 中定义(并由 [RFC7671] 更新)。
- TLSRPT(TLS 报告)策略:一种策略,指定发送 MTA 应将报告投递到的端点。
- 策略域(Policy Domain):针对其定义 TLSRPT、MTA-STS 或 DANE 策略的域。对于 TLSRPT 与 MTA-STS,这通常与信封接收者域 [RFC5321] 相同;但当邮件因本地策略被路由到"智能主机"(smarthost)网关时,则改用"智能主机"的域名。对于 DANE,策略域是接收 SMTP 服务器的"TLSA 基域"(TLSA base domain),如 RFC 7672 第 2.2.3 节与 RFC 6698 第 3 节所述。
- 发送 MTA(Sending MTA):发起邮件中转(relay)的 MTA。
- 聚合报告 URI(rua):报告应提交到的位置组成的逗号分隔列表。
- ABNF:增强型巴科斯-诺尔范式(Augmented Backus-Naur Form),一种用于形式化描述语法的表示法,在 [RFC5234] 与 [RFC7405] 中定义。
2. 相关技术
- 本文档旨在作为 SMTP MTA-STS [RFC8461] 规范的配套文档。
- SMTP TLSRPT 为兼容 MTA-STS 或 DANE 的发送域定义了一种机制,用于与接收域共享成功与失败统计信息。DANE 在 [RFC6698] 中定义,MTA-STS 在 [RFC8461] 中定义。
3. 报告策略
某个域会向自己的 DNS 发布一条记录,表明它希望接收报告。这些 SMTP TLSRPT 策略经由 DNS 从策略域的区域(zone)以 TXT 记录的形式分发(类似于基于域的消息认证、报告与一致性(DMARC)策略),位于名称"_smtp._tls"之下。例如,对于策略域"example.com",接收方的 TLSRPT 策略可以从"_smtp._tls.example.com"检索得到。
策略由以下指令组成:
- "v":本文档定义 TLSRPT 的第 1 版,其值必须(MUST)等于"TLSRPTv1"。其他版本可能在后续文档中定义。
- "rua":一个 URI,指定应把关于策略验证结果的聚合信息发送到何处(详见第 4 节"报告模式")。支持两种 URI 方案:"mailto"与"https"。如同 DMARC [RFC7489],策略域可以指定一个逗号分隔的 URI 列表。
- 对于"https",报告应通过 POST [RFC7231] 提交到指定的 URI。报告提交方在通过 HTTPS POST 提交报告时,可以(MAY)忽略证书验证错误。
- 对于"mailto",报告应提交到指定的电子邮件地址 [RFC6068]。当通过 SMTP 发送失败报告时,发送 MTA 必须(MUST)不顾任何与 TLS 相关的失败投递报告,并且不应(SHOULD NOT)将该 SMTP 会话纳入下一次报告。这可能意味着报告以未加密方式投递。通过 SMTP 发送的报告必须(MUST)包含由报告域签发的有效 DKIM(DomainKeys Identified Mail)[RFC6376] 签名。缺少此类签名的报告必须(MUST)被接收方忽略。DKIM 签名不得(MUST NOT)使用"l="属性来限制签名所用的正文长度。这确保了攻击者无法在破坏签名的情况下,向报告中附加无关或误导性的数据。DKIM TXT 记录应当(SHOULD)包含适当的服务类型声明"s=tlsrpt"。若缺失,接收系统可以(MAY)忽略缺少该服务类型的报告。
示例 DKIM 记录:
dkim_selector._domainkey.example.com TXT
"v=DKIM1;k=rsa;s=tlsrpt;p=Mlf4qwSZfase4fa=="
"_smtp._tls" TXT 记录的形式化定义(使用 [RFC5234] 与 [RFC7405])如下:
tlsrpt-record = tlsrpt-version 1*(field-delim tlsrpt-field)
[field-delim]
field-delim = *WSP ";" *WSP
tlsrpt-field = tlsrpt-rua / ; Note that the
tlsrpt-extension ; tlsrpt-rua record is
; required.
tlsrpt-version = %s"v=TLSRPTv1"
tlsrpt-rua = %s"rua="
tlsrpt-uri *(*WSP "," *WSP tlsrpt-uri)
tlsrpt-uri = URI
; "URI" is imported from [RFC3986];
; commas (ASCII 0x2C), exclamation
; points (ASCII 0x21), and semicolons
; (ASCII 0x3B) MUST be encoded
tlsrpt-extension = tlsrpt-ext-name "=" tlsrpt-ext-value
tlsrpt-ext-name = (ALPHA / DIGIT) *31(ALPHA /
DIGIT / "_" / "-" / ".")
tlsrpt-ext-value = 1*(%x21-3A / %x3C / %x3E-7E)
; chars excluding "=", ";", SP, and control
; chars
如果解析器返回了多条"_smtp._tls"的 TXT 记录,则那些不以"v=TLSRPTv1;"开头的记录将被丢弃。如果所得记录的数量不为 1,发送方必须(MUST)假定接收域并未实现 TLSRPT。如果所得的 TXT 记录包含多个字符串(如 [RFC7208] 第 3.3 节所述),则该记录必须(MUST)被视为这些字符串被拼接在一起且不添加空格。
该记录支持声明多个 rua;如果存在多个,报告方可以(MAY)尝试投递到每个受支持的 rua 目标。接收方可以(MAY)选择仅尝试投递到其中一个端点;但是,在其中一个端点接受报告投递之前,不应(SHOULD NOT)认为报告已成功投递。
解析器必须(MUST)接受语法上有效(即由分号分隔的有效键/值对)的 TXT 记录,并实现本规范的超集,在此情况下未知字段应被忽略(SHALL)。
3.1. 报告策略示例
3.1.1. 使用 MAILTO 报告
_smtp._tls.example.com. IN TXT \
"v=TLSRPTv1;rua=mailto:reports@example.com"
3.1.2. 使用 HTTPS 报告
_smtp._tls.example.com. IN TXT \
"v=TLSRPTv1; \
rua=https://reporting.example.com/v1/tlsrpt"
4. 报告模式(Schema)
报告被构造成一个以互联网 JSON(I-JSON)格式 [RFC7493] 编码的纯文本文件。
聚合报告包含以下字段:
- 报告元数据(Report metadata):
- 负责该报告的组织
- 一个或多个对报告内容负责方的联系信息
- 报告的唯一标识符
- 报告的报告日期范围
- 策略(Policy),由以下部分组成:
- 下列策略类型之一:(1) 所应用的 MTA-STS 策略(以字符串形式),(2) 所应用的 DANE TLSA 记录(以字符串形式,RRset 中每个 RR 条目逐条列出并以分号分隔),(3) 字面量字符串"no-policy-found"(如果既找不到 DANE 也找不到 MTA-STS 策略)。
- 应用该策略的域
- MX 主机
- 聚合计数(Aggregate counts),由结果类型、发送 MTA IP、接收 MTA 主机名、会话计数,以及一个可选的附加信息字段组成,该字段包含供接收方查看关于某类失败更多信息的 URI。
注意,失败类型并非互斥;当单次发送尝试遇到多个错误时,一条聚合报告可能包含彼此重叠的失败类型"计数"。报告方可以报告多个已应用的策略(例如,针对同一域与同一 MX 的 MTA-STS 策略与 DANE TLSA 记录)。因此,即使在仅应用了单一策略的情况下,报告正文中的"policies"字段也必须(MUST)是一个数组,而非单一值。
在存在多种失败类型的情况下,"failure-details"数组将包含多个条目。每个条目都拥有自身关于该类失败的信息集合。
4.1. 报告时间范围
报告应当(SHOULD)覆盖完整的一天,从 UTC 00:00 到 24:00。这应当有助于更轻松地关联失败事件。为避免无意中过载处理报告的系统,报告应当(SHOULD)在延迟一段时间(也许是数小时)之后再投递。
举例来说,某个发送站点可能希望引入最长四小时的随机延迟:
func generate_sleep_delay() {
min_delay = 1
max_delay = 14400
rand = random(min_delay, max_delay)
return rand
}
func generate_report(policy_domain) {
do_rpt_work(policy_domain)
send_rpt(policy_domain)
}
func generate_tlsrpt() {
sleep(generate_sleep_delay())
for policy_domain in list_of_tlsrpt_enabled_domains {
generate_report(policy_domain)
}
}
4.2. 投递摘要
4.2.1. 成功计数
- "total-successful-session-count":这表明发送 MTA 能够成功协商出一条符合策略的 TLS 连接,并起到向接收域提供"心跳"的作用,表明报告功能正常且统计正确。该字段包含报告系统成功连接数的聚合计数。
4.2.2. 失败计数
- "total-failure-session-count":这表明发送 MTA 未能成功与接收平台建立连接。第 4.3 节"结果类型"将进一步详述那些失败的协商尝试。该字段包含失败连接数的聚合计数。
4.3. 结果类型
结果类型列表将以如下的最小集合起步,并预期随着真实世界经验而增长。初始集合在 4.3.1 至 4.3.4 节中概述:
4.3.1. 协商失败
- "starttls-not-supported":表明接收 MX 不支持 STARTTLS。
- "certificate-host-mismatch":表明所呈现的证书未遵守 MTA-STS 或 DANE 策略所指定的约束,例如 MX 主机名与主题备用名(SAN)[RFC5280] 中列出的任何标识都不匹配。
- "certificate-expired":表明证书已过期。
- "certificate-not-trusted":这是一个涵盖多种证书相关失败的标签,包括但不限于不受信任/未知的证书颁发机构(CA)、证书名称约束、证书链错误等。使用此声明时,报告 MTA 应当(SHOULD)利用"failure-reason-code"向接收实体提供更多信息的标签。
- "validation-failure":表明一个不符合上述任何类别的通用失败。使用此声明时,报告 MTA 应当(SHOULD)利用"failure-reason-code"向接收实体提供更多信息的标签。
4.3.2. 策略失败
4.3.2.1. DANE 特有的策略失败
- "tlsa-invalid":表明与 DANE 策略关联的 TLSA 记录存在验证错误。RRset 中没有一条记录被判定为有效。
- "dnssec-invalid":表明递归解析器没有返回任何有效记录。
- "dane-required":表明发送系统被配置为要求目的域的所有 MX 主机都必须具备 DANE TLSA 记录,但作为报告主体的 MX 主机却不存在经过 DNSSEC 验证的 TLSA 记录。SMTP 的强制 DANE 在 [RFC7672] 第 6 节中描述。此类策略可能由两个频繁通过电子邮件交换敏感内容的组织之间互相约定而创建。
4.3.2.2. MTA-STS 特有的策略失败
- "sts-policy-fetch-error":表明检索 MTA-STS 策略失败,例如因为策略主机不可达。
- "sts-policy-invalid":表明整个 MTA-STS 策略存在验证错误。
- "sts-webpki-invalid":表明无法使用 PKIX 验证对 MTA-STS 策略进行认证。
4.3.3. 一般性失败
当某个协商失败无法归入上述任一"协商失败"类别时,报告方应当(SHOULD)使用"validation-failure"类别。随着 TLS 的发展与日益复杂,新的机制可能无法轻易归类。这使得一个通用的反馈类别成为可能。使用此类别时,报告方还应当(SHOULD)使用"failure-reason-code"向接收实体提供某些反馈。该字段旨在成为一个简短的文本字段,其内容应为错误码或错误文本,例如"X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION"。
4.3.4. 瞬时失败
由于网络过于繁忙、TCP 超时等导致的瞬时错误,不要求(不强制)报告。
4.4. JSON 报告模式
该 JSON 模式派生自 HTTP 公钥固定(HPKP)的 JSON 模式;参见 [RFC7469] 第 3 节。
{
"organization-name": organization-name,
"date-range": {
"start-datetime": date-time,
"end-datetime": date-time
},
"contact-info": email-address,
"report-id": report-id,
"policies": [{
"policy": {
"policy-type": policy-type,
"policy-string": policy-string,
"policy-domain": domain,
"mx-host": mx-host-pattern
},
"summary": {
"total-successful-session-count": total-successful-session-count,
"total-failure-session-count": total-failure-session-count
},
"failure-details": [
{
"result-type": result-type,
"sending-mta-ip": ip-address,
"receiving-mx-hostname": receiving-mx-hostname,
"receiving-mx-helo": receiving-mx-helo,
"receiving-ip": receiving-ip,
"failed-session-count": failed-session-count,
"additional-information": additional-info-uri,
"failure-reason-code": failure-reason-code
}
]
}
]
}
- "organization-name":负责该报告的组织名称。以字符串形式提供。
- "date-time":指示报告范围的起止时间。以字符串形式提供,按照 [RFC3339] 第 5.6 节"互联网日期/时间格式"格式化。报告应当覆盖 UTC 的完整一天,00:00-24:00。
- "email-address":对报告负责方的联系信息。以字符串形式提供,按照 [RFC5322] 第 3.4.1 节"Addr-Spec 规范"格式化。
- "report-id":报告的唯一标识符。报告作者可以使用他们偏好的任何方案来生成唯一标识符。以字符串形式提供。
- "policy-type":由发送域所应用的策略类型。目前,仅有三个有效选择:"tlsa"、"sts",以及字面量字符串"no-policy-found"。以字符串形式提供。
- "policy-string":所应用策略的编码,形式为字符串的 JSON 数组,无论是 TLSA 记录([RFC6698] 第 2.3 节)还是 MTA-STS 策略。后续一节将给出示例。
- "domain":定义 MTA-STS 或 DANE 策略所针对的策略域。在国际化域名 [RFC5891] 的情况下,该域必须由 Punycode 编码的 A-label [RFC3492] 组成,而非 U-label。
- "mx-host-pattern":当"policy-type"为"sts"时,它是来自所应用策略的 MX 主机名模式。以字符串的 JSON 数组形式提供,并按照与"MX 主机验证"中规则相同的方式解释;参见 [RFC8461] 第 4.1 节。在国际化域名 [RFC5891] 的情况下,该域必须由 Punycode 编码的 A-label [RFC3492] 组成,而非 U-label。
- "result-type":取自上文第 4.3 节"结果类型"的一个值。
- "ip-address":尝试建立 STARTTLS 连接的发送 MTA 的 IP 地址。以字符串形式提供,表示 IPv4(见下文)或 IPv6 [RFC5952] 地址的点分十进制或冒分十六进制记法。
- "receiving-mx-hostname":发送 MTA 尝试与其协商 STARTTLS 连接的接收 MTA 的 MX 记录主机名。
- "receiving-mx-helo"(可选):在所报告会话的横幅中宣告的 HELLO(HELO)或扩展 HELLO(EHLO)字符串。
- "receiving-ip":建立出站会话时所使用的目的 IP 地址。以字符串形式提供,表示 IPv4(见下文)或 IPv6 [RFC5952] 地址的点分十进制或冒分十六进制记法。
- "total-successful-session-count":成功协商到接收站点的启用 TLS 连接的聚合计数(一个整数,编码为 JSON 数字)。
- "total-failure-session-count":未能协商到接收站点的启用 TLS 连接的聚合计数(一个整数,编码为 JSON 数字)。
- "failed-session-count":与本节的相应"result-type"相匹配的(尝试过的)会话数量(一个整数,编码为 JSON 数字)。
- "additional-info-uri"(可选):指向与相应"result-type"相关更多信息的 URI [RFC3986]。例如,该 URI 可能承载一次尝试的 STARTTLS 会话中所呈现的完整证书链。
- "failure-reason-code":一个文本字段,用于包含与 TLS 相关的错误码或错误消息。
出于报告目的,IPv4 地址通过以下 ABNF 定义:
IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet = DIGIT ; 0-9
/ %x31-39 DIGIT ; 10-99
/ "1" 2DIGIT ; 100-199
/ "2" %x30-34 DIGIT ; 200-249
/ "25" %x30-35 ; 250-255
而 IPv6 地址通过以下 ABNF 定义:
IPv6address = <as defined in [RFC5954]>
4.5. 策略样例
报告正文的一部分包含了在尝试中转(relay)到目的地时所应用的策略。
对于 DANE TLSA 策略,这是一个字符串的 JSON 数组,每个字符串表示单个 TLSA 资源记录的 RDATA,以空格分隔列出其四个 TLSA 字段;这些字段采用呈现格式(定义于 [RFC6698] 第 2.2 节),内部没有空格或分组括号:
[
"3 0 1 1F850A337E6DB9C609C522D136A475638CC43E1ED424F8EEC8513
D747D1D085D",
"3 0 1 12350A337E6DB9C6123522D136A475638CC43E1ED424F8EEC8513
D747D1D1234"
]
对于 MTA-STS 策略,这是一个 JSON 字符串数组,表示接收站点所声明的策略,包括其中可能存在的任何错误。注意,当存在多个"mx"值时,它们必须作为策略数组中独立的"mx"元素列出,而不是作为单一的嵌套"mx"子数组。
[
"version: STSv1",
"mode: testing",
"mx: mx1.example.com",
"mx: mx2.example.com",
"mx: mx.backup-example.com",
"max_age: 604800"
]
5. 报告投递
报告既可以通过 SMTP(作为一封电子邮件消息)投递,也可以通过 HTTP POST 投递。
5.1. 报告文件名
文件名建议(RECOMMENDED)使用以下 ABNF 构造:
filename = sender "!" policy-domain "!" begin-timestamp
"!" end-timestamp [ "!" unique-id ] "." extension
unique-id = 1*(ALPHA / DIGIT)
sender = domain ; from [RFC5321] -- this is used
; as the domain for the `contact-info`
; address in the report body.
; In the case of Internationalized Domain
; Names [RFC5891], the domain MUST consist of
; the Punycode-encoded A-labels [RFC3492] and
; not the U-labels.
policy-domain = domain
; In the case of Internationalized Domain
; Names [RFC5891], the domain MUST consist of
; the Punycode-encoded A-labels [RFC3492] and
; not the U-labels.
begin-timestamp = 1*DIGIT
; seconds since 00:00:00 UTC January 1, 1970
; indicating start of the time range contained
; in the report
end-timestamp = 1*DIGIT
; seconds since 00:00:00 UTC January 1, 1970
; indicating end of the time range contained
; in the report
extension = "json" / "json.gz"
对于普通的 JSON 文件,扩展名必须(MUST)为"json";对于使用 gzip 压缩的 JSON 文件,扩展名必须(MUST)为"json.gz"。
"unique-id"允许发送 MTA 生成一个可选的唯一 ID,用于区分由不同来源同时为同一策略域生成的多个报告。例如,下面可能是来自发送 MTA "mail.sndr.example.com"、发往策略域"example.net"的一份压缩报告的可能文件名:
"mail.sndr.example.com!example.net!1470013207!1470186007!001.json.gz"
5.2. 压缩
对于电子邮件与 HTTPS 两种传输方式,报告应当(SHOULD)经过 gzip [RFC1952] 压缩。拒绝应用压缩可能导致报告过大而无法被接收方处理(一个常见的可观察接收方限制是十兆字节);压缩该文件能够提高报告被接受的概率,代价是一定的计算开销。
5.3. 电子邮件传输
报告可以(MAY)通过电子邮件投递。为使报告对接收方可被机器解析,我们定义了一个顶层媒体类型"multipart/report",并带有一个新参数"report-type="tlsrpt""。在其内部有两个部分:第一部分是人类可读的,通常为"text/plain";第二部分是机器可读的,使用所定义的新媒体类型"application/tlsrpt+json"。如果经过压缩,报告应当使用媒体类型"application/tlsrpt+gzip"。
此外,定义了以下两个新的顶层报文头字段:
"TLS-Report-Domain: Receiver-Domain" "TLS-Report-Submitter: Sender-Domain"
"TLS-Report-Submitter"的值必须(MUST)与报告正文中"contact-info"的域 [RFC5321] 相匹配。这些报文头字段必须(MUST)被包含,并且应当便于轻松搜索由某个报告域或特定提交者提交的所有报告,例如在 IMAP [RFC3501] 中:
"s SEARCH HEADER "TLS-Report-Domain" "example.com""
假定聚合报告地址具备处理能力,能够解析新的报文头字段并提取具有规定媒体类型与文件名的 MIME 部分,而忽略其余部分。这些附加头字段应当(SHOULD)被包含在消息的 DKIM [RFC6376] 签名中。
报告提交的 RFC5322.Subject 字段应当(SHOULD)符合以下 ABNF:
tlsrpt-subject = %s"Report" FWS ; "Report"
%s"Domain:" FWS ; "Domain:"
domain-name FWS ; per [RFC6376]
%s"Submitter:" FWS ; "Submitter:"
domain-name FWS ; per [RFC6376]
%s"Report-ID:" FWS ; "Report-ID:
<" id-left "@" id-right ">" ; per [RFC5322]
[CFWS] ; per [RFC5322]
; (as with FWS)
第一个 domain-name 指示生成该报告所关于的 DNS 域名。第二个 domain-name 指示代表生成该报告的发送 MTA 的 DNS 域名。"Report-ID:"字段部分的目的是使策略域能够识别并忽略可能由某个发送 MTA 发送的重复报告。
例如,下面可能是来自发送 MTA "mail.sender.example.com"、发往策略域"example.net"的一份报告的可能 Subject 字段。它按照 [RFC5322] 所允许的进行了折行:
Subject: Report Domain: example.net
Submitter: mail.sender.example.com
Report-ID: <735ff.e317+bf22029@mailexample.net>
5.3.1. 报告示例
From: tlsrpt@mail.sender.example.com
Date: Fri, May 09 2017 16:54:30 -0800
To: mts-sts-tlsrpt@example.net
Subject: Report Domain: example.net
Submitter: mail.sender.example.com
Report-ID: <735ff.e317+bf22029@example.net>
TLS-Report-Domain: example.net
TLS-Report-Submitter: mail.sender.example.com
MIME-Version: 1.0
Content-Type: multipart/report; report-type="tlsrpt";
boundary="----=_NextPart_000_024E_01CC9B0A.AFE54C00"
Content-Language: en-us
This is a multipart message in MIME format.
------=_NextPart_000_024E_01CC9B0A.AFE54C00
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
This is an aggregate TLS report from mail.sender.example.com
------=_NextPart_000_024E_01CC9B0A.AFE54C00
Content-Type: application/tlsrpt+gzip
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="mail.sender.example!example.com!
1013662812!1013749130.json.gz"
<gzipped content of report>
------=_NextPart_000_024E_01CC9B0A.AFE54C00--
...
注意,当通过 SMTP 发送失败报告时,发送 MTA 不得(MUST NOT)遵从 MTA-STS 或 DANE TLSA 失败。
5.4. HTTPS 传输
报告可以(MAY)通过 POST 投递到 HTTPS。如果经过压缩,报告应当(SHOULD)使用媒体类型"application/tlsrpt+gzip";否则应当(SHOULD)使用媒体类型"application/tlsrpt+json"(参见第 6 节"IANA 考量")。
接收系统必须(MUST)从其 HTTPS 服务器返回一个"成功"响应,通常为 200 或 201 这样的 HTTP 代码 [RFC7231]。其他代码可能表示投递失败,并可以按照本地发送方策略进行重试。接收系统不要求在收到报告时即进行处理,并且可以(MAY)将其存储起来以便后续处理。
5.5. 投递重试
在发生投递失败的情况下,无论采用何种投递方式,发送方应当(SHOULD)在初次尝试之后最多 24 小时内尝试重新投递。如前所述,报告是可选的,因此虽然尝试重新投递是理想的,但并不要求。如果尝试了多次重试,理想情况下它们应当(SHOULD)以指数退避的方式进行。
5.6. 元数据差异
如上所述,声明其中数据信息的方式有多种可变之处。如果通过 subject 或 filename 声明的任何条目与报告本身不一致,则必须(MUST)将该报告视为权威来源。
6. IANA 考量
以下是本文档所讨论的 IANA 考量。
6.1. 报文头字段
以下是根据 [RFC3864] 的互联网编号分配局(IANA)永久报文头字段注册信息。
| 头部字段名 | 适用协议 | 状态 | 作者/变更控制者 | 规范文档 |
|---|---|---|---|---|
| TLS-Report-Domain | standard | IETF | RFC 8460 | |
| TLS-Report-Submitter | standard | IETF | RFC 8460 |
6.2. 报告类型
本文档为 [RFC6522] 中定义的"multipart/report"顶层媒体类型的 Content-Type 头字段的"report-type"参数创建一个新的注册表。
该注册表名称为"Report Type Registry(报告类型注册表)",更新该注册表的流程将为"Specification Required(需要规范)"[RFC8126]。
该注册表中的条目应包含:
- 被注册的报告类型(report-type);
- 一个或多个可与该报告类型一起使用的已注册媒体类型;
- 包含该注册动作的文档;
- 一条可选注释。
初始条目如下:
| Report-Type | Media Type | Registered By | Comment |
|---|---|---|---|
| tlsrpt | application/tlsrpt+gzip, application/tlsrpt+json | [RFC8460] | 可与本 report-type 一起使用的媒体类型在 [RFC8460] 第 6.4 与 6.5 节中定义 |
| disposition-notification | message/disposition-notification | [RFC8098] 第 10 节 | |
| disposition-notification | message/global-disposition-notification | [RFC6533] 第 6 节 | |
| delivery-status | message/delivery-status | [RFC3464] 第 6.2 节 | |
| delivery-status | message/global-delivery-status | [RFC6533] 第 6 节 |
6.3. +gzip 媒体类型后缀
本文档注册一个新的媒体类型后缀"+gzip"。gzip 格式是一种公共领域、跨平台、可互操作的文件存储与传输格式,在 [RFC1952] 中规范;它支持压缩,并被多种文件格式用作底层表示。媒体类型"application/gzip"已为这类文件注册。后缀"+gzip"可以与任何其表示遵循为"application/gzip"所建立之表示的媒体类型一起使用。用于媒体类型的结构化语法后缀的注册表如下:
类型名称:gzip 文件存储与传输格式。
后缀:+gzip
参考: [RFC1952] [RFC6713]
编码考量:gzip 是一种二进制编码。
片段标识符考量:为 +gzip 指定的片段标识符的语法与语义应当(SHOULD)与为"application/gzip"所指定的相同。(在本文档发布时,尚未为"application/gzip"定义片段标识语法。)针对特定"xxx/yyy+gzip"的片段标识符的语法与语义应当按如下方式处理:
- 对于在 +gzip 中定义、且片段标识符按照 +gzip 规则解析的情况,按 +gzip 中所规定处理。
- 对于在 +gzip 中定义、但片段标识符不按 +gzip 规则解析的情况,按"xxx/yyy+gzip"中所规定处理。
- 对于未在 +gzip 中定义的情况,按"xxx/yyy+gzip"中所规定处理。
互操作性考量:N/A
安全考量:gzip 格式不提供机密性保护。完整性保护由 Adler-32 校验和提供,它并非密码学意义上强健。另见 [RFC6713] 的安全考量。每个以 +gzip 后缀注册的独立媒体类型可能有额外的安全考量。此外,gzip 对象可以包含多个文件及关联路径。在提取文件时,必须对文件路径进行验证;否则恶意文件路径可能导致提取程序覆盖应用程序或系统文件。
联系:art@ietf.org
作者/变更控制者:互联网工程任务组(iesg@ietf.org)。
6.4. application/tlsrpt+json 媒体类型
本文档注册多个媒体类型,从下表 1 开始。
| Type | Subtype | File Ext | Specification |
|---|---|---|---|
| application | tlsrpt+json | .json | 第 5.3 节 |
表 1:SMTP TLS 报告媒体类型
类型名称:application
子类型名称:tlsrpt+json
必需参数:N/A
可选参数:N/A
编码考量:与为"application/json"媒体类型所指定的编码考量相同。参见 [RFC7493]。
安全考量:与 SMTP TLS 报告相关的安全考量在第 7 节讨论。
互操作性考量:本文档规定了合规消息的格式及其解释。
发布规范:RFC 8460 第 5.3 节。
使用此媒体类型的应用:邮件用户代理(MUA)与邮件传输代理。
附加信息:
- 该类型的废弃别名:N/A
- 魔数(Magic number):N/A
- 文件扩展名:".json"
- Macintosh 文件类型代码:N/A
进一步联系的姓名与电子邮件地址:参见"作者地址"一节。
预期用途:COMMON
使用限制:N/A
作者:参见"作者地址"一节。
变更控制者:互联网工程任务组(iesg@ietf.org)。
6.5. application/tlsrpt+gzip 媒体类型
| Type | Subtype | File Ext | Specification |
|---|---|---|---|
| application | tlsrpt+gzip | .gz | 第 5.3 节 |
表 2:SMTP TLS 报告媒体类型
类型名称:application
子类型名称:tlsrpt+gzip
必需参数:N/A
可选参数:N/A
编码考量:二进制
安全考量:与 SMTP TLS 报告相关的安全考量在第 7 节讨论。与 gzip 压缩相关的安全考量在 RFC 6713 中讨论。
互操作性考量:本文档规定了合规消息的格式及其解释。
发布规范:RFC 8460 第 5.3 节。
使用此媒体类型的应用:邮件用户代理(MUA)与邮件传输代理。
附加信息:
- 该类型的废弃别名:N/A
- 魔数(Magic number):前两个字节为 0x1f、0x8b。
- 文件扩展名:".gz"
- Macintosh 文件类型代码:N/A
进一步联系的姓名与电子邮件地址:参见"作者地址"一节。
预期用途:COMMON
使用限制:N/A
作者:参见"作者地址"一节。
变更控制者:互联网工程任务组(iesg@ietf.org)。
6.6. STARTTLS 验证结果类型
本文档创建一个新注册表"STARTTLS Validation Result Types(STARTTLS 验证结果类型)"。该注册表的初始条目如下:
| Result Type | Description |
|---|---|
| starttls-not-supported | 第 4.3 节 |
| certificate-host-mismatch | 第 4.3 节 |
| certificate-expired | 第 4.3 节 |
| tlsa-invalid | 第 4.3 节 |
| dnssec-invalid | 第 4.3 节 |
| dane-required | 第 4.3 节 |
| certificate-not-trusted | 第 4.3 节 |
| sts-policy-invalid | 第 4.3 节 |
| sts-webpki-invalid | 第 4.3 节 |
| validation-failure | 第 4.3 节 |
| sts-policy-fetch-error | 第 4.3 节 |
上述条目在第 4.3 节"结果类型"中描述。可以使用"Expert Review(专家评审)"这一 IANA 注册策略向该注册表添加新结果类型。
7. 安全考量
SMTP TLS 报告提供了对支 STARTTLS 的主机之间邮件被误配置或遭到拦截/篡改的可见性。这一报告信道的存在带来了若干安全风险:
- 聚合报告 URI(rua)端点的洪泛:攻击者可能用过量的报告流量淹没该端点,阻止接收域接受额外的报告。此类拒绝服务攻击将限制对 STARTTLS 失败的可见性,使接收域对正在进行的攻击视而不见。
- 不受信任的内容:攻击者可能将恶意代码注入报告中,利用接收域报告处理系统中的任何漏洞。建议实现者采取措施,避免对报告内容进行评估。
- 报告嗅探:攻击者可能创建一条伪造的 TLSRPT 记录,以接收其并不拥有的某个域的统计信息。由于一个能够投毒 DNS 的攻击者本就已经能够接收 SMTP 连接计数(并且,在缺少 DANE 或 MTA-STS 策略的情况下,还能接收实际的 SMTP 消息载荷),这并不构成重大的新漏洞。
- 提交报告时忽略 HTTPS 验证:当报告良性误配置时,一个配置错误的 SMTP 服务器也可能意味着一个配置错误的 HTTPS 服务器;因此,要求报告端点具备 HTTPS 有效性的报告方可能未能就此类误配置向管理员告警。相反,在实际攻击发生时,一个希望制造报告缺口且能够拦截 HTTPS 报告的攻击者,同样可以轻易地仅仅阻止 TLSRPT TXT 记录的解析,或阻止到 HTTPS 端点的 TCP 会话建立。此外,这样一个中间人攻击者仅凭被动观察,就几乎可以发现报告中暴露的大部分或全部元数据。因此,我们认为未能就误配置投递报告的风险,超过了攻击者拦截报告的风险。
- 报告作为 DDoS:TLSRPT 允许指定位于策略域授权范围之外的报告目的地,这使得域可以将报告处理委托给合作组织。然而,一个控制策略域 DNS 的攻击者同样可以利用此机制将报告导向一个不知情的受害者,用过量的报告淹没该受害者。DMARC [RFC7489] 定义了一种验证委托的解决方案以避免此类攻击;不过,对 DMARC 而言这种需求更大,因为 DMARC 允许攻击者通过向无辜第三方发送邮件(从而触发该第三方发往目标的报告)来触发发往目标的报告。而在 TLSRPT 的情况下,攻击者必须诱导第三方主动向攻击者发送邮件,才能触发该第三方发往受害者的报告;这降低了此类攻击的风险,也降低了对验证机制的需求。
最后,由于 TLSRPT 旨在帮助管理员发现针对传输层加密的中间人攻击,包括那些旨在通过降级机会性加密(或在 MTA-STS 的情况下阻止发现新 MTA-STS 策略)来挫败加密连接协商的攻击,我们还必须考虑这样一种风险:一个能够引发此类降级攻击的对手,同样能够阻止对 TLSRPT TXT 记录的发现(从而阻止对成功降级攻击的发现)。因此,建议管理员部署具有较大 TTL 的 TLSRPT TXT 记录(缩小针对该记录 DNS 解析成功施放瞬时攻击的窗口),或者在部署区域上部署 DNSSEC。
8. 隐私考量
MTA 通常被认为是公开可知的;然而,这些 MTA 的内部配置方式及其用户可能并不那么公开。应当指出,向接收站点提供关于 TLS 失败的信息,可能泄露关于发送方配置、甚至关于发送方自身的信息。例如,发送报告可能披露发送方所使用的 TLS 实现,因为无法协商会话可能是两种实现之间已知的兼容性问题。如果用户群体中或某些地区流行某种罕见的 TLS 实现,这可能会间接泄露关于报告方操作系统甚至地区的信息。
9. 参考文献
9.1. 规范性参考文献
- [RFC1952] Deutsch, P.,《GZIP 文件格式规范 4.3 版》,RFC 1952,DOI 10.17487/RFC1952,1996 年 5 月,<https://www.rfc-editor.org/info/rfc1952>。
- [RFC2119] Bradner, S.,《用于 RFC 中指示要求等级的关键词》,BCP 14,RFC 2119,DOI 10.17487/RFC2119,1997 年 3 月,<https://www.rfc-editor.org/info/rfc2119>。
- [RFC3339] Klyne, G. 与 C. Newman,《互联网上的日期与时间:时间戳》,RFC 3339,DOI 10.17487/RFC3339,2002 年 7 月,<https://www.rfc-editor.org/info/rfc3339>。
- [RFC3492] Costello, A.,《Punycode:应用中国际化域名的 Unicode 引导字符串编码(IDNA)》,RFC 3492,DOI 10.17487/RFC3492,2003 年 3 月,<https://www.rfc-editor.org/info/rfc3492>。
- [RFC3986] Berners-Lee, T.、Fielding, R. 与 L. Masinter,《统一资源标识符(URI):通用语法》,STD 66,RFC 3986,DOI 10.17487/RFC3986,2005 年 1 月,<https://www.rfc-editor.org/info/rfc3986>。
- [RFC5234] Crocker, D., Ed. 与 P. Overell,《用于语法规范化的增强型 BNF(ABNF)》,STD 68,RFC 5234,DOI 10.17487/RFC5234,2008 年 1 月,<https://www.rfc-editor.org/info/rfc5234>。
- [RFC5280] Cooper, D.、Santesson, S.、Farrell, S.、Boeyen, S.、Housley, R. 与 W. Polk,《互联网 X.509 公钥基础设施证书与证书撤销列表(CRL)概要》,RFC 5280,DOI 10.17487/RFC5280,2008 年 5 月,<https://www.rfc-editor.org/info/rfc5280>。
- [RFC5321] Klensin, J.,《简单邮件传输协议(SMTP)》,RFC 5321,DOI 10.17487/RFC5321,2008 年 10 月,<https://www.rfc-editor.org/info/rfc5321>。
- [RFC5322] Resnick, P., Ed.,《互联网报文格式》,RFC 5322,DOI 10.17487/RFC5322,2008 年 10 月,<https://www.rfc-editor.org/info/rfc5322>。
- [RFC5891] Klensin, J.,《应用中的国际化域名(IDNA):协议》,RFC 5891,DOI 10.17487/RFC5891,2010 年 8 月,<https://www.rfc-editor.org/info/rfc5891>。
- [RFC5952] Kawamura, S. 与 M. Kawashima,《IPv6 地址文本表示的建议》,RFC 5952,DOI 10.17487/RFC5952,2010 年 8 月,<https://www.rfc-editor.org/info/rfc5952>。
- [RFC6068] Duerst, M.、Masinter, L. 与 J. Zawinski,《『mailto』URI 方案》,RFC 6068,DOI 10.17487/RFC6068,2010 年 10 月,<https://www.rfc-editor.org/info/rfc6068>。
- [RFC6376] Crocker, D., Ed.、Hansen, T., Ed. 与 M. Kucherawy, Ed.,《DomainKeys Identified Mail(DKIM)签名》,STD 76,RFC 6376,DOI 10.17487/RFC6376,2011 年 9 月,<https://www.rfc-editor.org/info/rfc6376>。
- [RFC6522] Kucherawy, M., Ed.,《用于报告邮件系统管理消息的 Multipart/Report 媒体类型》,STD 73,RFC 6522,DOI 10.17487/RFC6522,2012 年 1 月,<https://www.rfc-editor.org/info/rfc6522>。
- [RFC6698] Hoffman, P. 与 J. Schlyter,《基于 DNS 的命名实体认证(DANE)传输层安全(TLS)协议:TLSA》,RFC 6698,DOI 10.17487/RFC6698,2012 年 8 月,<https://www.rfc-editor.org/info/rfc6698>。
- [RFC6713] Levine, J.,《『application/zlib』与『application/gzip』媒体类型》,RFC 6713,DOI 10.17487/RFC6713,2012 年 8 月,<https://www.rfc-editor.org/info/rfc6713>。
- [RFC7208] Kitterman, S.,《用于授权在电子邮件中使用域的发件人策略框架(SPF)第 1 版》,RFC 7208,DOI 10.17487/RFC7208,2014 年 4 月,<https://www.rfc-editor.org/info/rfc7208>。
- [RFC7231] Fielding, R., Ed. 与 J. Reschke, Ed.,《超文本传输协议(HTTP/1.1):语义与内容》,RFC 7231,DOI 10.17487/RFC7231,2014 年 6 月,<https://www.rfc-editor.org/info/rfc7231>。
- [RFC7405] Kyzivat, P.,《ABNF 中的大小写敏感字符串支持》,RFC 7405,DOI 10.17487/RFC7405,2014 年 12 月,<https://www.rfc-editor.org/info/rfc7405>。
- [RFC7493] Bray, T., Ed.,《I-JSON 消息格式》,RFC 7493,DOI 10.17487/RFC7493,2015 年 3 月,<https://www.rfc-editor.org/info/rfc7493>。
- [RFC7671] Dukhovni, V. 与 W. Hardaker,《基于 DNS 的命名实体认证(DANE)协议:更新与运营指南》,RFC 7671,DOI 10.17487/RFC7671,2015 年 10 月,<https://www.rfc-editor.org/info/rfc7671>。
- [RFC7672] Dukhovni, V. 与 W. Hardaker,《通过机会性基于 DNS 的命名实体认证(DANE)传输层安全(TLS)实现 SMTP 安全》,RFC 7672,DOI 10.17487/RFC7672,2015 年 10 月,<https://www.rfc-editor.org/info/rfc7672>。
- [RFC8174] Leiba, B.,《RFC 2119 关键词中大小写模糊性问题》,BCP 14,RFC 8174,DOI 10.17487/RFC8174,2017 年 5 月,<https://www.rfc-editor.org/info/rfc8174>。
- [RFC8461] Margolis, D.、Risher, M.、Ramakrishnan, B.、Brotman, A. 与 J. Jones,《SMTP MTA 严格传输安全(MTA-STS)》,RFC 8461,DOI 10.17487/RFC8461,2018 年 9 月,<https://www.rfc-editor.org/info/rfc8461>。
9.2. 资料性参考文献
- [RFC3207] Hoffman, P.,《基于传输层安全的安全 SMTP 之 SMTP 服务扩展》,RFC 3207,DOI 10.17487/RFC3207,2002 年 2 月,<https://www.rfc-editor.org/info/rfc3207>。
- [RFC3464] Moore, K. 与 G. Vaudreuil,《用于投递状态通知的可扩展报文格式》,RFC 3464,DOI 10.17487/RFC3464,2003 年 1 月,<https://www.rfc-editor.org/info/rfc3464>。
- [RFC3501] Crispin, M.,《互联网消息访问协议 - 第 4rev1 版(IMAP4rev1)》,RFC 3501,DOI 10.17487/RFC3501,2003 年 3 月,<https://www.rfc-editor.org/info/rfc3501>。
- [RFC3864] Klyne, G.、Nottingham, M. 与 J. Mogul,《报文头字段的注册流程》,BCP 90,RFC 3864,DOI 10.17487/RFC3864,2004 年 9 月,<https://www.rfc-editor.org/info/rfc3864>。
- [RFC6533] Hansen, T., Ed.、Newman, C. 与 A. Melnikov,《国际化的投递状态与处置通知》,RFC 6533,DOI 10.17487/RFC6533,2012 年 2 月,<https://www.rfc-editor.org/info/rfc6533>。
- [RFC7435] Dukhovni, V.,《机会性安全:多数时候的某种保护》,RFC 7435,DOI 10.17487/RFC7435,2014 年 12 月,<https://www.rfc-editor.org/info/rfc7435>。
- [RFC7469] Evans, C.、Palmer, C. 与 R. Sleevi,《HTTP 的公钥固定扩展》,RFC 7469,DOI 10.17487/RFC7469,2015 年 4 月,<https://www.rfc-editor.org/info/rfc7469>。
- [RFC7489] Kucherawy, M., Ed. 与 E. Zwicky, Ed.,《基于域的消息认证、报告与一致性(DMARC)》,RFC 7489,DOI 10.17487/RFC7489,2015 年 3 月,<https://www.rfc-editor.org/info/rfc7489>。
- [RFC8098] Hansen, T., Ed. 与 A. Melnikov, Ed.,《消息处置通知》,STD 85,RFC 8098,DOI 10.17487/RFC8098,2017 年 2 月,<https://www.rfc-editor.org/info/rfc8098>。
- [RFC8126] Cotton, M.、Leiba, B. 与 T. Narten,《在 RFC 中编写 IANA 考量节的指南》,BCP 26,RFC 8126,DOI 10.17487/RFC8126,2017 年 6 月,<https://www.rfc-editor.org/info/rfc8126>。
附录 A. 报告策略示例
A.1. 使用 MAILTO 报告
_smtp._tls.mail.example.com. IN TXT \
"v=TLSRPTv1;rua=mailto:reports@example.com"
A.2. 使用 HTTPS 报告
_smtp._tls.mail.example.com. IN TXT \
"v=TLSRPTv1; \
rua=https://reporting.example.com/v1/tlsrpt"
附录 B. 示例 JSON 报告
下面是一份来自 Company-X 发往 Company-Y 的示例 JSON 报告,其中 100 次会话尝试连接 Company-Y 的、证书已过期的服务器,200 次会话尝试连接未能成功响应"STARTTLS"命令的 Company-Y 服务器。此外,还有 3 次会话因"X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED"而失败。
{
"organization-name": "Company-X",
"date-range": {
"start-datetime": "2016-04-01T00:00:00Z",
"end-datetime": "2016-04-01T23:59:59Z"
},
"contact-info": "sts-reporting@company-x.example",
"report-id": "5065427c-23d3-47ca-b6e0-946ea0e8c4be",
"policies": [{
"policy": {
"policy-type": "sts",
"policy-string": ["version: STSv1","mode: testing",
"mx: *.mail.company-y.example","max_age: 86400"],
"policy-domain": "company-y.example",
"mx-host": "*.mail.company-y.example"
},
"summary": {
"total-successful-session-count": 5326,
"total-failure-session-count": 303
},
"failure-details": [{
"result-type": "certificate-expired",
"sending-mta-ip": "2001:db8:abcd:0012::1",
"receiving-mx-hostname": "mx1.mail.company-y.example",
"failed-session-count": 100
}, {
"result-type": "starttls-not-supported",
"sending-mta-ip": "2001:db8:abcd:0013::1",
"receiving-mx-hostname": "mx2.mail.company-y.example",
"receiving-ip": "203.0.113.56",
"failed-session-count": 200,
"additional-information": "https://reports.company-x.example/
report_info ? id = 5065427 c - 23 d3# StarttlsNotSupported "
}, {
"result-type": "validation-failure",
"sending-mta-ip": "198.51.100.62",
"receiving-ip": "203.0.113.58",
"receiving-mx-hostname": "mx-backup.mail.company-y.example",
"failed-session-count": 3,
"failure-reason-code": "X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED"
}]
}]
}
贡献者
Laetitia Baudoin
Google, Inc.
lbaudoin@google.com
作者地址
Daniel Margolis
Google, Inc.
Email: dmargolis@google.com
Alexander Brotman
Comcast, Inc.
Email: alex_brotman@comcast.com
Binu Ramakrishnan
Oath, Inc.
Email: prbinu@yahoo.com
Janet Jones
Microsoft, Inc.
Email: janet.jones@microsoft.com
Mark Risher
Google, Inc.
Email: risher@google.com
