draft-ietf-uta-smtp-tlsrpt-23.txt | rfc8460.txt | |||
---|---|---|---|---|
Using TLS in Applications D. Margolis | Internet Engineering Task Force (IETF) D. Margolis | |||
Internet-Draft Google, Inc | Request for Comments: 8460 Google, Inc. | |||
Intended status: Standards Track A. Brotman | Category: Standards Track A. Brotman | |||
Expires: December 16, 2018 Comcast, Inc | ISSN: 2070-1721 Comcast, Inc. | |||
B. Ramakrishnan | B. Ramakrishnan | |||
Yahoo!, Inc | Oath, Inc. | |||
J. Jones | J. Jones | |||
Microsoft, Inc | Microsoft, Inc. | |||
M. Risher | M. Risher | |||
Google, Inc | Google, Inc. | |||
June 14, 2018 | September 2018 | |||
SMTP TLS Reporting | SMTP TLS Reporting | |||
draft-ietf-uta-smtp-tlsrpt-23 | ||||
Abstract | Abstract | |||
A number of protocols exist for establishing encrypted channels | A number of protocols exist for establishing encrypted channels | |||
between SMTP Mail Transfer Agents, including STARTTLS, DANE TLSA, and | between SMTP Mail Transfer Agents (MTAs), including STARTTLS, DNS- | |||
MTA-STS. These protocols can fail due to misconfiguration or active | Based Authentication of Named Entities (DANE) TLSA, and MTA Strict | |||
attack, leading to undelivered messages or delivery over unencrypted | Transport Security (MTA-STS). These protocols can fail due to | |||
or unauthenticated channels. This document describes a reporting | misconfiguration or active attack, leading to undelivered messages or | |||
mechanism and format by which sending systems can share statistics | delivery over unencrypted or unauthenticated channels. This document | |||
and specific information about potential failures with recipient | describes a reporting mechanism and format by which sending systems | |||
domains. Recipient domains can then use this information to both | can share statistics and specific information about potential | |||
detect potential attacks and diagnose unintentional | failures with recipient domains. Recipient domains can then use this | |||
misconfigurations. | information to both detect potential attacks and diagnose | |||
unintentional misconfigurations. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on December 16, 2018. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc8460. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
2. Related Technologies . . . . . . . . . . . . . . . . . . . . 4 | 2. Related Technologies . . . . . . . . . . . . . . . . . . . . 5 | |||
3. Reporting Policy . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Reporting Policy . . . . . . . . . . . . . . . . . . . . . . 6 | |||
3.1. Example Reporting Policy . . . . . . . . . . . . . . . . 7 | 3.1. Example Reporting Policy . . . . . . . . . . . . . . . . 8 | |||
3.1.1. Report using MAILTO . . . . . . . . . . . . . . . . . 7 | 3.1.1. Report Using MAILTO . . . . . . . . . . . . . . . . . 8 | |||
3.1.2. Report using HTTPS . . . . . . . . . . . . . . . . . 7 | 3.1.2. Report Using HTTPS . . . . . . . . . . . . . . . . . 8 | |||
4. Reporting Schema . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Reporting Schema . . . . . . . . . . . . . . . . . . . . . . 8 | |||
4.1. Report Time-frame . . . . . . . . . . . . . . . . . . . . 8 | 4.1. Report Time Frame . . . . . . . . . . . . . . . . . . . . 9 | |||
4.2. Delivery Summary . . . . . . . . . . . . . . . . . . . . 9 | 4.2. Delivery Summary . . . . . . . . . . . . . . . . . . . . 10 | |||
4.2.1. Success Count . . . . . . . . . . . . . . . . . . . . 9 | 4.2.1. Success Count . . . . . . . . . . . . . . . . . . . . 10 | |||
4.2.2. Failure Count . . . . . . . . . . . . . . . . . . . . 9 | 4.2.2. Failure Count . . . . . . . . . . . . . . . . . . . . 10 | |||
4.3. Result Types . . . . . . . . . . . . . . . . . . . . . . 9 | 4.3. Result Types . . . . . . . . . . . . . . . . . . . . . . 10 | |||
4.3.1. Negotiation Failures . . . . . . . . . . . . . . . . 10 | 4.3.1. Negotiation Failures . . . . . . . . . . . . . . . . 10 | |||
4.3.2. Policy Failures . . . . . . . . . . . . . . . . . . . 10 | 4.3.2. Policy Failures . . . . . . . . . . . . . . . . . . . 11 | |||
4.3.3. General Failures . . . . . . . . . . . . . . . . . . 11 | 4.3.3. General Failures . . . . . . . . . . . . . . . . . . 11 | |||
4.3.4. Transient Failures . . . . . . . . . . . . . . . . . 11 | 4.3.4. Transient Failures . . . . . . . . . . . . . . . . . 12 | |||
4.4. JSON Report Schema . . . . . . . . . . . . . . . . . . . 11 | 4.4. JSON Report Schema . . . . . . . . . . . . . . . . . . . 12 | |||
4.5. Policy Samples . . . . . . . . . . . . . . . . . . . . . 14 | 4.5. Policy Samples . . . . . . . . . . . . . . . . . . . . . 15 | |||
5. Report Delivery . . . . . . . . . . . . . . . . . . . . . . . 15 | 5. Report Delivery . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
5.1. Report Filename . . . . . . . . . . . . . . . . . . . . . 15 | 5.1. Report Filename . . . . . . . . . . . . . . . . . . . . . 16 | |||
5.2. Compression . . . . . . . . . . . . . . . . . . . . . . . 16 | 5.2. Compression . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
5.3. Email Transport . . . . . . . . . . . . . . . . . . . . . 16 | 5.3. Email Transport . . . . . . . . . . . . . . . . . . . . . 17 | |||
5.3.1. Example Report . . . . . . . . . . . . . . . . . . . 17 | 5.3.1. Example Report . . . . . . . . . . . . . . . . . . . 19 | |||
5.4. HTTPS Transport . . . . . . . . . . . . . . . . . . . . . 18 | 5.4. HTTPS Transport . . . . . . . . . . . . . . . . . . . . . 19 | |||
5.5. Delivery Retry . . . . . . . . . . . . . . . . . . . . . 19 | 5.5. Delivery Retry . . . . . . . . . . . . . . . . . . . . . 20 | |||
5.6. Metadata Variances . . . . . . . . . . . . . . . . . . . 19 | 5.6. Metadata Variances . . . . . . . . . . . . . . . . . . . 20 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | |||
6.1. Message headers . . . . . . . . . . . . . . . . . . . . . 19 | 6.1. Message Headers . . . . . . . . . . . . . . . . . . . . . 20 | |||
6.2. Report Type . . . . . . . . . . . . . . . . . . . . . . . 19 | 6.2. Report Type . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
6.3. +gzip Media Type Suffix . . . . . . . . . . . . . . . . . 20 | 6.3. +gzip Media Type Suffix . . . . . . . . . . . . . . . . . 22 | |||
6.4. application/tlsrpt+json Media Type . . . . . . . . . . . 21 | 6.4. application/tlsrpt+json Media Type . . . . . . . . . . . 23 | |||
6.5. application/tlsrpt+gzip Media Type . . . . . . . . . . . 23 | 6.5. application/tlsrpt+gzip Media Type . . . . . . . . . . . 24 | |||
6.6. STARTTLS Validation Result Types . . . . . . . . . . . . 24 | 6.6. STARTTLS Validation Result Types . . . . . . . . . . . . 25 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 26 | |||
8. Privacy Considerations . . . . . . . . . . . . . . . . . . . 26 | 8. Privacy Considerations . . . . . . . . . . . . . . . . . . . 27 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 26 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 28 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 28 | 9.2. Informative References . . . . . . . . . . . . . . . . . 30 | |||
9.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | Appendix A. Example Reporting Policy . . . . . . . . . . . . . . 32 | |||
Appendix A. Example Reporting Policy . . . . . . . . . . . . . . 30 | A.1. Report Using MAILTO . . . . . . . . . . . . . . . . . . . 32 | |||
A.1. Report using MAILTO . . . . . . . . . . . . . . . . . . . 30 | A.2. Report Using HTTPS . . . . . . . . . . . . . . . . . . . 32 | |||
A.2. Report using HTTPS . . . . . . . . . . . . . . . . . . . 30 | Appendix B. Example JSON Report . . . . . . . . . . . . . . . . 32 | |||
Appendix B. Example JSON Report . . . . . . . . . . . . . . . . 30 | Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 32 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | |||
1. Introduction | 1. Introduction | |||
The STARTTLS extension to SMTP [RFC3207] allows SMTP clients and | The STARTTLS extension to SMTP [RFC3207] allows SMTP clients and | |||
hosts to establish secure SMTP sessions over TLS. The protocol | hosts to establish secure SMTP sessions over TLS. The protocol | |||
design uses an approach that has come to be known as "Opportunistic | design uses an approach that has come to be known as "Opportunistic | |||
Security" (OS) [RFC7435]. This method maintains interoperability | Security" (OS) [RFC7435]. This method maintains interoperability | |||
with clients that do not support STARTTLS, but means that any | with clients that do not support STARTTLS, but it means that any | |||
attacker could potentially eavesdrop on a session. An attacker could | attacker could potentially eavesdrop on a session. An attacker could | |||
perform a downgrade or interception attack by deleting parts of the | perform a downgrade or interception attack by deleting parts of the | |||
SMTP session (such as the "250 STARTTLS" response) or redirect the | SMTP session (such as the "250 STARTTLS" response) or redirect the | |||
entire SMTP session (perhaps by overwriting the resolved MX record of | entire SMTP session (perhaps by overwriting the resolved MX record of | |||
the delivery domain). | the delivery domain). | |||
Because such "downgrade attacks" are not necessarily apparent to the | Because such "downgrade attacks" are not necessarily apparent to the | |||
receiving MTA, this document defines a mechanism for sending domains | receiving MTA, this document defines a mechanism for sending domains | |||
to report on failures at multiple stages of the MTA-to-MTA | to report on failures at multiple stages of the MTA-to-MTA | |||
conversation. | conversation. | |||
Recipient domains may also use the mechanisms defined by MTA-STS | Recipient domains may also use the mechanisms defined by MTA-STS | |||
[I-D.ietf-uta-mta-sts] or DANE [RFC6698] to publish additional | [RFC8461] or DANE [RFC6698] to publish additional encryption and | |||
encryption and authentication requirements; this document defines a | authentication requirements; this document defines a mechanism for | |||
mechanism for sending domains that are compatible with MTA-STS or | sending domains that are compatible with MTA-STS or DANE to share | |||
DANE to share success and failure statistics with recipient domains. | success and failure statistics with recipient domains. | |||
Specifically, this document defines a reporting schema that covers | Specifically, this document defines a reporting schema that covers | |||
failures in routing, DNS resolution, STARTTLS negotiation, and both | failures in routing, DNS resolution, and STARTTLS negotiation; policy | |||
DANE [RFC6698] and MTA-STS [I-D.ietf-uta-mta-sts] policy validation | validation errors for both DANE [RFC6698] and MTA-STS [RFC8461]; and | |||
errors, and a standard TXT record that recipient domains can use to | a standard TXT record that recipient domains can use to indicate | |||
indicate where reports in this format should be sent. The report can | where reports in this format should be sent. The report can also | |||
also serve as a heartbeat that systems are successfully negotiating | serve as a heartbeat to indicate that systems are successfully | |||
TLS during sessions as expected. | negotiating TLS during sessions as expected. | |||
This document is intended as a companion to the specification for | This document is intended as a companion to the specification for | |||
SMTP MTA Strict Transport Security [I-D.ietf-uta-mta-sts], as well as | SMTP MTA-STS [RFC8461] and adds reporting abilities for those | |||
adds reporting abilities for those implementing DANE [RFC7672]. | implementing DANE [RFC7672]. | |||
1.1. Terminology | 1.1. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
[BCP 14] [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
We also define the following terms for further use in this document: | We also define the following terms for further use in this document: | |||
o MTA-STS Policy: A mechanism by which administrators can specify | o MTA-STS Policy: A mechanism by which administrators can specify | |||
the expected TLS availability, presented identity, and desired | the expected TLS availability, presented identity, and desired | |||
actions for a given email recipient domain. MTA-STS is defined in | actions for a given email recipient domain. MTA-STS is defined in | |||
[I-D.ietf-uta-mta-sts]. | [RFC8461]. | |||
o DANE Policy: A mechanism by which administrators can use DNSSEC to | o DANE Policy: A mechanism by which administrators can use DNSSEC to | |||
commit an MTA to support STARTTLS and to publish criteria to be | commit an MTA to support STARTTLS and to publish criteria to be | |||
used to validate its presented certificates. DANE for SMTP is | used to validate its presented certificates. DANE for SMTP is | |||
defined in [RFC7672], with the base specification in [RFC6698] | defined in [RFC7672], with the base specification defined in | |||
(updated in [RFC7671]. | [RFC6698] (and updated by [RFC7671]). | |||
o TLSRPT Policy: A policy specifying the endpoint to which sending | o TLSRPT (TLS Reporting) Policy: A policy specifying the endpoint to | |||
MTAs should deliver reports. | which Sending MTAs should deliver reports. | |||
o Policy Domain: The domain against which an MTA-STS or DANE Policy | o Policy Domain: The domain against which a TLSRPT, an MTA-STS, or a | |||
is defined. For MTA-STS this is typically the same as the | DANE policy is defined. For TLSRPT and MTA-STS, this is typically | |||
envelope recipient domain [RFC5321], but when mail is routed to a | the same as the envelope recipient domain [RFC5321], but when mail | |||
"smarthost" gateway by local policy, the "smarthost" domain name | is routed to a "smarthost" gateway by local policy, the | |||
is used instead. For DANE the Policy Domain is the "TLSA base | "smarthost" domain name is used instead. For DANE, the Policy | |||
domain" of the receiving SMTP server as described in RFC7672 [1] | Domain is the "TLSA base domain" of the receiving SMTP server as | |||
and RFC6698 [2]. | described in Section 2.2.3 of RFC 7672 and Section 3 of RFC 6698. | |||
o Sending MTA: The MTA initiating the relay of an email message. | o Sending MTA: The MTA initiating the relay of an email message. | |||
o Aggregate Report URI (rua): A comma-separated list of locations | o Aggregate Report URI (rua): A comma-separated list of locations | |||
where the report is to be submitted. | where the report is to be submitted. | |||
o ABNF: Augmented Backus-Naur Form, a syntax for formally specifying | ||||
syntax, defined in [RFC5234] and [RFC7405]. | ||||
2. Related Technologies | 2. Related Technologies | |||
o This document is intended as a companion to the specification for | o This document is intended as a companion to the specification for | |||
SMTP MTA Strict Transport Security [I-D.ietf-uta-mta-sts]. | SMTP MTA-STS [RFC8461]. | |||
o SMTP-TLSRPT defines a mechanism for sending domains that are | o SMTP TLSRPT defines a mechanism for sending domains that are | |||
compatible with MTA-STS or DANE to share success and failure | compatible with MTA-STS or DANE to share success and failure | |||
statistics with recipient domains. DANE is defined in [RFC6698] | statistics with recipient domains. DANE is defined in [RFC6698], | |||
and MTA-STS is defined in [I-D.ietf-uta-mta-sts]. | and MTA-STS is defined in [RFC8461]. | |||
3. Reporting Policy | 3. Reporting Policy | |||
A domain publishes a record to its DNS indicating that it wishes to | A domain publishes a record to its DNS indicating that it wishes to | |||
receive reports. These SMTP TLSRPT policies are distributed via DNS | receive reports. These SMTP TLSRPT policies are distributed via DNS | |||
from the Policy Domain's zone, as TXT records (similar to DMARC | from the Policy Domain's zone as TXT records (similar to Domain-based | |||
policies) under the name "_smtp._tls". For example, for the Policy | Message Authentication, Reporting, and Conformance (DMARC) policies) | |||
Domain "example.com", the recipient's TLSRPT policy can be retrieved | under the name "_smtp._tls". For example, for the Policy Domain | |||
from "_smtp._tls.example.com". | "example.com", the recipient's TLSRPT policy can be retrieved from | |||
"_smtp._tls.example.com". | ||||
Policies consist of the following directives: | Policies consist of the following directives: | |||
o "v": This document defines version 1 of TLSRPT, for which this | o "v": This document defines version 1 of TLSRPT, for which this | |||
value MUST be equal to "TLSRPTv1". Other versions may be defined | value MUST be equal to "TLSRPTv1". Other versions may be defined | |||
in later documents. | in later documents. | |||
o "rua": A URI specifying the endpoint to which aggregate | o "rua": A URI specifying the endpoint to which aggregate | |||
information about policy validation results should be sent (see | information about policy validation results should be sent (see | |||
Section 4, "Reporting Schema", for more information). Two URI | Section 4, "Reporting Schema", for more information). Two URI | |||
schemes are supported: "mailto" and "https". As with DMARC | schemes are supported: "mailto" and "https". As with DMARC | |||
[RFC7489], the policy domain can specify a comma-separated list of | [RFC7489], the Policy Domain can specify a comma-separated list of | |||
URIs. | URIs. | |||
o In the case of "https", reports should be submitted via POST | o In the case of "https", reports should be submitted via POST | |||
([RFC7231]) to the specified URI. Report submitters MAY ignore | [RFC7231] to the specified URI. Report submitters MAY ignore | |||
certificate validation errors when submitting reports via https. | certificate validation errors when submitting reports via HTTPS | |||
POST. | ||||
o In the case of "mailto", reports should be submitted to the | o In the case of "mailto", reports should be submitted to the | |||
specified email address ([RFC6068]). When sending failure reports | specified email address [RFC6068]. When sending failure reports | |||
via SMTP, sending MTAs MUST deliver reports despite any TLS- | via SMTP, Sending MTAs MUST deliver reports despite any TLS- | |||
related failures and SHOULD NOT include this SMTP session in the | related failures and SHOULD NOT include this SMTP session in the | |||
next report. When sending failure reports via HTTPS, sending MTAs | next report. This may mean that the reports are delivered | |||
MAY deliver reports despite any TLS-related faliures. This may | unencrypted. Reports sent via SMTP MUST contain a valid | |||
mean that the reports are delivered in the clear. Reports sent | DomainKeys Identified Mail (DKIM) [RFC6376] signature by the | |||
via SMTP MUST contain a valid DKIM [RFC6376] signature by the | ||||
reporting domain. Reports lacking such a signature MUST be | reporting domain. Reports lacking such a signature MUST be | |||
ignored by the recipient. DKIM signatures must not use the "l=" | ignored by the recipient. DKIM signatures MUST NOT use the "l=" | |||
attribute to limit the body length used in the signature. The | attribute to limit the body length used in the signature. This | |||
DKIM TXT record must contain the appropriate service type | ensures attackers cannot append extraneous or misleading data to a | |||
declaration, "s=tlsrpt", and if not present the receiving system | report without breaking the signature. The DKIM TXT record SHOULD | |||
SHOULD ignore reports signed using this record. | contain the appropriate service type declaration, "s=tlsrpt". If | |||
not present, the receiving system MAY ignore reports lacking that | ||||
service type. | ||||
Sample DKIM record: | ||||
dkim_selector._domainkey.example.com TXT | ||||
"v=DKIM1;k=rsa;s=tlsrpt;p=Mlf4qwSZfase4fa==" | ||||
The formal definition of the "_smtp._tls" TXT record, defined using | The formal definition of the "_smtp._tls" TXT record, defined using | |||
[RFC5234] & [RFC7405], is as follows: | [RFC5234] and [RFC7405], is as follows: | |||
tlsrpt-record = tlsrpt-version 1*(field-delim tlsrpt-field) | tlsrpt-record = tlsrpt-version 1*(field-delim tlsrpt-field) | |||
[field-delim] | [field-delim] | |||
field-delim = *WSP ";" *WSP | field-delim = *WSP ";" *WSP | |||
tlsrpt-field = tlsrpt-rua / ; Note that the | tlsrpt-field = tlsrpt-rua / ; Note that the | |||
tlsrpt-extension ; tlsrpt-rua record is | tlsrpt-extension ; tlsrpt-rua record is | |||
; required. | ; required. | |||
skipping to change at page 6, line 35 ¶ | skipping to change at page 7, line 38 ¶ | |||
tlsrpt-extension = tlsrpt-ext-name "=" tlsrpt-ext-value | tlsrpt-extension = tlsrpt-ext-name "=" tlsrpt-ext-value | |||
tlsrpt-ext-name = (ALPHA / DIGIT) *31(ALPHA / | tlsrpt-ext-name = (ALPHA / DIGIT) *31(ALPHA / | |||
DIGIT / "_" / "-" / ".") | DIGIT / "_" / "-" / ".") | |||
tlsrpt-ext-value = 1*(%x21-3A / %x3C / %x3E-7E) | tlsrpt-ext-value = 1*(%x21-3A / %x3C / %x3E-7E) | |||
; chars excluding "=", ";", SP, and control | ; chars excluding "=", ";", SP, and control | |||
; chars | ; chars | |||
If multiple TXT records for "_smtp._tls" are returned by the | If multiple TXT records for "_smtp._tls" are returned by the | |||
resolver, records which do not begin with "v=TLSRPTv1;" are | resolver, records that do not begin with "v=TLSRPTv1;" are discarded. | |||
discarded. If the number of resulting records is not one, senders | If the number of resulting records is not one, senders MUST assume | |||
MUST assume the recipient domain does not implement TLSRPT. If the | the recipient domain does not implement TLSRPT. If the resulting TXT | |||
resulting TXT record contains multiple strings (as described in | record contains multiple strings (as described in Section 3.3 of | |||
Section 3.1.3 of [RFC4408]), then the record MUST be treated as if | [RFC7208]), then the record MUST be treated as if those strings are | |||
those strings are concatenated together without adding spaces. | concatenated without adding spaces. | |||
The record supports the abillity to declare more than one rua, and if | The record supports the ability to declare more than one rua, and if | |||
there exists more than one, the reporter MAY attempt to deliver to | there exists more than one, the reporter MAY attempt to deliver to | |||
each of the supported rua destinations. A receiver MAY opt to only | each of the supported rua destinations. A receiver MAY opt to only | |||
attempt delivery to one of the endpoints, however the report SHOULD | attempt delivery to one of the endpoints; however, the report SHOULD | |||
NOT be considered successfully delivered until one of the endpoints | NOT be considered successfully delivered until one of the endpoints | |||
accepts delivery of the report. | accepts delivery of the report. | |||
Parsers MUST accept TXT records which are syntactically valid (i.e. | Parsers MUST accept TXT records that are syntactically valid (i.e., | |||
valid key-value pairs separated by semi-colons) and implementing a | valid key/value pairs separated by semicolons) and implement a | |||
superset of this specification, in which case unknown fields SHALL be | superset of this specification, in which case unknown fields SHALL be | |||
ignored. | ignored. | |||
3.1. Example Reporting Policy | 3.1. Example Reporting Policy | |||
3.1.1. Report using MAILTO | 3.1.1. Report Using MAILTO | |||
_smtp._tls.example.com. IN TXT \ | _smtp._tls.example.com. IN TXT \ | |||
"v=TLSRPTv1;rua=mailto:reports@example.com" | "v=TLSRPTv1;rua=mailto:reports@example.com" | |||
3.1.2. Report using HTTPS | 3.1.2. Report Using HTTPS | |||
_smtp._tls.example.com. IN TXT \ | _smtp._tls.example.com. IN TXT \ | |||
"v=TLSRPTv1; \ | "v=TLSRPTv1; \ | |||
rua=https://reporting.example.com/v1/tlsrpt" | rua=https://reporting.example.com/v1/tlsrpt" | |||
4. Reporting Schema | 4. Reporting Schema | |||
The report is composed as a plain text file encoded in the I-JSON | The report is composed as a plaintext file encoded in the Internet | |||
format ([RFC7493]). | JSON (I-JSON) format [RFC7493]. | |||
Aggregate reports contain the following fields: | Aggregate reports contain the following fields: | |||
o Report metadata: | o Report metadata: | |||
* The organization responsible for the report | * The organization responsible for the report | |||
* Contact information for one or more responsible parties for the | * Contact information for one or more responsible parties for the | |||
contents of the report | contents of the report | |||
* A unique identifier for the report | * A unique identifier for the report | |||
* The reporting date range for the report | * The reporting date range for the report | |||
o Policy, consisting of: | o Policy, consisting of: | |||
* One of the following policy types: (1) The MTA-STS policy | * One of the following policy types: (1) the MTA-STS Policy | |||
applied (as a string) (2) The DANE TLSA record applied (as a | applied (as a string), (2) the DANE TLSA record applied (as a | |||
string, with each RR entry of the RRset listed and separated by | string, with each RR entry of the RRset listed and separated by | |||
a semicolon) (3) The literal string "no-policy-found", if | a semicolon), and (3) the literal string "no-policy-found", if | |||
neither a DANE nor MTA-STS policy could be found. | neither a DANE nor MTA-STS Policy could be found. | |||
* The domain for which the policy is applied | * The domain for which the policy is applied | |||
* The MX host | * The MX host | |||
o Aggregate counts, comprising result type, sending MTA IP, | o Aggregate counts, comprising result type, Sending MTA IP, | |||
receiving MTA hostname, session count, and an optional additional | receiving MTA hostname, session count, and an optional additional | |||
information field containing a URI for recipients to review | information field containing a URI for recipients to review | |||
further information on a failure type. | further information on a failure type. | |||
Note that the failure types are non-exclusive; an aggregate report | Note that the failure types are non-exclusive; an aggregate report | |||
may contain overlapping "counts" of failure types when a single send | may contain overlapping "counts" of failure types when a single send | |||
attempt encountered multiple errors. Reporters may report multiple | attempt encountered multiple errors. Reporters may report multiple | |||
applied policies (for example, an MTA-STS policy and a DANE TLSA | applied policies (for example, an MTA-STS Policy and a DANE TLSA | |||
record for the same domain and MX). Because of this, even in the | record for the same domain and MX). Because of this, even in the | |||
case where only a single policy was applied, the "policies" field of | case where only a single policy was applied, the "policies" field of | |||
the report body MUST be an array and not a singular value. | the report body MUST be an array and not a singular value. | |||
In the case of multiple failure types, the "failure-details" array | In the case of multiple failure types, the "failure-details" array | |||
would contain multiple entries. Each entry would have its own set of | would contain multiple entries. Each entry would have its own set of | |||
infomation pertaining to that failure type. | information pertaining to that failure type. | |||
4.1. Report Time-frame | 4.1. Report Time Frame | |||
The report SHOULD cover a full day, from 0000-2400 UTC. This should | The report SHOULD cover a full day, from 00:00-24:00 UTC. This | |||
allow for easier correlation of failure events. To avoid a Denial of | should allow for easier correlation of failure events. To avoid | |||
Service against the system processing the reports, the reports should | unintentionally overloading the system processing the reports, the | |||
be delivered after some delay, perhaps several hours. | reports should be delivered after some delay, perhaps several hours. | |||
As an example, a sending site might want to introduce a random delay | As an example, a sending site might want to introduce a random delay | |||
of up to four hours: | of up to four hours: | |||
func generate_sleep_delay() { | func generate_sleep_delay() { | |||
min_delay = 1 | min_delay = 1 | |||
max_delay = 14400 | max_delay = 14400 | |||
rand = random(min_delay,max_delay) | rand = random(min_delay, max_delay) | |||
return rand | return rand | |||
} | } | |||
func generate_report(policy_domain) { | func generate_report(policy_domain) { | |||
do_rpt_work(policy_domain) | do_rpt_work(policy_domain) | |||
send_rpt(policy_domain) | send_rpt(policy_domain) | |||
} | } | |||
func generate_tlsrpt() { | func generate_tlsrpt() { | |||
sleep(generate_sleep_delay()) | sleep(generate_sleep_delay()) | |||
for policy_domain in list_of_tlsrpt_enabled_domains { | for policy_domain in list_of_tlsrpt_enabled_domains { | |||
generate_report(policy_domain) | generate_report(policy_domain) | |||
} | } | |||
} | } | |||
A sending site might wish to introduce a random delay per destination | ||||
site, up to four hours: | ||||
func generate_sleep_delay() { | ||||
min_delay = 1 | ||||
max_delay = 14400 | ||||
rand = random(min_delay,max_delay) | ||||
return rand | ||||
} | ||||
func generate_report(policy_domain) { | ||||
sleep(generate_sleep_delay()) | ||||
do_rpt_work(policy_domain) | ||||
send_rpt(policy_domain) | ||||
} | ||||
func generate_tlsrpt() { | ||||
for policy_domain in list_of_tlsrpt_enabled_domains { | ||||
generate_report(policy_domain) | ||||
} | ||||
} | ||||
4.2. Delivery Summary | 4.2. Delivery Summary | |||
4.2.1. Success Count | 4.2.1. Success Count | |||
o "total-successful-session-count": This indicates that the sending | o "total-successful-session-count": This indicates that the Sending | |||
MTA was able to successfully negotiate a policy-compliant TLS | MTA was able to successfully negotiate a policy-compliant TLS | |||
connection, and serves to provide a "heartbeat" to receiving | connection and serves to provide a "heartbeat" to receiving | |||
domains that reporting is functional and tabulating correctly. | domains that signifies reporting is functional and tabulating | |||
This field contains an aggregate count of successful connections | correctly. This field contains an aggregate count of successful | |||
for the reporting system. | connections for the reporting system. | |||
4.2.2. Failure Count | 4.2.2. Failure Count | |||
o "total-failure-session-count": This indicates that the sending MTA | o "total-failure-session-count": This indicates that the Sending MTA | |||
was unable to successfully establish a connection with the | was unable to successfully establish a connection with the | |||
receiving platform. Section 4.3, "Result Types", will elaborate | receiving platform. Section 4.3, "Result Types", will elaborate | |||
on the failed negotiation attempts. This field contains an | on the failed negotiation attempts. This field contains an | |||
aggregate count of failed connections. | aggregate count of failed connections. | |||
4.3. Result Types | 4.3. Result Types | |||
The list of result types will start with the minimal set below, and | The list of result types will start with the minimal set below and is | |||
is expected to grow over time based on real-world experience. The | expected to grow over time based on real-world experience. The | |||
initial set is: | initial set is outlined in Sections 4.3.1 to 4.3.4: | |||
4.3.1. Negotiation Failures | 4.3.1. Negotiation Failures | |||
o "starttls-not-supported": This indicates that the recipient MX did | o "starttls-not-supported": This indicates that the recipient MX did | |||
not support STARTTLS. | not support STARTTLS. | |||
o "certificate-host-mismatch": This indicates that the certificate | o "certificate-host-mismatch": This indicates that the certificate | |||
presented did not adhere to the constraints specified in the MTA- | presented did not adhere to the constraints specified in the MTA- | |||
STS or DANE policy, e.g. if the MX hostname does not match any | STS or DANE policy, e.g., if the MX hostname does not match any | |||
identities listed in the Subject Alternate Name (SAN) [RFC5280]. | identities listed in the subject alternative name (SAN) [RFC5280]. | |||
o "certificate-expired": This indicates that the certificate has | o "certificate-expired": This indicates that the certificate has | |||
expired. | expired. | |||
o "certificate-not-trusted": This a label that covers multiple | o "certificate-not-trusted": This is a label that covers multiple | |||
certificate related failures that include, but not limited to | certificate-related failures that include, but are not limited to, | |||
errors such as untrusted/unknown CAs, certificate name | errors such as untrusted/unknown certification authorities (CAs), | |||
constraints, certificate chain errors etc. When using this | certificate name constraints, certificate chain errors, etc. When | |||
declaration, the reporting MTA SHOULD utilize the "failure-reason- | using this declaration, the reporting MTA SHOULD utilize the | |||
code" to provide more information to the receiving entity. | "failure-reason-code" to provide more information to the receiving | |||
entity. | ||||
o "validation-failure": This indicates a general failure for a | o "validation-failure": This indicates a general failure for a | |||
reason not matching a category above. When using this | reason not matching a category above. When using this | |||
declaration, the reporting MTA SHOULD utilize the "failure-reason- | declaration, the reporting MTA SHOULD utilize the "failure-reason- | |||
code" to provide more information to the receiving entity. | code" to provide more information to the receiving entity. | |||
4.3.2. Policy Failures | 4.3.2. Policy Failures | |||
4.3.2.1. DANE-specific Policy Failures | 4.3.2.1. DANE-Specific Policy Failures | |||
o "tlsa-invalid": This indicates a validation error in the TLSA | o "tlsa-invalid": This indicates a validation error in the TLSA | |||
record associated with a DANE policy. None of the records in the | record associated with a DANE policy. None of the records in the | |||
RRset were found to be valid. | RRset were found to be valid. | |||
o "dnssec-invalid": This would indicate that no valid records were | o "dnssec-invalid": This indicates that no valid records were | |||
returned from the recursive resolver. The request returned with | returned from the recursive resolver. | |||
SERVFAIL for the requested TLSA record. | ||||
o "dane-required": This indicates that the sending system is | o "dane-required": This indicates that the sending system is | |||
configured to require DANE TLSA records for all the MX hosts of | configured to require DANE TLSA records for all the MX hosts of | |||
the destination domain, but no DNSSEC-validated TLSA records were | the destination domain, but no DNSSEC-validated TLSA records were | |||
present for the MX host that is the subject of the report. | present for the MX host that is the subject of the report. | |||
Mandatory DANE for SMTP is described in section 6 of [RFC7672]. | Mandatory DANE for SMTP is described in Section 6 of [RFC7672]. | |||
Such policies may be created by mutual agreement between two | Such policies may be created by mutual agreement between two | |||
organizations that frequently exchange sensitive content via | organizations that frequently exchange sensitive content via | |||
email. | email. | |||
4.3.2.2. MTA-STS-specific Policy Failures | 4.3.2.2. MTA-STS-specific Policy Failures | |||
o "sts-policy-fetch-error": This indicates a failure to retrieve an | ||||
MTA-STS policy, for example, because the policy host is | ||||
unreachable. | ||||
o "sts-policy-invalid": This indicates a validation error for the | o "sts-policy-invalid": This indicates a validation error for the | |||
overall MTA-STS policy. | overall MTA-STS Policy. | |||
o "sts-webpki-invalid": This indicates that the MTA-STS policy could | o "sts-webpki-invalid": This indicates that the MTA-STS Policy could | |||
not be authenticated using PKIX validation. | not be authenticated using PKIX validation. | |||
4.3.3. General Failures | 4.3.3. General Failures | |||
When a negotiation failure can not be categorized into one of the | When a negotiation failure cannot be categorized into one of the | |||
"Negotiation Failures" stated above, the reporter SHOULD use the | "Negotiation Failures" stated above, the reporter SHOULD use the | |||
"validation-failure" category. As TLS grows and becomes more | "validation-failure" category. As TLS grows and becomes more | |||
complex, new mechanisms may not be easily categorized. This allows | complex, new mechanisms may not be easily categorized. This allows | |||
for a generic feedback category. When this category is used, the | for a generic feedback category. When this category is used, the | |||
reporter SHOULD also use the "failure-reason-code" to give some | reporter SHOULD also use "failure-reason-code" to give some feedback | |||
feedback to the receiving entity. This is intended to be a short | to the receiving entity. This is intended to be a short text field, | |||
text field, and the contents of the field should be an error code or | and the contents of the field should be an error code or error text, | |||
error text, such as "X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION". | such as "X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION". | |||
4.3.4. Transient Failures | 4.3.4. Transient Failures | |||
Transient errors due to too-busy network, TCP timeouts, etc. are not | Transient errors due to too-busy networks, TCP timeouts, etc., are | |||
required to be reported. | not required to be reported. | |||
4.4. JSON Report Schema | 4.4. JSON Report Schema | |||
The JSON schema is derived from the HPKP JSON schema [RFC7469] (cf. | The JSON schema is derived from the HTTP Public Key Pinning (HPKP) | |||
Section 3) | JSON schema; see Section 3 of [RFC7469]. | |||
{ | { | |||
"organization-name": organization-name, | "organization-name": organization-name, | |||
"date-range": { | "date-range": { | |||
"start-datetime": date-time, | "start-datetime": date-time, | |||
"end-datetime": date-time | "end-datetime": date-time | |||
}, | }, | |||
"contact-info": email-address, | "contact-info": email-address, | |||
"report-id": report-id, | "report-id": report-id, | |||
"policies": [{ | "policies": [{ | |||
skipping to change at page 12, line 45 ¶ | skipping to change at page 13, line 8 ¶ | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
JSON Report Format | JSON Report Format | |||
o "organization-name": The name of the organization responsible for | o "organization-name": The name of the organization responsible for | |||
the report. It is provided as a string. | the report. It is provided as a string. | |||
o "date-time": The date-time indicates the start- and end-times for | o "date-time": The date-time indicates the start and end times for | |||
the report range. It is provided as a string formatted according | the report range. It is provided as a string formatted according | |||
to Section 5.6, "Internet Date/Time Format", of [RFC3339]. The | to "Internet Date/Time Format", Section 5.6 of [RFC3339]. The | |||
report should be for a full UTC day, 0000-2400. | report should be for a full UTC day, 00:00-24:00. | |||
o "email-address": The contact information for a responsible party | o "email-address": The contact information for the party responsible | |||
of the report. It is provided as a string formatted according to | for the report. It is provided as a string formatted according to | |||
Section 3.4.1, "Addr-Spec", of [RFC5321]. | "Addr-Spec Specification", Section 3.4.1 of [RFC5322]. | |||
o "report-id": A unique identifier for the report. Report authors | o "report-id": A unique identifier for the report. Report authors | |||
may use whatever scheme they prefer to generate a unique | may use whatever scheme they prefer to generate a unique | |||
identifier. It is provided as a string. | identifier. It is provided as a string. | |||
o "policy-type": The type of policy that was applied by the sending | o "policy-type": The type of policy that was applied by the sending | |||
domain. Presently, the only three valid choices are "tlsa", | domain. Presently, the only three valid choices are "tlsa", | |||
"sts", and the literal string "no-policy-found". It is provided | "sts", and the literal string "no-policy-found". It is provided | |||
as a string. | as a string. | |||
o "policy-string": An encoding of the applied policy as a JSON array | o "policy-string": An encoding of the applied policy as a JSON array | |||
of strings, whether TLSA record ([RFC6698] section 2.3) or MTA-STS | of strings, whether it's a TLSA record ([RFC6698], Section 2.3) or | |||
policy. Examples follow in the next section. | an MTA-STS Policy. Examples follow in the next section. | |||
o "domain": The Policy Domain is the domain against which the MTA- | o "domain": The Policy Domain against which the MTA-STS or DANE | |||
STS or DANE policy is defined. In the case of Internationalized | policy is defined. In the case of Internationalized Domain Names | |||
Domain Names ([RFC5891]), the domain MUST consist of the Punycode- | [RFC5891], the domain MUST consist of the Punycode-encoded | |||
encoded A-labels ([RFC3492]) and not the U-labels. | A-labels [RFC3492] and not the U-labels. | |||
o "mx-host-pattern": The pattern of MX hostnames from the applied | o "mx-host-pattern": In the case where "policy-type" is "sts", it's | |||
policy. It is provided as a string, and is interpreted in the | the pattern of MX hostnames from the applied policy. It is | |||
same manner as the "Checking of Wildcard Certificates" rules in | provided as a JSON array of strings and is interpreted in the same | |||
Section 6.4.3 of [RFC6125]. In the case of Internationalized | manner as the rules in "MX Host Validation"; see Section 4.1 of | |||
Domain Names ([RFC5891]), the domain MUST consist of the Punycode- | [RFC8461]. In the case of Internationalized Domain Names | |||
encoded A-labels ([RFC3492]) and not the U-labels. | [RFC5891], the domain MUST consist of the Punycode-encoded | |||
A-labels [RFC3492] and not the U-labels. | ||||
o "result-type": A value from Section 4.3, "Result Types", above. | o "result-type": A value from Section 4.3, "Result Types", above. | |||
o "ip-address": The IP address of the sending MTA that attempted the | o "ip-address": The IP address of the Sending MTA that attempted the | |||
STARTTLS connection. It is provided as a string representation of | STARTTLS connection. It is provided as a string representation of | |||
an IPv4 (see below) or IPv6 ([RFC5952]) address in dot-decimal or | an IPv4 (see below) or IPv6 [RFC5952] address in dot-decimal or | |||
colon-hexadecimal notation. | colon-hexadecimal notation. | |||
o "receiving-mx-hostname": The hostname of the receiving MTA MX | o "receiving-mx-hostname": The hostname of the receiving MTA MX | |||
record with which the sending MTA attempted to negotiate a | record with which the Sending MTA attempted to negotiate a | |||
STARTTLS connection. | STARTTLS connection. | |||
o "receiving-mx-helo": (optional) The HELO or EHLO string from the | o "receiving-mx-helo" (optional): The HELLO (HELO) or Extended HELLO | |||
banner announced during the reported session. | (EHLO) string from the banner announced during the reported | |||
session. | ||||
o "receiving-ip": The destination IP address that was using when | o "receiving-ip": The destination IP address that was used when | |||
creating the outbound session. It is provided as a string | creating the outbound session. It is provided as a string | |||
representation of an IPv4 (see below) or IPv6 ([RFC5952]) address | representation of an IPv4 (see below) or IPv6 [RFC5952] address in | |||
in dot-decimal or colon-hexadecimal notation. | dot-decimal or colon-hexadecimal notation. | |||
o "total-successful-session-count": The aggregate count (integer, | o "total-successful-session-count": The aggregate count (an integer, | |||
encoded as a JSON number) of successfully negotiated TLS-enabled | encoded as a JSON number) of successfully negotiated TLS-enabled | |||
connections to the receiving site. | connections to the receiving site. | |||
o "total-failure-session-count": The aggregate count (integer, | o "total-failure-session-count": The aggregate count (an integer, | |||
encoded as a JSON number) of failures to negotiate a TLS-enabled | encoded as a JSON number) of failures to negotiate a TLS-enabled | |||
connection to the receiving site. | connection to the receiving site. | |||
o "failed-session-count": The number of (attempted) sessions that | o "failed-session-count": The number of (attempted) sessions that | |||
match the relevant "result-type" for this section (integer, | match the relevant "result-type" for this section (an integer, | |||
encoded as a JSON number). | encoded as a JSON number). | |||
o "additional-info-uri": An optional URI [RFC3986] pointing to | o "additional-info-uri" (optional): A URI [RFC3986] that points to | |||
additional information around the relevant "result-type". For | additional information around the relevant "result-type". For | |||
example, this URI might host the complete certificate chain | example, this URI might host the complete certificate chain | |||
presented during an attempted STARTTLS session. | presented during an attempted STARTTLS session. | |||
o "failure-reason-code": A text field to include a TLS-related error | o "failure-reason-code": A text field to include a TLS-related error | |||
code or error message. | code or error message. | |||
For report purposes, an IPv4 Address is defined via the following | For report purposes, an IPv4 address is defined via the following | |||
ABNF: | ABNF: | |||
IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet | IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet | |||
dec-octet = DIGIT ; 0-9 | dec-octet = DIGIT ; 0-9 | |||
/ %x31-39 DIGIT ; 10-99 | / %x31-39 DIGIT ; 10-99 | |||
/ "1" 2DIGIT ; 100-199 | / "1" 2DIGIT ; 100-199 | |||
/ "2" %x30-34 DIGIT ; 200-249 | / "2" %x30-34 DIGIT ; 200-249 | |||
/ "25" %x30-35 ; 250-255 | / "25" %x30-35 ; 250-255 | |||
And an IPv6 address is defined via the following ABNF: | ||||
IPv6address = <as defined in [RFC5954]> | ||||
4.5. Policy Samples | 4.5. Policy Samples | |||
Part of the report body includes the policy that is applied when | Part of the report body includes the policy that is applied when | |||
attemping relay to the destination. | attempting relay to the destination. | |||
For DANE TLSA policies, this is a JSON array of strings each | For DANE TLSA policies, this is a JSON array of strings each | |||
representing the RDATA of a single TLSA resource record as a space- | representing the RDATA of a single TLSA resource record as a space- | |||
separated list of its four TLSA fields; the fields are in | separated list of its four TLSA fields; the fields are in | |||
presentation format (defined in [RFC6698] Section 2.2) with no | presentation format (defined in [RFC6698], Section 2.2) with no | |||
internal spaces or grouping parentheses: | internal spaces or grouping parentheses: | |||
[ | [ | |||
"3 0 1 1F850A337E6DB9C609C522D136A475638CC43E1ED424F8EEC8513D747D1D085D", | "3 0 1 1F850A337E6DB9C609C522D136A475638CC43E1ED424F8EEC8513 | |||
"3 0 1 12350A337E6DB9C6123522D136A475638CC43E1ED424F8EEC8513D747D1D1234" | D747D1D085D", | |||
] | "3 0 1 12350A337E6DB9C6123522D136A475638CC43E1ED424F8EEC8513 | |||
D747D1D1234" | ||||
] | ||||
For MTA-STS policies, this is an array of JSON strings that | For MTA-STS policies, this is an array of JSON strings that | |||
represents the policy that is declared by the receiving site, | represents the policy that is declared by the receiving site, | |||
including any errors that may be present. Note that where there are | including any errors that may be present. Note that where there are | |||
multiple "mx" values, they must be listed as separate "mx" elements | multiple "mx" values, they must be listed as separate "mx" elements | |||
in the policy array, rather as a single nested "mx" sub-array. | in the policy array rather than as a single nested "mx" sub-array. | |||
[ | [ | |||
"version: STSv1", | "version: STSv1", | |||
"mode: testing", | "mode: testing", | |||
"mx: mx1.example.com", | "mx: mx1.example.com", | |||
"mx: mx2.example.com", | "mx: mx2.example.com", | |||
"mx: mx.backup-example.com", | "mx: mx.backup-example.com", | |||
"max_age: 604800" | "max_age: 604800" | |||
] | ] | |||
5. Report Delivery | 5. Report Delivery | |||
Reports can be delivered either as an email message via SMTP or via | Reports can be delivered either via SMTP (as an email message) or via | |||
HTTP POST. | HTTP POST. | |||
5.1. Report Filename | 5.1. Report Filename | |||
The filename is RECOMMENDED to be constructed using the following | The filename is RECOMMENDED to be constructed using the following | |||
ABNF: | ABNF: | |||
filename = sender "!" policy-domain "!" begin-timestamp | filename = sender "!" policy-domain "!" begin-timestamp | |||
"!" end-timestamp [ "!" unique-id ] "." extension | "!" end-timestamp [ "!" unique-id ] "." extension | |||
unique-id = 1*(ALPHA / DIGIT) | unique-id = 1*(ALPHA / DIGIT) | |||
sender = domain ; From the [RFC5321] that is used | sender = domain ; from [RFC5321] -- this is used | |||
; as the domain for the `contact-info` | ; as the domain for the `contact-info` | |||
; address in the report body | ; 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 | 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 | begin-timestamp = 1*DIGIT | |||
; seconds since 00:00:00 UTC January 1, 1970 | ; seconds since 00:00:00 UTC January 1, 1970 | |||
; indicating start of the time range contained | ; indicating start of the time range contained | |||
; in the report | ; in the report | |||
end-timestamp = 1*DIGIT | end-timestamp = 1*DIGIT | |||
; seconds since 00:00:00 UTC January 1, 1970 | ; seconds since 00:00:00 UTC January 1, 1970 | |||
; indicating end of the time range contained | ; indicating end of the time range contained | |||
; in the report | ; in the report | |||
extension = "json" / "json.gz" | extension = "json" / "json.gz" | |||
The extension MUST be "json" for a plain JSON file, or "json.gz" for | The extension MUST be "json" for a plain JSON file or "json.gz" for a | |||
a JSON file compressed using GZIP. | JSON file compressed using gzip. | |||
"unique-id" allows an optional unique ID generated by the Sending MTA | "unique-id" allows an optional unique ID generated by the Sending MTA | |||
to distinguish among multiple reports generated simultaneously by | to distinguish among multiple reports generated simultaneously by | |||
different sources within the same Policy Domain. For example, this | different sources for the same Policy Domain. For example, this is a | |||
is a possible filename for a compressed report to the Policy Domain | possible filename for a compressed report to the Policy Domain | |||
"example.net" from the Sending MTA "mail.sndr.example.com": | "example.net" from the Sending MTA "mail.sndr.example.com": | |||
"mail.sndr.example.com!example.net!1470013207!1470186007!001.json.gz" | "mail.sndr.example.com!example.net!1470013207!1470186007!001.json.gz" | |||
5.2. Compression | 5.2. Compression | |||
The report SHOULD be subjected to GZIP [RFC1952] compression for both | The report SHOULD be subjected to gzip [RFC1952] compression for both | |||
email and HTTPS transport. Declining to apply compression can cause | email and HTTPS transport. Declining to apply compression can cause | |||
the report to be too large for a receiver to process (a commonly | the report to be too large for a receiver to process (a commonly | |||
observed receiver limit is ten megabytes); compressing the file | observed receiver limit is ten megabytes); compressing the file | |||
increases the chances of acceptance of the report at some compute | increases the chances of acceptance of the report at some | |||
cost. | computational cost. | |||
5.3. Email Transport | 5.3. Email Transport | |||
The report MAY be delivered by email. To make the reports machine- | The report MAY be delivered by email. To make the reports machine- | |||
parsable for the receivers, we define a top-level media type | parsable for the receivers, we define a top-level media type | |||
"multipart/report" with a new parameter "report-type="tlsrpt"". | "multipart/report" with a new parameter "report-type="tlsrpt"". | |||
Inside it, there are two parts: The first part is human readable, | Inside it, there are two parts: The first part is human readable, | |||
typically "text/plain", and the second part is machine readable with | typically "text/plain", and the second part is machine readable with | |||
a new media type defined called "application/tlsrpt+json". If | a new media type defined called "application/tlsrpt+json". If | |||
compressed, the report should use the media type "application/ | compressed, the report should use the media type "application/ | |||
tlsrpt+gzip". | tlsrpt+gzip". | |||
In addition, the following two new top level message header fields | In addition, the following two new top-level message header fields | |||
are defined: | are defined: | |||
"TLS-Report-Domain: Receiver-Domain" | "TLS-Report-Domain: Receiver-Domain" | |||
"TLS-Report-Submitter: Sender-Domain" | "TLS-Report-Submitter: Sender-Domain" | |||
The "TLS-Report-Submitter" value MUST match the value found in the | The "TLS-Report-Submitter" value MUST match the value found in the | |||
[RFC5321] domain from the "contact-info" from the report body. These | domain [RFC5321] of the "contact-info" from the report body. These | |||
message headers MUST be included and should allow for easy searching | message header fields MUST be included and should allow for easy | |||
for all reports submitted by a report domain or a particular | searching for all reports submitted by a reporting domain or a | |||
submitter, for example in IMAP [RFC3501]: | particular submitter, for example, in IMAP [RFC3501]: | |||
"s SEARCH HEADER "TLS-Report-Domain" "example.com"" | "s SEARCH HEADER "TLS-Report-Domain" "example.com"" | |||
It is presumed that the aggregate reporting address will be equipped | It is presumed that the aggregate reporting address will be equipped | |||
to process new message header fields and extract MIME parts with the | to process new message header fields and extract MIME parts with the | |||
prescribed media type and filename, and ignore the rest. These | prescribed media type and filename, and ignore the rest. These | |||
additional headers SHOULD be included in the DKIM [RFC6376] signature | additional headers SHOULD be included in the DKIM [RFC6376] signature | |||
for the message. | for the message. | |||
The [RFC5322].Subject field for report submissions SHOULD conform to | The RFC5322.Subject field for report submissions SHOULD conform to | |||
the following ABNF: | the following ABNF: | |||
tlsrpt-subject = %s"Report" FWS ; "Report" | tlsrpt-subject = %s"Report" FWS ; "Report" | |||
%s"Domain:" FWS ; "Domain:" | %s"Domain:" FWS ; "Domain:" | |||
domain-name FWS ; per [RFC6376] | domain-name FWS ; per [RFC6376] | |||
%s"Submitter:" FWS ; "Submitter:" | %s"Submitter:" FWS ; "Submitter:" | |||
domain-name FWS ; per [RFC6376] | domain-name FWS ; per [RFC6376] | |||
%s"Report-ID:" FWS ; "Report-ID: | %s"Report-ID:" FWS ; "Report-ID: | |||
"<" id-left "@" id-right ">" ; per [RFC5322] | "<" id-left "@" id-right ">" ; per [RFC5322] | |||
[CFWS] ; per [RFC5322] | [CFWS] ; per [RFC5322] | |||
; (as with FWS) | ; (as with FWS) | |||
The first domain-name indicates the DNS domain name about which the | The first domain-name indicates the DNS domain name about which the | |||
report was generated. The second domain-name indicates the DNS | report was generated. The second domain-name indicates the DNS | |||
domain name representing the Sending MTA generating the report. The | domain name representing the Sending MTA generating the report. The | |||
purpose of the Report-ID: portion of the field is to enable the | purpose of the "Report-ID:" portion of the field is to enable the | |||
Policy Domain to identify and ignore duplicate reports that might be | Policy Domain to identify and ignore duplicate reports that might be | |||
sent by a Sending MTA. | sent by a Sending MTA. | |||
For instance, this is a possible Subject field for a report to the | For instance, this is a possible Subject field for a report to the | |||
Policy Domain "example.net" from the Sending MTA | Policy Domain "example.net" from the Sending MTA | |||
"mail.sender.example.com". It is line-wrapped as allowed by | "mail.sender.example.com". It is line-wrapped as allowed by | |||
[RFC5322]: | [RFC5322]: | |||
Subject: Report Domain: example.net | Subject: Report Domain: example.net | |||
Submitter: mail.sender.example.com | Submitter: mail.sender.example.com | |||
skipping to change at page 18, line 37 ¶ | skipping to change at page 19, line 40 ¶ | |||
Content-Transfer-Encoding: base64 | Content-Transfer-Encoding: base64 | |||
Content-Disposition: attachment; | Content-Disposition: attachment; | |||
filename="mail.sender.example!example.com! | filename="mail.sender.example!example.com! | |||
1013662812!1013749130.json.gz" | 1013662812!1013749130.json.gz" | |||
<gzipped content of report> | <gzipped content of report> | |||
------=_NextPart_000_024E_01CC9B0A.AFE54C00-- | ------=_NextPart_000_024E_01CC9B0A.AFE54C00-- | |||
... | ... | |||
Note that, when sending failure reports via SMTP, sending MTAs MUST | Note that, when sending failure reports via SMTP, Sending MTAs MUST | |||
NOT honor MTA-STS or DANE TLSA failures. | NOT honor MTA-STS or DANE TLSA failures. | |||
5.4. HTTPS Transport | 5.4. HTTPS Transport | |||
The report MAY be delivered by POST to HTTPS. If compressed, the | The report MAY be delivered by POST to HTTPS. If compressed, the | |||
report SHOULD use the media type "application/tlsrpt+gzip", and | report SHOULD use the media type "application/tlsrpt+gzip"; otherwise | |||
"application/tlsrpt+json" otherwise (see section Section 6, "IANA | it SHOULD use the media type "application/tlsrpt+json" (see | |||
Considerations"). | Section 6, "IANA Considerations"). | |||
The receiving system MUST return a "successful" response from its | The receiving system MUST return a "successful" response from its | |||
HTTPS server, typically a 200 or 201 HTTP code [RFC7321]. Other | HTTPS server, typically a 200 or 201 HTTP code [RFC7231]. Other | |||
codes could indicate a delivery failure, and may be retried as per | codes could indicate a delivery failure and may be retried as per | |||
local sender policy. The receiving system is not expected to process | local sender policy. The receiving system is not expected to process | |||
reports at receipt time, and MAY store them for processing at a later | reports at receipt time and MAY store them for processing at a later | |||
time. | time. | |||
5.5. Delivery Retry | 5.5. Delivery Retry | |||
In the event of a delivery failure, regardless of the delivery | In the event of a delivery failure, regardless of the delivery | |||
method, a sender SHOULD attempt redelivery for up to 24hrs after the | method, a sender SHOULD attempt redelivery for up to 24 hours after | |||
initial attempt. As previously stated the reports are optional, so | the initial attempt. As previously stated, the reports are optional, | |||
while it is ideal to attempt redelivery, it is not required. If | so while it is ideal to attempt redelivery, it is not required. If | |||
multiple retries are attempted, ideally they SHOULD be done with | multiple retries are attempted, ideally they SHOULD be done with | |||
exponential backoff. | exponential backoff. | |||
5.6. Metadata Variances | 5.6. Metadata Variances | |||
As stated above, there are a variable number of ways to declare | As stated above, there are a variable number of ways to declare | |||
information about the data therein. If any of items declared via | information about the data therein. If any of the items declared via | |||
subject or filename disagree with the report, the report MUST be | subject or filename disagree with the report, the report MUST be | |||
considered the authoritative source. | considered the authoritative source. | |||
6. IANA Considerations | 6. IANA Considerations | |||
The following are the IANA considerations discussed in this document. | The following are the IANA considerations discussed in this document. | |||
6.1. Message headers | 6.1. Message Headers | |||
Below is the Internet Assigned Numbers Authority (IANA) Permanent | Below is the Internet Assigned Numbers Authority (IANA) Permanent | |||
Message Header Field registration information per [RFC3864]. | Message Header Field registration information per [RFC3864]. | |||
Header field name: TLS-Report-Domain | Header field name: TLS-Report-Domain | |||
Applicable protocol: mail | Applicable protocol: mail | |||
Status: standard | Status: standard | |||
Author/Change controller: IETF | Author/Change controller: IETF | |||
Specification document(s): this one | Specification document(s): RFC 8460 | |||
Header field name: TLS-Report-Submitter | Header field name: TLS-Report-Submitter | |||
Applicable protocol: mail | Applicable protocol: mail | |||
Status: standard | Status: standard | |||
Author/Change controller: IETF | Author/Change controller: IETF | |||
Specification document(s): this one | Specification document(s): RFC 8460 | |||
6.2. Report Type | 6.2. Report Type | |||
This document creates a new registry for "report-type" parameter to | This document creates a new registry for the "report-type" parameter | |||
the Content-Type header field for the "multipart/report" top-level | to the Content-Type header field for the "multipart/report" top-level | |||
media type defined in [RFC6522]. | media type defined in [RFC6522]. | |||
The registry name is "Report Type Registry", and the procedure for | The registry name is "Report Type Registry", and the procedure for | |||
updating the registry will be "Specification Required". | updating the registry will be "Specification Required" [RFC8126]. | |||
An entry in this registry should contain: | An entry in this registry should contain: | |||
o the report-type being registered | o the report-type being registered | |||
o one or more registered media-types that can be used with this | o one or more registered media types that can be used with this | |||
report-type | report-type | |||
o the document containing the registration action | o the document containing the registration action | |||
o an optional comment | o an optional comment | |||
The initial entries are: | The initial entries are: | |||
Report-Type: tlsrpt Media Type: application/tlsrpt+gzip, application/ | Report-Type: tlsrpt | |||
tlsrpt+json Registered By: [RFCXXXX] Comment: Media types suitable | Media Type: application/tlsrpt+gzip, application/tlsrpt+json | |||
for use with this report-type are defined in Sections 6.4 and 6.5 of | Registered By: [RFC8460] | |||
[RFCXXXX] | Comment: Media types suitable for use with this report-type are | |||
defined in Sections 6.4 and 6.5 of [RFC8460] | ||||
Report-Type: disposition-notification Media Type: message/ | Report-Type: disposition-notification | |||
disposition-notification Registered By: [RFC8098] Section 10 | Media Type: message/disposition-notification | |||
Registered By: [RFC8098], Section 10 | ||||
Report-Type: disposition-notification Media Type: message/global- | Report-Type: disposition-notification | |||
disposition-notification Registered By: [RFC6533] Section 6 | Media Type: message/global-disposition-notification | |||
Registered By: [RFC6533], Section 6 | ||||
Report-Type: delivery-status Media Type: message/delivery-status | Report-Type: delivery-status | |||
Registered By: [RFC3464] Appendix D | Media Type: message/delivery-status | |||
Registered By: [RFC3464], Section 6.2 | ||||
Report-Type: delivery-status Media Type: message/global-delivery- | Report-Type: delivery-status | |||
status Registered By: [RFC6533] Section 6 | Media Type: message/global-delivery-status | |||
Registered By: [RFC6533], Section 6 | ||||
6.3. +gzip Media Type Suffix | 6.3. +gzip Media Type Suffix | |||
This document registers a new media type suffix "+gzip". The GZIP | This document registers a new media type suffix "+gzip". The gzip | |||
format is a public domain, cross-platform, interoperable file storage | format is a public domain, cross-platform, interoperable file storage | |||
and transfer format, specified in [RFC1952]; it supports compression | and transfer format, specified in [RFC1952]; it supports compression | |||
and is used as the underlying representation by a variety of file | and is used as the underlying representation by a variety of file | |||
formats. The media type "application/gzip" has been registered for | formats. The media type "application/gzip" has been registered for | |||
such files. The suffix "+gzip" MAY be used with any media type whose | such files. The suffix "+gzip" MAY be used with any media type whose | |||
representation follows that established for "application/gzip". The | representation follows that established for "application/gzip". The | |||
media type structured syntax suffix registration form follows: | registration form for the structured syntax suffix for use with media | |||
types is as follows: | ||||
Type name: GZIP file storage and transfer format | Type name: gzip file storage and transfer format. | |||
+suffix: +gzip | +suffix: +gzip | |||
References: [RFC1952][RFC6713] | ||||
Encoding considerations: GZIP is a binary encoding. | References: [RFC1952] [RFC6713] | |||
Encoding considerations: gzip is a binary encoding. | ||||
Fragment identifier considerations: The syntax and semantics of | Fragment identifier considerations: The syntax and semantics of | |||
fragment identifiers specified for +gzip SHOULD be as specified for | fragment identifiers specified for +gzip SHOULD be as specified for | |||
"application/gzip". (At publication of this document, there is no | "application/gzip". (At publication of this document, there is no | |||
fragment identification syntax defined for "application/gzip".) The | fragment identification syntax defined for "application/gzip".) The | |||
syntax and semantics for fragment identifiers for a specific "xxx/ | syntax and semantics for fragment identifiers for a specific "xxx/ | |||
yyy+gzip" SHOULD be processed as follows: | yyy+gzip" SHOULD be processed as follows: | |||
For cases defined in +gzip, where the fragment identifier | For cases defined in +gzip, where the fragment identifier | |||
resolves per the +gzip rules, then process as specified in | resolves per the +gzip rules, process as specified in | |||
+gzip. | +gzip. | |||
For cases defined in +gzip, where the fragment identifier does | For cases defined in +gzip, where the fragment identifier does | |||
not resolve per the +gzip rules, then process as specified in | not resolve per the +gzip rules, process as specified in | |||
"xxx/yyy+gzip". | "xxx/yyy+gzip". | |||
For cases not defined in +gzip, then process as specified in | For cases not defined in +gzip, process as specified in | |||
"xxx/yyy+gzip". | "xxx/yyy+gzip". | |||
Interoperability considerations: n/a | Interoperability considerations: N/A | |||
Security considerations: GZIP format doesn't provide confidentiality | Security considerations: gzip format doesn't provide confidentiality | |||
protection. Integrity protection is provided by and Adler-32 | protection. Integrity protection is provided by an Adler-32 | |||
checksum, which is not cryptographically strong. See also security | checksum, which is not cryptographically strong. See also the | |||
considerations of [RFC6713]. Each individual media type registered | security considerations of [RFC6713]. Each individual media type | |||
with a +gzip suffix can have additional security considerations. | registered with a +gzip suffix can have additional security | |||
Additionally, GZIP objects can contain multiple files and associated | considerations. Additionally, gzip objects can contain multiple | |||
paths. File paths must be validated when the files are extracted; a | files and associated paths. File paths must be validated when the | |||
malicious file path could otherwise cause the extractor to overwrite | files are extracted; a malicious file path could otherwise cause the | |||
application or system files. | extractor to overwrite application or system files. | |||
Contact: art@ietf.org | Contact: art@ietf.org | |||
Author/Change controller: Internet Engineering Task Force | Author/Change controller: Internet Engineering Task Force | |||
(mailto:iesg@ietf.org). | (iesg@ietf.org). | |||
6.4. application/tlsrpt+json Media Type | 6.4. application/tlsrpt+json Media Type | |||
This document registers multiple media types, beginning with Table 1 | This document registers multiple media types, beginning with Table 1 | |||
below. | below. | |||
+-------------+----------------+-------------+-------------------+ | +-------------+----------------+-------------+-------------------+ | |||
| Type | Subtype | File extn | Specification | | | Type | Subtype | File Ext | Specification | | |||
+-------------+----------------+-------------+-------------------+ | +-------------+----------------+-------------+-------------------+ | |||
| application | tlsrpt+json | .json | Section 5.3 | | | application | tlsrpt+json | .json | Section 5.3 | | |||
+-------------+----------------+-------------+-------------------+ | +-------------+----------------+-------------+-------------------+ | |||
Table 1: SMTP TLS Reporting Media Type | Table 1: SMTP TLS Reporting Media Type | |||
Type name: application | Type name: application | |||
Subtype name: tlsrpt+json | Subtype name: tlsrpt+json | |||
Required parameters: n/a | Required parameters: N/A | |||
Optional parameters: n/a | Optional parameters: N/A | |||
Encoding considerations: Encoding considerations are identical to | Encoding considerations: Encoding considerations are identical to | |||
those specified for the "application/json" media type. See | those specified for the "application/json" media type. See | |||
[RFC7493]. | [RFC7493]. | |||
Security considerations: Security considerations relating to SMTP TLS | Security considerations: Security considerations relating to SMTP TLS | |||
Reporting are discussed in Section 7. | Reporting are discussed in Section 7. | |||
Interoperability considerations: This document specifies format of | Interoperability considerations: This document specifies the format | |||
conforming messages and the interpretation thereof. | of conforming messages and the interpretation thereof. | |||
Published specification: Section 5.3 of this document. | Published specification: Section 5.3 of RFC 8460. | |||
Applications that use this media type: Mail User Agents (MUA) and | Applications that use this media type: Mail User Agents (MUAs) and | |||
Mail Transfer Agents. | Mail Transfer Agents. | |||
Additional information: | Additional information: | |||
Magic number(s): n/a | Deprecated alias names for this type: N/A | |||
File extension(s): ".json" | Magic number(s): N/A | |||
Macintosh file type code(s): n/a | File extension(s): ".json" | |||
Person & email address to contact for further information: See | Macintosh file type code(s): N/A | |||
Authors' Addresses section. | ||||
Person & email address to contact for further information: | ||||
See the Authors' Addresses section. | ||||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: n/a | Restrictions on usage: N/A | |||
Author: See Authors' Addresses section. | Author: See the Authors' Addresses section. | |||
Change controller: Internet Engineering Task Force | Change controller: Internet Engineering Task Force (iesg@ietf.org). | |||
(mailto:iesg@ietf.org). | ||||
6.5. application/tlsrpt+gzip Media Type | 6.5. application/tlsrpt+gzip Media Type | |||
+-------------+----------------+-------------+-------------------+ | +-------------+----------------+-------------+-------------------+ | |||
| Type | Subtype | File extn | Specification | | | Type | Subtype | File Ext | Specification | | |||
+-------------+----------------+-------------+-------------------+ | +-------------+----------------+-------------+-------------------+ | |||
| application | tlsrpt+gzip | .gz | Section 5.3 | | | application | tlsrpt+gzip | .gz | Section 5.3 | | |||
+-------------+----------------+-------------+-------------------+ | +-------------+----------------+-------------+-------------------+ | |||
Table 2: SMTP TLS Reporting Media Type | Table 2: SMTP TLS Reporting Media Type | |||
Type name: application | Type name: application | |||
Subtype name: tlsrpt+gzip | Subtype name: tlsrpt+gzip | |||
Required parameters: n/a | Required parameters: N/A | |||
Optional parameters: n/a | Optional parameters: N/A | |||
Encoding considerations: Binary | Encoding considerations: Binary | |||
Security considerations: Security considerations relating to SMTP TLS | Security considerations: Security considerations relating to SMTP TLS | |||
Reporting are discussed in Section 7. Security considerations | Reporting are discussed in Section 7. Security considerations | |||
related to gzip compression are discussed in [RFC6713]. | related to gzip compression are discussed in RFC 6713. | |||
Interoperability considerations: This document specifies format of | Interoperability considerations: This document specifies the format | |||
conforming messages and the interpretation thereof. | of conforming messages and the interpretation thereof. | |||
Published specification: Section 5.3 of this document. | Published specification: Section 5.3 of RFC 8460. | |||
Applications that use this media type: Mail User Agents (MUA) and | Applications that use this media type: Mail User Agents (MUAs) and | |||
Mail Transfer Agents. | Mail Transfer Agents. | |||
Additional information: | Additional information: | |||
Magic number(s): The first two bytes are 0x1f, 0x8b. | Deprecated alias names for this type: N/A | |||
File extension(s): ".gz" | Magic number(s): The first two bytes are 0x1f, 0x8b. | |||
Macintosh file type code(s): n/a | File extension(s): ".gz" | |||
Person & email address to contact for further information: See | Macintosh file type code(s): N/A | |||
Authors' Addresses section. | ||||
Person & email address to contact for further information: | ||||
See the Authors' Addresses section. | ||||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: n/a | Restrictions on usage: N/A | |||
Author: See Authors' Addresses section. | ||||
Change controller: Internet Engineering Task Force | Author: See the Authors' Addresses section. | |||
(mailto:iesg@ietf.org). | ||||
Change controller: Internet Engineering Task Force (iesg@ietf.org). | ||||
6.6. STARTTLS Validation Result Types | 6.6. STARTTLS Validation Result Types | |||
This document creates a new registry, "STARTTLS Validation Result | This document creates a new registry, "STARTTLS Validation Result | |||
Types". The initial entries in the registry are: | Types". The initial entries in the registry are: | |||
+-------------------------------+-----------+ | +-----------------------------+--------------+ | |||
| Result Type | Desc | | | Result Type | Description | | |||
+-------------------------------+-----------+ | +-----------------------------+--------------+ | |||
| "starttls-not-supported" | 4.3 | | | starttls-not-supported | Section 4.3 | | |||
| "certificate-host-mismatch" | 4.3 | | | certificate-host-mismatch | Section 4.3 | | |||
| "certificate-expired" | 4.3 | | | certificate-expired | Section 4.3 | | |||
| "tlsa-invalid" | 4.3 | | | tlsa-invalid | Section 4.3 | | |||
| "dnssec-invalid" | 4.3 | | | dnssec-invalid | Section 4.3 | | |||
| "dane-required" | 4.3 | | | dane-required | Section 4.3 | | |||
| "certificate-not-trusted" | 4.3 | | | certificate-not-trusted | Section 4.3 | | |||
| "sts-policy-invalid" | 4.3 | | | sts-policy-invalid | Section 4.3 | | |||
| "sts-webpki-invalid" | 4.3 | | | sts-webpki-invalid | Section 4.3 | | |||
| "validation-failure" | 4.3 | | | validation-failure | Section 4.3 | | |||
+-------------------------------+-----------+ | | sts-policy-fetch-error | Section 4.3 | | |||
+-----------------------------+--------------+ | ||||
The above entries are described in section Section 4.3, "Result | The above entries are described in Section 4.3, "Result Types". New | |||
Types." New result types can be added to this registry using "Expert | result types can be added to this registry using the "Expert Review" | |||
Review" IANA registration policy. | IANA registration policy. | |||
7. Security Considerations | 7. Security Considerations | |||
SMTP TLS Reporting provides transparency into misconfigurations or | SMTP TLS Reporting provides visibility into misconfigurations or | |||
attempts to intercept or tamper with mail between hosts who support | attempts to intercept or tamper with mail between hosts who support | |||
STARTTLS. There are several security risks presented by the | STARTTLS. There are several security risks presented by the | |||
existence of this reporting channel: | existence of this reporting channel: | |||
o Flooding of the Aggregate report URI (rua) endpoint: An attacker | o Flooding of the Aggregate Report URI (rua) endpoint: An attacker | |||
could flood the endpoint with excessive reporting traffic and | could flood the endpoint with excessive reporting traffic and | |||
prevent the receiving domain from accepting additional reports. | prevent the receiving domain from accepting additional reports. | |||
This type of Denial-of-Service attack would limit visibility into | This type of Denial-of-Service attack would limit visibility into | |||
STARTTLS failures, leaving the receiving domain blind to an | STARTTLS failures, leaving the receiving domain blind to an | |||
ongoing attack. | ongoing attack. | |||
o Untrusted content: An attacker could inject malicious code into | o Untrusted content: An attacker could inject malicious code into | |||
the report, opening a vulnerability in the receiving domain. | the report, exploiting any vulnerabilities in the report-handling | |||
Implementers are advised to take precautions against evaluating | systems of the receiving domain. Implementers are advised to take | |||
the contents of the report. | precautions against evaluating the contents of the report. | |||
o Report snooping: An attacker could create a bogus TLSRPT record to | o Report snooping: An attacker could create a bogus TLSRPT record to | |||
receive statistics about a domain the attacker does not own. | receive statistics about a domain the attacker does not own. | |||
Since an attacker able to poison DNS is already able to receive | Since an attacker that is able to poison DNS is already able to | |||
counts of SMTP connections (and, absent DANE or MTA-STS policies, | receive counts of SMTP connections (and, absent DANE or MTA-STS | |||
actual SMTP message payloads), this does not present a significant | policies, actual SMTP message payloads), this does not present a | |||
new vulnerability. | significant new vulnerability. | |||
o Ignoring HTTPS validation when submitting reports: When reporting | o Ignoring HTTPS validation when submitting reports: When reporting | |||
benign misconfigurations, it is likely that a misconfigured SMTP | benign misconfigurations, it is likely that a misconfigured SMTP | |||
server may also mean a misconfigured HTTPS server; as a result, | server may also mean a misconfigured HTTPS server; as a result, | |||
reporters who required HTTPS validity on the reporting endpoint | reporters who require HTTPS validity on the reporting endpoint may | |||
may fail to alert administrators about such misconfigurations. | fail to alert administrators about such misconfigurations. | |||
Conversely, in the event of an actual attack, an attacker who | Conversely, in the event of an actual attack, an attacker who | |||
wished to create a gap in reporting and could intercept HTTPS | wishes to create a gap in reporting and could intercept HTTPS | |||
reports could, just as easily, simply thwart the resolution of the | reports could, just as easily, simply thwart the resolution of the | |||
TLSRPT TXT record or establishment of the TCP session to the HTTPS | TLSRPT TXT record or establishment of the TCP session to the HTTPS | |||
endpoint. Furthermore, such a man-in-the-middle attacker could | endpoint. Furthermore, such a man-in-the-middle attacker could | |||
discover most or all of the metadata exposed in a report merely | discover most or all of the metadata exposed in a report merely | |||
through passive observation. As a result, we consider the risks | through passive observation. As a result, we consider the risks | |||
of failure to deliver reports on misconfigurations to outweigh | of failure to deliver reports on misconfigurations to outweigh | |||
those of attackers intercepting reports. | those of attackers intercepting reports. | |||
o Reports as DDoS: TLSRPT allows specifying destinations for the | o Reports as DDoS: TLSRPT allows specifying destinations for the | |||
reports that are outside the authority of the Policy Domain, which | reports that are outside the authority of the Policy Domain, which | |||
allows domains to delegate processing of reports to a partner | allows domains to delegate processing of reports to a partner | |||
organization. However, an attacker who controls the Policy Domain | organization. However, an attacker who controls the Policy Domain | |||
DNS could also use this mechanism to direct the reports to an | DNS could also use this mechanism to direct the reports to an | |||
unwitting victim, flooding that victim with excessive reports. | unwitting victim, flooding that victim with excessive reports. | |||
DMARC [RFC7489] defines a solution for verifying delegation to | DMARC [RFC7489] defines a solution for verifying delegation to | |||
avoid such attacks; the need for this is greater with DMARC, | avoid such attacks; the need for this is greater with DMARC, | |||
however, because DMARC allows an attacker to trigger reports to a | however, because DMARC allows an attacker to trigger reports to a | |||
target from an innocent third party by sending that third party | target from an innocent third party by sending mail to that third | |||
mail (which triggers a report from the third party to the target). | party (which triggers a report from the third party to the | |||
In the case of TLSRPT, the attacker would have to induce the third | target). In the case of TLSRPT, the attacker would have to induce | |||
party to send the attacker mail in order to trigger reports from | the third party to send mail to the attacker in order to trigger | |||
the third party to the victim; this reduces the risk of such an | reports from the third party to the victim; this reduces the risk | |||
attack and the need for a verification mechanism. | of such an attack and the need for a verification mechanism. | |||
Finally, because TLSRPT is intended to help administrators discover | Finally, because TLSRPT is intended to help administrators discover | |||
man-in-the-middle attacks against transport-layer encryption, | man-in-the-middle attacks against transport-layer encryption, | |||
including attacks designed to thwart negotiation of encrypted | including attacks designed to thwart negotiation of encrypted | |||
connections (by downgrading opportunistic encryption or, in the case | connections (by downgrading opportunistic encryption or, in the case | |||
of MTA-STS, preventing discovery of a new MTA-STS policy), we must | of MTA-STS, preventing discovery of a new MTA-STS Policy), we must | |||
also consider the risk that an adversary who can induce such a | also consider the risk that an adversary who can induce such a | |||
downgrade attack can also prevent discovery of the TLSRPT TXT record | downgrade attack can also prevent discovery of the TLSRPT TXT record | |||
(and thus prevent discovery of the successful downgrade attack). | (and thus prevent discovery of the successful downgrade attack). | |||
Administrators are thus encouraged to deploy TLSRPT TXT records with | Administrators are thus encouraged to deploy TLSRPT TXT records with | |||
a large TTL (reducing the window for successful application of | a large TTL (reducing the window for successful application of | |||
transient attacks against DNS resolution of the record) or to deploy | transient attacks against DNS resolution of the record) or to deploy | |||
DNSSEC on the deploying zone. | DNSSEC on the deploying zone. | |||
8. Privacy Considerations | 8. Privacy Considerations | |||
MTAs are generally considered public knowledge, however, the | MTAs are generally considered public knowledge; however, the | |||
internals of how those MTAs are configured and the users of those | internals of how those MTAs are configured and the users of those | |||
MTAs may not be as public. It should be noted that when providing a | MTAs may not be as public. It should be noted that providing a | |||
receiving site with information, it may reveal information about the | receiving site with information about TLS failures may reveal | |||
sender's configuration, or even information about the senders | information about the sender's configuration or even information | |||
themselves. Consider that by sending a report, it might disclose | about the senders themselves. For example, sending a report may | |||
your SSL library version as the inability to negotiate a session may | disclose what TLS implementation the sender uses, as the inability to | |||
be a known incompatbility between two library versions, or perhaps | negotiate a session may be a known incompatibility between two | |||
commonly used in a operating system release that is centered in a | implementations. This may, indirectly, leak information on the | |||
certain region. The risk may be minimal, but should be considered. | reporter's operating system or even region, if, for example, a rare | |||
TLS implementation is popular among certain users or in certain | ||||
locations. | ||||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[I-D.ietf-uta-mta-sts] | ||||
Margolis, D., Risher, M., Ramakrishnan, B., Brotman, A., | ||||
and J. Jones, "SMTP MTA Strict Transport Security (MTA- | ||||
STS)", draft-ietf-uta-mta-sts-19 (work in progress), May | ||||
2018. | ||||
[RFC1952] Deutsch, P., "GZIP file format specification version 4.3", | [RFC1952] Deutsch, P., "GZIP file format specification version 4.3", | |||
RFC 1952, DOI 10.17487/RFC1952, May 1996, | RFC 1952, DOI 10.17487/RFC1952, May 1996, | |||
<https://www.rfc-editor.org/info/rfc1952>. | <https://www.rfc-editor.org/info/rfc1952>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, <https://www.rfc- | DOI 10.17487/RFC2119, March 1997, | |||
editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | |||
Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, | Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, | |||
<https://www.rfc-editor.org/info/rfc3339>. | <https://www.rfc-editor.org/info/rfc3339>. | |||
[RFC3492] Costello, A., "Punycode: A Bootstring encoding of Unicode | [RFC3492] Costello, A., "Punycode: A Bootstring encoding of Unicode | |||
for Internationalized Domain Names in Applications | for Internationalized Domain Names in Applications | |||
(IDNA)", RFC 3492, DOI 10.17487/RFC3492, March 2003, | (IDNA)", RFC 3492, DOI 10.17487/RFC3492, March 2003, | |||
<https://www.rfc-editor.org/info/rfc3492>. | <https://www.rfc-editor.org/info/rfc3492>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
<https://www.rfc-editor.org/info/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
[RFC4408] Wong, M. and W. Schlitt, "Sender Policy Framework (SPF) | ||||
for Authorizing Use of Domains in E-Mail, Version 1", | ||||
RFC 4408, DOI 10.17487/RFC4408, April 2006, | ||||
<https://www.rfc-editor.org/info/rfc4408>. | ||||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
DOI 10.17487/RFC5234, January 2008, <https://www.rfc- | DOI 10.17487/RFC5234, January 2008, | |||
editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
(CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
<https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
[RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321, | [RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321, | |||
DOI 10.17487/RFC5321, October 2008, <https://www.rfc- | DOI 10.17487/RFC5321, October 2008, | |||
editor.org/info/rfc5321>. | <https://www.rfc-editor.org/info/rfc5321>. | |||
[RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | [RFC5322] Resnick, P., Ed., "Internet Message Format", RFC 5322, | |||
DOI 10.17487/RFC5322, October 2008, <https://www.rfc- | DOI 10.17487/RFC5322, October 2008, | |||
editor.org/info/rfc5322>. | <https://www.rfc-editor.org/info/rfc5322>. | |||
[RFC5891] Klensin, J., "Internationalized Domain Names in | [RFC5891] Klensin, J., "Internationalized Domain Names in | |||
Applications (IDNA): Protocol", RFC 5891, | Applications (IDNA): Protocol", RFC 5891, | |||
DOI 10.17487/RFC5891, August 2010, <https://www.rfc- | DOI 10.17487/RFC5891, August 2010, | |||
editor.org/info/rfc5891>. | <https://www.rfc-editor.org/info/rfc5891>. | |||
[RFC5952] Kawamura, S. and M. Kawashima, "A Recommendation for IPv6 | [RFC5952] Kawamura, S. and M. Kawashima, "A Recommendation for IPv6 | |||
Address Text Representation", RFC 5952, | Address Text Representation", RFC 5952, | |||
DOI 10.17487/RFC5952, August 2010, <https://www.rfc- | DOI 10.17487/RFC5952, August 2010, | |||
editor.org/info/rfc5952>. | <https://www.rfc-editor.org/info/rfc5952>. | |||
[RFC6068] Duerst, M., Masinter, L., and J. Zawinski, "The 'mailto' | [RFC6068] Duerst, M., Masinter, L., and J. Zawinski, "The 'mailto' | |||
URI Scheme", RFC 6068, DOI 10.17487/RFC6068, October 2010, | URI Scheme", RFC 6068, DOI 10.17487/RFC6068, October 2010, | |||
<https://www.rfc-editor.org/info/rfc6068>. | <https://www.rfc-editor.org/info/rfc6068>. | |||
[RFC6125] Saint-Andre, P. and J. Hodges, "Representation and | ||||
Verification of Domain-Based Application Service Identity | ||||
within Internet Public Key Infrastructure Using X.509 | ||||
(PKIX) Certificates in the Context of Transport Layer | ||||
Security (TLS)", RFC 6125, DOI 10.17487/RFC6125, March | ||||
2011, <https://www.rfc-editor.org/info/rfc6125>. | ||||
[RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed., | [RFC6376] Crocker, D., Ed., Hansen, T., Ed., and M. Kucherawy, Ed., | |||
"DomainKeys Identified Mail (DKIM) Signatures", STD 76, | "DomainKeys Identified Mail (DKIM) Signatures", STD 76, | |||
RFC 6376, DOI 10.17487/RFC6376, September 2011, | RFC 6376, DOI 10.17487/RFC6376, September 2011, | |||
<https://www.rfc-editor.org/info/rfc6376>. | <https://www.rfc-editor.org/info/rfc6376>. | |||
[RFC6522] Kucherawy, M., Ed., "The Multipart/Report Media Type for | [RFC6522] Kucherawy, M., Ed., "The Multipart/Report Media Type for | |||
the Reporting of Mail System Administrative Messages", | the Reporting of Mail System Administrative Messages", | |||
STD 73, RFC 6522, DOI 10.17487/RFC6522, January 2012, | STD 73, RFC 6522, DOI 10.17487/RFC6522, January 2012, | |||
<https://www.rfc-editor.org/info/rfc6522>. | <https://www.rfc-editor.org/info/rfc6522>. | |||
[RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | |||
of Named Entities (DANE) Transport Layer Security (TLS) | of Named Entities (DANE) Transport Layer Security (TLS) | |||
Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August | Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August | |||
2012, <https://www.rfc-editor.org/info/rfc6698>. | 2012, <https://www.rfc-editor.org/info/rfc6698>. | |||
[RFC6713] Levine, J., "The 'application/zlib' and 'application/gzip' | [RFC6713] Levine, J., "The 'application/zlib' and 'application/gzip' | |||
Media Types", RFC 6713, DOI 10.17487/RFC6713, August 2012, | Media Types", RFC 6713, DOI 10.17487/RFC6713, August 2012, | |||
<https://www.rfc-editor.org/info/rfc6713>. | <https://www.rfc-editor.org/info/rfc6713>. | |||
[RFC7208] Kitterman, S., "Sender Policy Framework (SPF) for | ||||
Authorizing Use of Domains in Email, Version 1", RFC 7208, | ||||
DOI 10.17487/RFC7208, April 2014, | ||||
<https://www.rfc-editor.org/info/rfc7208>. | ||||
[RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
DOI 10.17487/RFC7231, June 2014, <https://www.rfc- | DOI 10.17487/RFC7231, June 2014, | |||
editor.org/info/rfc7231>. | <https://www.rfc-editor.org/info/rfc7231>. | |||
[RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", | [RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", | |||
RFC 7405, DOI 10.17487/RFC7405, December 2014, | RFC 7405, DOI 10.17487/RFC7405, December 2014, | |||
<https://www.rfc-editor.org/info/rfc7405>. | <https://www.rfc-editor.org/info/rfc7405>. | |||
[RFC7493] Bray, T., Ed., "The I-JSON Message Format", RFC 7493, | [RFC7493] Bray, T., Ed., "The I-JSON Message Format", RFC 7493, | |||
DOI 10.17487/RFC7493, March 2015, <https://www.rfc- | DOI 10.17487/RFC7493, March 2015, | |||
editor.org/info/rfc7493>. | <https://www.rfc-editor.org/info/rfc7493>. | |||
[RFC7671] Dukhovni, V. and W. Hardaker, "The DNS-Based | ||||
Authentication of Named Entities (DANE) Protocol: Updates | ||||
and Operational Guidance", RFC 7671, DOI 10.17487/RFC7671, | ||||
October 2015, <https://www.rfc-editor.org/info/rfc7671>. | ||||
[RFC7672] Dukhovni, V. and W. Hardaker, "SMTP Security via | [RFC7672] Dukhovni, V. and W. Hardaker, "SMTP Security via | |||
Opportunistic DNS-Based Authentication of Named Entities | Opportunistic DNS-Based Authentication of Named Entities | |||
(DANE) Transport Layer Security (TLS)", RFC 7672, | (DANE) Transport Layer Security (TLS)", RFC 7672, | |||
DOI 10.17487/RFC7672, October 2015, <https://www.rfc- | DOI 10.17487/RFC7672, October 2015, | |||
editor.org/info/rfc7672>. | <https://www.rfc-editor.org/info/rfc7672>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8461] Margolis, D., Risher, M., Ramakrishnan, B., Brotman, A., | ||||
and J. Jones, "SMTP MTA Strict Transport Security (MTA- | ||||
STS)", RFC 8461, DOI 10.17487/RFC8461, September 2018, | ||||
<https://www.rfc-editor.org/info/rfc8461>. | ||||
9.2. Informative References | 9.2. Informative References | |||
[RFC3207] Hoffman, P., "SMTP Service Extension for Secure SMTP over | [RFC3207] Hoffman, P., "SMTP Service Extension for Secure SMTP over | |||
Transport Layer Security", RFC 3207, DOI 10.17487/RFC3207, | Transport Layer Security", RFC 3207, DOI 10.17487/RFC3207, | |||
February 2002, <https://www.rfc-editor.org/info/rfc3207>. | February 2002, <https://www.rfc-editor.org/info/rfc3207>. | |||
[RFC3464] Moore, K. and G. Vaudreuil, "An Extensible Message Format | [RFC3464] Moore, K. and G. Vaudreuil, "An Extensible Message Format | |||
for Delivery Status Notifications", RFC 3464, | for Delivery Status Notifications", RFC 3464, | |||
DOI 10.17487/RFC3464, January 2003, <https://www.rfc- | DOI 10.17487/RFC3464, January 2003, | |||
editor.org/info/rfc3464>. | <https://www.rfc-editor.org/info/rfc3464>. | |||
[RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | [RFC3501] Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION | |||
4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003, | 4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003, | |||
<https://www.rfc-editor.org/info/rfc3501>. | <https://www.rfc-editor.org/info/rfc3501>. | |||
[RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | [RFC3864] Klyne, G., Nottingham, M., and J. Mogul, "Registration | |||
Procedures for Message Header Fields", BCP 90, RFC 3864, | Procedures for Message Header Fields", BCP 90, RFC 3864, | |||
DOI 10.17487/RFC3864, September 2004, <https://www.rfc- | DOI 10.17487/RFC3864, September 2004, | |||
editor.org/info/rfc3864>. | <https://www.rfc-editor.org/info/rfc3864>. | |||
[RFC6533] Hansen, T., Ed., Newman, C., and A. Melnikov, | [RFC6533] Hansen, T., Ed., Newman, C., and A. Melnikov, | |||
"Internationalized Delivery Status and Disposition | "Internationalized Delivery Status and Disposition | |||
Notifications", RFC 6533, DOI 10.17487/RFC6533, February | Notifications", RFC 6533, DOI 10.17487/RFC6533, February | |||
2012, <https://www.rfc-editor.org/info/rfc6533>. | 2012, <https://www.rfc-editor.org/info/rfc6533>. | |||
[RFC7321] McGrew, D. and P. Hoffman, "Cryptographic Algorithm | ||||
Implementation Requirements and Usage Guidance for | ||||
Encapsulating Security Payload (ESP) and Authentication | ||||
Header (AH)", RFC 7321, DOI 10.17487/RFC7321, August 2014, | ||||
<https://www.rfc-editor.org/info/rfc7321>. | ||||
[RFC7435] Dukhovni, V., "Opportunistic Security: Some Protection | [RFC7435] Dukhovni, V., "Opportunistic Security: Some Protection | |||
Most of the Time", RFC 7435, DOI 10.17487/RFC7435, | Most of the Time", RFC 7435, DOI 10.17487/RFC7435, | |||
December 2014, <https://www.rfc-editor.org/info/rfc7435>. | December 2014, <https://www.rfc-editor.org/info/rfc7435>. | |||
[RFC7469] Evans, C., Palmer, C., and R. Sleevi, "Public Key Pinning | [RFC7469] Evans, C., Palmer, C., and R. Sleevi, "Public Key Pinning | |||
Extension for HTTP", RFC 7469, DOI 10.17487/RFC7469, April | Extension for HTTP", RFC 7469, DOI 10.17487/RFC7469, April | |||
2015, <https://www.rfc-editor.org/info/rfc7469>. | 2015, <https://www.rfc-editor.org/info/rfc7469>. | |||
[RFC7489] Kucherawy, M., Ed. and E. Zwicky, Ed., "Domain-based | [RFC7489] Kucherawy, M., Ed. and E. Zwicky, Ed., "Domain-based | |||
Message Authentication, Reporting, and Conformance | Message Authentication, Reporting, and Conformance | |||
(DMARC)", RFC 7489, DOI 10.17487/RFC7489, March 2015, | (DMARC)", RFC 7489, DOI 10.17487/RFC7489, March 2015, | |||
<https://www.rfc-editor.org/info/rfc7489>. | <https://www.rfc-editor.org/info/rfc7489>. | |||
[RFC8098] Hansen, T., Ed. and A. Melnikov, Ed., "Message Disposition | [RFC8098] Hansen, T., Ed. and A. Melnikov, Ed., "Message Disposition | |||
Notification", STD 85, RFC 8098, DOI 10.17487/RFC8098, | Notification", STD 85, RFC 8098, DOI 10.17487/RFC8098, | |||
February 2017, <https://www.rfc-editor.org/info/rfc8098>. | February 2017, <https://www.rfc-editor.org/info/rfc8098>. | |||
9.3. URIs | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
[1] Section 2.2.3 | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | ||||
[2] Section 3 | ||||
Appendix A. Example Reporting Policy | Appendix A. Example Reporting Policy | |||
A.1. Report using MAILTO | A.1. Report Using MAILTO | |||
_smtp._tls.mail.example.com. IN TXT \ | _smtp._tls.mail.example.com. IN TXT \ | |||
"v=TLSRPTv1;rua=mailto:reports@example.com" | "v=TLSRPTv1;rua=mailto:reports@example.com" | |||
A.2. Report using HTTPS | A.2. Report Using HTTPS | |||
_smtp._tls.mail.example.com. IN TXT \ | _smtp._tls.mail.example.com. IN TXT \ | |||
"v=TLSRPTv1; \ | "v=TLSRPTv1; \ | |||
rua=https://reporting.example.com/v1/tlsrpt" | rua=https://reporting.example.com/v1/tlsrpt" | |||
Appendix B. Example JSON Report | Appendix B. Example JSON Report | |||
Below is an example JSON report for messages from Company-X to | Below is an example JSON report for messages from Company-X to | |||
Company-Y, where 100 sessions were attempted to Company Y servers | Company-Y, where 100 sessions were attempted to Company-Y servers | |||
with an expired certificate and 200 sessions were attempted to | with an expired certificate, and 200 sessions were attempted to | |||
Company Y servers that did not successfully respond to the "STARTTLS" | Company-Y servers that did not successfully respond to the "STARTTLS" | |||
command. Additionally 3 sessions failed due to | command. Additionally, 3 sessions failed due to | |||
"X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED". | "X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED". | |||
{ | { | |||
"organization-name": "Company-X", | "organization-name": "Company-X", | |||
"date-range": { | "date-range": { | |||
"start-datetime": "2016-04-01T00:00:00Z", | "start-datetime": "2016-04-01T00:00:00Z", | |||
"end-datetime": "2016-04-01T23:59:59Z" | "end-datetime": "2016-04-01T23:59:59Z" | |||
}, | }, | |||
"contact-info": "sts-reporting@company-x.example", | "contact-info": "sts-reporting@company-x.example", | |||
"report-id": "5065427c-23d3-47ca-b6e0-946ea0e8c4be", | "report-id": "5065427c-23d3-47ca-b6e0-946ea0e8c4be", | |||
skipping to change at page 31, line 44 ¶ | skipping to change at page 33, line 17 ¶ | |||
"receiving-ip": "203.0.113.56", | "receiving-ip": "203.0.113.56", | |||
"failed-session-count": 200, | "failed-session-count": 200, | |||
"additional-information": "https://reports.company-x.example/ | "additional-information": "https://reports.company-x.example/ | |||
report_info ? id = 5065427 c - 23 d3# StarttlsNotSupported " | report_info ? id = 5065427 c - 23 d3# StarttlsNotSupported " | |||
}, { | }, { | |||
"result-type": "validation-failure", | "result-type": "validation-failure", | |||
"sending-mta-ip": "198.51.100.62", | "sending-mta-ip": "198.51.100.62", | |||
"receiving-ip": "203.0.113.58", | "receiving-ip": "203.0.113.58", | |||
"receiving-mx-hostname": "mx-backup.mail.company-y.example", | "receiving-mx-hostname": "mx-backup.mail.company-y.example", | |||
"failed-session-count": 3, | "failed-session-count": 3, | |||
"failure-error-code": "X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED" | "failure-reason-code": "X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED" | |||
}] | }] | |||
}] | }] | |||
} | } | |||
Contributors | ||||
Laetitia Baudoin | ||||
Google, Inc. | ||||
lbaudoin@google.com | ||||
Authors' Addresses | Authors' Addresses | |||
Daniel Margolis | Daniel Margolis | |||
Google, Inc | Google, Inc. | |||
Email: dmargolis@google.com | Email: dmargolis@google.com | |||
Alexander Brotman | Alexander Brotman | |||
Comcast, Inc | Comcast, Inc. | |||
Email: alex_brotman@comcast.com | Email: alex_brotman@comcast.com | |||
Binu Ramakrishnan | Binu Ramakrishnan | |||
Yahoo!, Inc | Oath, Inc. | |||
Email: rbinu@oath.com | Email: prbinu@yahoo.com | |||
Janet Jones | Janet Jones | |||
Microsoft, Inc | Microsoft, Inc. | |||
Email: janet.jones@microsoft.com | Email: janet.jones@microsoft.com | |||
Mark Risher | Mark Risher | |||
Google, Inc | Google, Inc. | |||
Email: risher@google.com | Email: risher@google.com | |||
End of changes. 198 change blocks. | ||||
449 lines changed or deleted | 466 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |