rfc9163.original | rfc9163.txt | |||
---|---|---|---|---|
HTTP E. Stark | Internet Engineering Task Force (IETF) E. Stark | |||
Internet-Draft Google | Request for Comments: 9163 Google | |||
Intended status: Experimental December 9, 2018 | Category: Experimental June 2022 | |||
Expires: June 12, 2019 | ISSN: 2070-1721 | |||
Expect-CT Extension for HTTP | Expect-CT Extension for HTTP | |||
draft-ietf-httpbis-expect-ct-08 | ||||
Abstract | Abstract | |||
This document defines a new HTTP header field named Expect-CT, which | This document defines a new HTTP header field named "Expect-CT", | |||
allows web host operators to instruct user agents to expect valid | which allows web host operators to instruct user agents (UAs) to | |||
Signed Certificate Timestamps (SCTs) to be served on connections to | expect valid Signed Certificate Timestamps (SCTs) to be served on | |||
these hosts. Expect-CT allows web host operators to discover | connections to these hosts. Expect-CT allows web host operators to | |||
misconfigurations in their Certificate Transparency deployments. | discover misconfigurations in their Certificate Transparency (CT) | |||
Further, web host operaters can use Expect-CT to ensure that, if a UA | deployments. Further, web host operators can use Expect-CT to ensure | |||
which supports Expect-CT accepts a misissued certificate, that | that if a UA that supports Expect-CT accepts a misissued certificate, | |||
certificate will be discoverable in Certificate Transparency logs. | that certificate will be discoverable in Certificate Transparency | |||
logs. | ||||
Note to Readers | ||||
Discussion of this draft takes place on the HTTP working group | ||||
mailing list (ietf-http-wg@w3.org), which is archived at | ||||
https://lists.w3.org/Archives/Public/ietf-http-wg/ [1]. | ||||
Working Group information can be found at http://httpwg.github.io/ | ||||
[2]; source code and issues list for this draft can be found at | ||||
https://github.com/httpwg/http-extensions/labels/expect-ct [3]. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
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 https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
and may be updated, replaced, or obsoleted by other documents at any | community. This document is a product of the Internet Engineering | |||
time. It is inappropriate to use Internet-Drafts as reference | Task Force (IETF). It represents the consensus of the IETF | |||
material or to cite them other than as "work in progress." | community. It has received public review and has been approved for | |||
publication by the Internet Engineering Steering Group (IESG). Not | ||||
all documents approved by the IESG are candidates for any level of | ||||
Internet Standard; see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on June 12, 2019. | 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/rfc9163. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2022 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 | |||
(https://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 Revised BSD License text as described in Section 4.e of the | |||
the Trust Legal Provisions and are provided without warranty as | Trust Legal Provisions and are provided without warranty as described | |||
described in the Simplified BSD License. | in the Revised BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 | 1.1. Requirements Language | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Terminology | |||
2. Server and Client Behavior . . . . . . . . . . . . . . . . . 5 | 2. Server and Client Behavior | |||
2.1. Response Header Field Syntax . . . . . . . . . . . . . . 5 | 2.1. Response Header Field Syntax | |||
2.1.1. The report-uri Directive . . . . . . . . . . . . . . 6 | 2.1.1. The report-uri Directive | |||
2.1.2. The enforce Directive . . . . . . . . . . . . . . . . 7 | 2.1.2. The enforce Directive | |||
2.1.3. The max-age Directive . . . . . . . . . . . . . . . . 7 | 2.1.3. The max-age Directive | |||
2.1.4. Examples . . . . . . . . . . . . . . . . . . . . . . 7 | 2.1.4. Examples | |||
2.2. Host Processing Model . . . . . . . . . . . . . . . . . . 8 | 2.2. Host Processing Model | |||
2.2.1. HTTP-over-Secure-Transport Request Type . . . . . . . 8 | 2.2.1. HTTP-over-Secure-Transport Request Type | |||
2.2.2. HTTP Request Type . . . . . . . . . . . . . . . . . . 8 | 2.2.2. HTTP Request Type | |||
2.3. User Agent Processing Model . . . . . . . . . . . . . . . 8 | 2.3. User Agent Processing Model | |||
2.3.1. Missing or Malformed Expect-CT Header Fields . . . . 9 | 2.3.1. Missing or Malformed Expect-CT Header Fields | |||
2.3.2. Expect-CT Header Field Processing . . . . . . . . . . 9 | 2.3.2. Expect-CT Header Field Processing | |||
2.3.3. Reporting . . . . . . . . . . . . . . . . . . . . . . 11 | 2.3.3. Reporting | |||
2.4. Evaluating Expect-CT Connections for CT Compliance . . . 11 | 2.4. Evaluating Expect-CT Connections for CT Compliance | |||
2.4.1. Skipping CT compliance checks . . . . . . . . . . . . 12 | 2.4.1. Skipping CT Compliance Checks | |||
3. Reporting Expect-CT Failure . . . . . . . . . . . . . . . . . 12 | 3. Reporting Expect-CT Failure | |||
3.1. Generating a violation report . . . . . . . . . . . . . . 12 | 3.1. Generating a Violation Report | |||
3.2. Sending a violation report . . . . . . . . . . . . . . . 14 | 3.2. Sending a Violation Report | |||
3.3. Receiving a violation report . . . . . . . . . . . . . . 15 | 3.3. Receiving a Violation Report | |||
4. Usability Considerations . . . . . . . . . . . . . . . . . . 16 | 4. Usability Considerations | |||
5. Authoring Considerations . . . . . . . . . . . . . . . . . . 16 | 5. Authoring Considerations | |||
6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 16 | 6. Privacy Considerations | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 7. Security Considerations | |||
7.1. Hostile header attacks . . . . . . . . . . . . . . . . . 17 | 7.1. Hostile Header Attacks | |||
7.2. Maximum max-age . . . . . . . . . . . . . . . . . . . . . 17 | 7.2. Maximum max-age | |||
7.3. Amplification attacks . . . . . . . . . . . . . . . . . . 18 | 7.3. Amplification Attacks | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | 8. IANA Considerations | |||
8.1. Header Field Registry . . . . . . . . . . . . . . . . . . 18 | 8.1. Header Field Registry | |||
8.2. Media Types Registry . . . . . . . . . . . . . . . . . . 18 | 8.2. Media Types Registry | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 9. References | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 19 | 9.1. Normative References | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 21 | 9.2. Informative References | |||
9.3. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | Author's Address | |||
Appendix A. Changes . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
A.1. Since -07 . . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
A.2. Since -06 . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
A.3. Since -05 . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
A.4. Since -04 . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
A.5. Since -03 . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
A.6. Since -02 . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
A.7. Since -01 . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
A.8. Since -00 . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 23 | ||||
1. Introduction | 1. Introduction | |||
This document defines a new HTTP header field that enables UAs to | This document defines a new HTTP header field ([RFC9110], | |||
identify web hosts that expect the presence of Signed Certificate | Section 6.3) that enables UAs to identify web hosts that expect the | |||
Timestamps (SCTs) [I-D.ietf-trans-rfc6962-bis] in subsequent | presence of Signed Certificate Timestamps (SCTs) [RFC9162] in | |||
Transport Layer Security (TLS) [RFC8446] connections. | subsequent Transport Layer Security (TLS) [RFC8446] connections. | |||
Web hosts that serve the Expect-CT HTTP header field are noted by the | Web hosts that serve the Expect-CT header field are noted by the UA | |||
UA as Known Expect-CT Hosts. The UA evaluates each connection to a | as "Known Expect-CT Hosts". The UA evaluates each connection to a | |||
Known Expect-CT Host for compliance with the UA's Certificate | Known Expect-CT Host for compliance with the UA's Certificate | |||
Transparency (CT) Policy. If the connection violates the CT Policy, | Transparency (CT) Policy. If the connection violates the CT Policy, | |||
the UA sends a report to a URI configured by the Expect-CT Host and/ | the UA sends a report to a URI configured by the Expect-CT Host and/ | |||
or fails the connection, depending on the configuration that the | or fails the connection, depending on the configuration that the | |||
Expect-CT Host has chosen. | Expect-CT Host has chosen. | |||
If misconfigured, Expect-CT can cause unwanted connection failures | If misconfigured, Expect-CT can cause unwanted connection failures | |||
(for example, if a host deploys Expect-CT but then switches to a | (for example, if a host deploys Expect-CT but then switches to a | |||
legitimate certificate that is not logged in Certificate Transparency | legitimate certificate that is not logged in Certificate Transparency | |||
logs, or if a web host operator believes their certificate to conform | logs or if a web host operator believes their certificate to conform | |||
to all UAs' CT policies but is mistaken). Web host operators are | to all UAs' CT policies but is mistaken). Web host operators are | |||
advised to deploy Expect-CT with precautions, by using the reporting | advised to deploy Expect-CT with precautions by using the reporting | |||
feature and gradually increasing the time interval during which the | feature and gradually increasing the time interval during which the | |||
UA regards the host as a Known Expect-CT Host. These precautions can | UA regards the host as a Known Expect-CT Host. These precautions can | |||
help web host operators gain confidence that their Expect-CT | help web host operators gain confidence that their Expect-CT | |||
deployment is not causing unwanted connection failures. | deployment is not causing unwanted connection failures. | |||
Expect-CT is a trust-on-first-use (TOFU) mechanism. The first time a | Expect-CT is a trust-on-first-use (TOFU) mechanism. The first time a | |||
UA connects to a host, it lacks the information necessary to require | UA connects to a host, it lacks the information necessary to require | |||
SCTs for the connection. Thus, the UA will not be able to detect and | SCTs for the connection. Thus, the UA will not be able to detect and | |||
thwart an attack on the UA's first connection to the host. Still, | thwart an attack on the UA's first connection to the host. Still, | |||
Expect-CT provides value by 1) allowing UAs to detect the use of | Expect-CT provides value by 1) allowing UAs to detect the use of | |||
unlogged certificates after the initial communication, and 2) | unlogged certificates after the initial communication, and 2) | |||
allowing web hosts to be confident that UAs are only trusting | allowing web hosts to be confident that UAs are only trusting | |||
publicly-auditable certificates. | publicly auditable certificates. | |||
Expect-CT is similar to HSTS [RFC6797] and HPKP [RFC7469]. HSTS | Expect-CT is similar to HTTP Strict Transport Security (HSTS) | |||
allows web sites to declare themselves accessible only via secure | [RFC6797] and HTTP Public Key Pinning (HPKP) [RFC7469]. HSTS allows | |||
connections, and HPKP allows web sites to declare their cryptographic | websites to declare themselves accessible only via secure | |||
identifies. Similarly, Expect-CT allows web sites to declare | connections, and HPKP allows websites to declare their cryptographic | |||
identifies. Similarly, Expect-CT allows websites to declare | ||||
themselves accessible only via connections that are compliant with CT | themselves accessible only via connections that are compliant with CT | |||
policy. | Policy. | |||
This Expect-CT specification is compatible with [RFC6962] and | This Expect-CT specification is compatible with [RFC6962] and | |||
[I-D.ietf-trans-rfc6962-bis], but not with future versions of | [RFC9162], but not necessarily with future versions of Certificate | |||
Certificate Transparency. Expect-CT header fields will be ignore | Transparency. UAs will ignore Expect-CT header fields from web hosts | |||
from web hosts which use future versions of Certificate Transparency, | that use future versions of Certificate Transparency, unless a future | |||
unless a future version of this document specifies how they should be | version of this document specifies how they should be processed. | |||
processed. | ||||
1.1. Requirements Language | 1.1. Requirements Language | |||
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 BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
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. | |||
1.2. Terminology | 1.2. Terminology | |||
Terminology is defined in this section. | Terminology is defined in this section. | |||
o "Certificate Transparency Policy" is a policy defined by the UA | "Certificate Transparency Policy" | |||
concerning the number, sources, and delivery mechanisms of Signed | A policy defined by the UA concerning the number, sources, and | |||
Certificate Timestamps that are associated with TLS connections. | delivery mechanisms of Signed Certificate Timestamps that are | |||
The policy defines the properties of a connection that must be met | associated with TLS connections. The policy defines the | |||
in order for the UA to consider it CT-qualified. | properties of a connection that must be met in order for the UA to | |||
consider it CT qualified. | ||||
o "Certificate Transparency Qualified" describes a TLS connection | "Certificate Transparency Qualified" | |||
for which the UA has determined that a sufficient quantity and | Describes a TLS connection for which the UA has determined that a | |||
quality of Signed Certificate Timestamps have been provided. | sufficient quantity and quality of Signed Certificate Timestamps | |||
have been provided. | ||||
o "CT-qualified" is an abbreviation for "Certificate Transparency | "CT Qualified" | |||
Qualified". | An abbreviation for "Certificate Transparency Qualified". | |||
o "CT Policy" is an abbreviation for "Certificate Transparency | "CT Policy" | |||
Policy". | An abbreviation for "Certificate Transparency Policy". | |||
o "Effective Expect-CT Date" is the time at which a UA observed a | "Effective Expect-CT Date" | |||
valid Expect-CT header field for a given host. | The time at which a UA observed a valid Expect-CT header field for | |||
a given host. | ||||
o "Expect-CT Host" is a conformant host implementing the HTTP server | "Expect-CT Host" | |||
aspects of Expect-CT. This means that an Expect-CT Host returns | A conformant host implementing the HTTP server aspects of Expect- | |||
the "Expect-CT" HTTP response header field in its HTTP response | CT. This means that an Expect-CT Host returns the Expect-CT | |||
messages sent over secure transport. The term "host" is | response header field in its HTTP response messages sent over | |||
equivalent to "server" in this specification. | secure transport. The term "host" is equivalent to "server" in | |||
this specification. | ||||
o "Known Expect-CT Host" is an Expect-CT Host that the UA has noted | "Known Expect-CT Host" | |||
as such. See Section 2.3.2.1 for particulars. | An Expect-CT Host that the UA has noted as such. See | |||
Section 2.3.2.1 for particulars. | ||||
o UA is an acronym for "user agent". For the purposes of this | "User Agent (UA)" | |||
specification, a UA is an HTTP client application typically | For the purposes of this specification, a UA is an HTTP client | |||
actively manipulated by a user [RFC7230]. | application typically actively manipulated by a user [RFC9110]. | |||
o "Unknown Expect-CT Host" is an Expect-CT Host that the UA has not | "Unknown Expect-CT Host" | |||
noted. | An Expect-CT Host that the UA has not noted. | |||
2. Server and Client Behavior | 2. Server and Client Behavior | |||
2.1. Response Header Field Syntax | 2.1. Response Header Field Syntax | |||
The "Expect-CT" response header field is a new field defined in this | The Expect-CT response header field is a new field defined in this | |||
specification. It is used by a server to indicate that UAs should | specification. It is used by a server to indicate that UAs should | |||
evaluate connections to the host emitting the header field for CT | evaluate connections to the host emitting the header field for CT | |||
compliance (Section 2.4). | compliance (Section 2.4). | |||
Figure 1 describes the syntax (Augmented Backus-Naur Form) of the | Figure 1 describes the syntax (Augmented Backus-Naur Form) of the | |||
header field, using the grammar defined in [RFC5234] and the rules | header field, using the grammar defined in [RFC5234] and the rules | |||
defined in Section 3.2 of [RFC7230]. The "#" ABNF extension is | defined in Section 5 of [RFC9110]. The "#" ABNF extension is | |||
specified in Section 7 of [RFC7230]. | specified in Section 5.6.1 of [RFC9110]. | |||
Expect-CT = 1#expect-ct-directive | Expect-CT = 1#expect-ct-directive | |||
expect-ct-directive = directive-name [ "=" directive-value ] | expect-ct-directive = directive-name [ "=" directive-value ] | |||
directive-name = token | directive-name = token | |||
directive-value = token / quoted-string | directive-value = token / quoted-string | |||
Figure 1: Syntax of the Expect-CT header field | Figure 1: Syntax of the Expect-CT Header Field | |||
The directives defined in this specification are described below. | The directives defined in this specification are described below. | |||
The overall requirements for directives are: | The overall requirements for directives are: | |||
1. The order of appearance of directives is not significant. | 1. The order of appearance of directives is not significant. | |||
2. A given directive MUST NOT appear more than once in a given | 2. A given directive MUST NOT appear more than once in a given | |||
header field. Directives are either optional or required, as | header field. Directives are either optional or required, as | |||
stipulated in their definitions. | stipulated in their definitions. | |||
3. Directive names are case insensitive. | 3. Directive names are case insensitive. | |||
4. UAs MUST ignore any header fields containing directives, or other | 4. UAs MUST ignore any header fields containing directives, or other | |||
header field value data that do not conform to the syntax defined | header field value data that does not conform to the syntax | |||
in this specification. In particular, UAs MUST NOT attempt to | defined in this specification. In particular, UAs MUST NOT | |||
fix malformed header fields. | attempt to fix malformed header fields. | |||
5. If a header field contains any directive(s) the UA does not | 5. If a header field contains any directive(s) the UA does not | |||
recognize, the UA MUST ignore those directives. | recognize, the UA MUST ignore those directives. | |||
6. If the Expect-CT header field otherwise satisfies the above | 6. If the Expect-CT header field otherwise satisfies the above | |||
requirements (1 through 5), and Expect-CT is not disabled for | requirements (1 through 5), and Expect-CT is not disabled for | |||
local policy reasons (as discussed in Section 2.4.1), the UA MUST | local policy reasons (as discussed in Section 2.4.1), the UA MUST | |||
process the directives it recognizes. | process the directives it recognizes. | |||
2.1.1. The report-uri Directive | 2.1.1. The report-uri Directive | |||
The OPTIONAL "report-uri" directive indicates the URI to which the UA | The OPTIONAL report-uri directive indicates the URI to which the UA | |||
SHOULD report Expect-CT failures (Section 2.4). The UA POSTs the | SHOULD report Expect-CT failures (Section 2.4). The UA POSTs the | |||
reports to the given URI as described in Section 3. | reports to the given URI as described in Section 3. | |||
The "report-uri" directive is REQUIRED to have a directive value, for | The report-uri directive is REQUIRED to have a directive value, for | |||
which the syntax is defined in Figure 2. | which the syntax is defined in Figure 2. | |||
report-uri-value = absolute-URI | report-uri-value = (DQUOTE absolute-URI DQUOTE) / absolute-URI | |||
Figure 2: Syntax of the report-uri directive value | Figure 2: Syntax of the report-uri Directive Value | |||
"absolute-URI" is defined in Section 4.3 of [RFC3986]. | The 'report-uri-value' MUST be quoted if it contains any character | |||
not allowed in 'token'. | ||||
UAs MUST ignore "report-uri"s that do not use the HTTPS scheme. UAs | absolute-URI is defined in Section 4.3 of [RFC3986]. | |||
MUST check Expect-CT compliance when the host in the "report-uri" is | ||||
a Known Expect-CT Host; similarly, UAs MUST apply HSTS [RFC6797] if | UAs MUST ignore any report-uri that does not use the HTTPS scheme. | |||
the host in the "report-uri" is a Known HSTS Host. | UAs MUST check Expect-CT compliance when the host in the report-uri | |||
is a Known Expect-CT Host; similarly, UAs MUST apply HSTS [RFC6797] | ||||
if the host in the report-uri is a Known HSTS Host. | ||||
UAs SHOULD make their best effort to report Expect-CT failures to the | UAs SHOULD make their best effort to report Expect-CT failures to the | |||
"report-uri", but they may fail to report in exceptional conditions. | report-uri, but they may fail to report in exceptional conditions. | |||
For example, if connecting to the "report-uri" itself incurs an | For example, if connecting to the report-uri itself incurs an Expect- | |||
Expect-CT failure or other certificate validation failure, the UA | CT failure or other certificate validation failure, the UA MUST | |||
MUST cancel the connection. Similarly, if Expect-CT Host A sets a | cancel the connection. Similarly, if Expect-CT Host A sets a report- | |||
"report-uri" referring to Expect-CT Host B, and if B sets a "report- | uri referring to Expect-CT Host B, and if B sets a report-uri | |||
uri" referring to A, and if both hosts fail to comply to the UA's CT | referring to A, and if both hosts fail to comply to the UA's CT | |||
Policy, the UA SHOULD detect and break the loop by failing to send | Policy, the UA SHOULD detect and break the loop by failing to send | |||
reports to and about those hosts. | reports to and about those hosts. | |||
Note that the report-uri need not necessarily be in the same Internet | Note that the report-uri need not necessarily be in the same Internet | |||
domain or web origin as the host being reported about. Hosts are in | domain or web origin as the host being reported about. Hosts are in | |||
fact encouraged to use a separate host as the report-uri, so that CT | fact encouraged to use a separate host as the report-uri so that CT | |||
failures on the Expect-CT host do not prevent reports from being | failures on the Expect-CT Host do not prevent reports from being | |||
sent. | sent. | |||
UAs SHOULD limit the rate at which they send reports. For example, | UAs SHOULD limit the rate at which they send reports. For example, | |||
it is unnecessary to send the same report to the same "report-uri" | it is unnecessary to send the same report to the same report-uri more | |||
more than once in the same web browsing session. | than once in the same web-browsing session. | |||
2.1.2. The enforce Directive | 2.1.2. The enforce Directive | |||
The OPTIONAL "enforce" directive is a valueless directive that, if | The OPTIONAL enforce directive is a valueless directive that, if | |||
present (i.e., it is "asserted"), signals to the UA that compliance | present (i.e., it is "asserted"), signals to the UA that compliance | |||
to the CT Policy should be enforced (rather than report-only) and | to the CT Policy should be enforced (rather than report-only) and | |||
that the UA should refuse future connections that violate its CT | that the UA should refuse future connections that violate its CT | |||
Policy. When both the "enforce" directive and "report-uri" directive | Policy. When both the enforce directive and report-uri directive (as | |||
(as defined in Figure 2) are present, the configuration is referred | defined in Figure 2) are present, the configuration is referred to as | |||
to as an "enforce-and-report" configuration, signalling to the UA | an "enforce-and-report" configuration, signaling to the UA that both | |||
both that compliance to the CT Policy should be enforced and that | compliance to the CT Policy should be enforced and violations should | |||
violations should be reported. | be reported. | |||
2.1.3. The max-age Directive | 2.1.3. The max-age Directive | |||
The "max-age" directive specifies the number of seconds after the | The max-age directive specifies the number of seconds after the | |||
reception of the Expect-CT header field during which the UA SHOULD | reception of the Expect-CT header field during which the UA SHOULD | |||
regard the host from whom the message was received as a Known Expect- | regard the host from whom the message was received as a Known Expect- | |||
CT Host. | CT Host. | |||
If a response contains an "Expect-CT" header field, then the response | If a response contains an Expect-CT header field, then the response | |||
MUST contain an "Expect-CT" header field with a "max-age" directive. | MUST contain an Expect-CT header field with a max-age directive. (A | |||
(A "max-age" directive need not appear in every "Expect-CT" header | max-age directive need not appear in every Expect-CT header field in | |||
field in the response.) The "max-age" directive is REQUIRED to have | the response.) The max-age directive is REQUIRED to have a directive | |||
a directive value, for which the syntax (after quoted-string | value, for which the syntax (after quoted-string unescaping, if | |||
unescaping, if necessary) is defined in Figure 3. | necessary) is defined in Figure 3. | |||
max-age-value = delta-seconds | max-age-value = delta-seconds | |||
delta-seconds = 1*DIGIT | delta-seconds = 1*DIGIT | |||
Figure 3: Syntax of the max-age directive value | Figure 3: Syntax of the max-age Directive Value | |||
"delta-seconds" is used as defined in Section 1.2.1 of [RFC7234]. | delta-seconds is used as defined in Section 1.3 of [RFC9111]. | |||
2.1.4. Examples | 2.1.4. Examples | |||
The following three examples demonstrate valid Expect-CT response | The following three examples demonstrate valid Expect-CT response | |||
header fields (where the second splits the directives into two field | header fields (where the second splits the directives into two field | |||
instances): | instances): | |||
Expect-CT: max-age=86400, enforce | Expect-CT: max-age=86400, enforce | |||
Expect-CT: max-age=86400,enforce | Expect-CT: max-age=86400,enforce | |||
Expect-CT: report-uri="https://foo.example/report" | Expect-CT: report-uri="https://foo.example/report" | |||
Expect-CT: max-age=86400,report-uri="https://foo.example/report" | Expect-CT: max-age=86400,report-uri="https://foo.example/report" | |||
Figure 4: Examples of valid Expect-CT response header fields | Figure 4: Examples of Valid Expect-CT ResponseHeader Fields | |||
2.2. Host Processing Model | 2.2. Host Processing Model | |||
This section describes the processing model that Expect-CT Hosts | This section describes the processing model that Expect-CT Hosts | |||
implement. The model has 2 parts: (1) the processing rules for HTTP | implement. The model has 2 parts: (1) the processing rules for HTTP | |||
request messages received over a secure transport (e.g., | request messages received over a secure transport (e.g., | |||
authenticated, non-anonymous TLS); and (2) the processing rules for | authenticated, non-anonymous TLS); and (2) the processing rules for | |||
HTTP request messages received over non-secure transports, such as | HTTP request messages received over non-secure transports, such as | |||
TCP. | TCP. | |||
skipping to change at page 8, line 35 ¶ | skipping to change at line 351 ¶ | |||
An Expect-CT Host includes an Expect-CT header field in its response. | An Expect-CT Host includes an Expect-CT header field in its response. | |||
The header field MUST satisfy the grammar specified in Section 2.1. | The header field MUST satisfy the grammar specified in Section 2.1. | |||
Establishing a given host as an Expect-CT Host, in the context of a | Establishing a given host as an Expect-CT Host, in the context of a | |||
given UA, is accomplished as follows: | given UA, is accomplished as follows: | |||
1. Over the HTTP protocol running over secure transport, by | 1. Over the HTTP protocol running over secure transport, by | |||
correctly returning (per this specification) a valid Expect-CT | correctly returning (per this specification) a valid Expect-CT | |||
header field to the UA. | header field to the UA. | |||
2. Through other mechanisms, such as a client-side preloaded Expect- | 2. Through other mechanisms such as a client-side preloaded Expect- | |||
CT Host list. | CT Host list. | |||
2.2.2. HTTP Request Type | 2.2.2. HTTP Request Type | |||
Expect-CT Hosts SHOULD NOT include the Expect-CT header field in HTTP | Expect-CT Hosts SHOULD NOT include the Expect-CT header field in HTTP | |||
responses conveyed over non-secure transport. | responses conveyed over non-secure transport. | |||
2.3. User Agent Processing Model | 2.3. User Agent Processing Model | |||
The UA processing model relies on parsing domain names. Note that | The UA processing model relies on parsing domain names. Note that | |||
internationalized domain names SHALL be canonicalized by the UA | internationalized domain names SHALL be canonicalized by the UA | |||
according to the scheme in Section 10 of [RFC6797]. | according to the scheme in Section 10 of [RFC6797]. | |||
The UA stores Known Expect-CT Hosts and their associated Expect-CT | The UA stores Known Expect-CT Hosts and their associated Expect-CT | |||
directives. This data is collectively known as a host's "Expect-CT" | directives. This data is collectively known as a host's "Expect-CT | |||
metadata". | metadata". | |||
2.3.1. Missing or Malformed Expect-CT Header Fields | 2.3.1. Missing or Malformed Expect-CT Header Fields | |||
If an HTTP response does not include an Expect-CT header field that | If an HTTP response does not include an Expect-CT header field that | |||
conforms to the grammar specified in Section 2.1, then the UA MUST | conforms to the grammar specified in Section 2.1, then the UA MUST | |||
NOT update any Expect-CT metadata. | NOT update any Expect-CT metadata. | |||
2.3.2. Expect-CT Header Field Processing | 2.3.2. Expect-CT Header Field Processing | |||
If the UA receives an HTTP response over a secure transport that | If the UA receives an HTTP response over a secure transport that | |||
includes an Expect-CT header field conforming to the grammar | includes an Expect-CT header field conforming to the grammar | |||
specified in Section 2.1, the UA MUST evaluate the connection on | specified in Section 2.1, the UA MUST evaluate the connection on | |||
which the header field was received for compliance with the UA's CT | which the header field was received for compliance with the UA's CT | |||
Policy, and then process the Expect-CT header field as follows. UAs | Policy, and then process the Expect-CT header field as follows. UAs | |||
MUST ignore any Expect-CT header field received in an HTTP response | MUST ignore any Expect-CT header field received in an HTTP response | |||
conveyed over non-secure transport. | conveyed over non-secure transport. | |||
If the connection does not comply with the UA's CT Policy (i.e., the | If the connection does not comply with the UA's CT Policy (i.e., the | |||
connection is not CT-qualified), then the UA MUST NOT update any | connection is not CT qualified), then the UA MUST NOT update any | |||
Expect-CT metadata. If the header field includes a "report-uri" | Expect-CT metadata. If the header field includes a report-uri | |||
directive, the UA SHOULD send a report to the specified "report-uri" | directive, the UA SHOULD send a report to the specified report-uri | |||
(Section 2.3.3). | (Section 2.3.3). | |||
If the connection complies with the UA's CT Policy (i.e., the | If the connection complies with the UA's CT Policy (i.e., the | |||
connection is CT-qualified), then the UA MUST either: | connection is CT qualified), then the UA MUST either: | |||
o Note the host as a Known Expect-CT Host if it is not already so | * Note the host as a Known Expect-CT Host if it is not already so | |||
noted (see Section 2.3.2.1), or | noted (see Section 2.3.2.1) or | |||
o Update the UA's cached information for the Known Expect-CT Host if | * Update the UA's cached information for the Known Expect-CT Host if | |||
the "enforce", "max-age", or "report-uri" header field value | the enforce, max-age, or report-uri header field value directives | |||
directives convey information different from that already | convey information different from that already maintained by the | |||
maintained by the UA. If the "max-age" directive has a value of | UA. If the max-age directive has a value of 0, the UA MUST remove | |||
0, the UA MUST remove its cached Expect-CT information if the host | its cached Expect-CT information if the host was previously noted | |||
was previously noted as a Known Expect-CT Host, and MUST NOT note | as a Known Expect-CT Host and MUST NOT note this host as a Known | |||
this host as a Known Expect-CT Host if it is not already noted. | Expect-CT Host if it is not already noted. | |||
If a UA receives an Expect-CT header field over a CT-compliant | If a UA receives an Expect-CT header field over a CT-compliant | |||
connection which uses a version of Certificate Transparency other | connection that uses a version of Certificate Transparency other than | |||
than [RFC6962] or [I-D.ietf-trans-rfc6962-bis], the UA MUST ignore | [RFC6962] or [RFC9162], the UA MUST ignore the Expect-CT header field | |||
the Expect-CT header field and clear any Expect-CT metadata | and clear any Expect-CT metadata associated with the host. | |||
associated with the host. | ||||
2.3.2.1. Noting Expect-CT | 2.3.2.1. Noting Expect-CT | |||
Upon receipt of the Expect-CT response header field over an error- | Upon receipt of the Expect-CT response header field over an error- | |||
free TLS connection (with X.509 certificate chain validation as | free TLS connection (with X.509 certificate chain validation as | |||
described in [RFC5280], as well as the validation described in | described in [RFC5280], as well as the validation described in | |||
Section 2.4), the UA MUST note the host as a Known Expect-CT Host, | Section 2.4 of this document), the UA MUST note the host as a Known | |||
storing the host's domain name and its associated Expect-CT | Expect-CT Host, storing the host's domain name and its associated | |||
directives in non-volatile storage. | Expect-CT directives in non-volatile storage. | |||
To note a host as a Known Expect-CT Host, the UA MUST set its Expect- | To note a host as a Known Expect-CT Host, the UA MUST set its Expect- | |||
CT metadata in its Known Expect-CT Host cache (as specified in | CT metadata in its Known Expect-CT Host cache (as specified in | |||
Section 2.3.2.2, using the metadata given in the most recently | Section 2.3.2.2), using the metadata given in the most recently | |||
received valid Expect-CT header field. | received valid Expect-CT header field. | |||
For forward compatibility, the UA MUST ignore any unrecognized | For forward compatibility, the UA MUST ignore any unrecognized | |||
Expect-CT header field directives, while still processing those | Expect-CT header field directives while still processing those | |||
directives it does recognize. Section 2.1 specifies the directives | directives it does recognize. Section 2.1 specifies the directives | |||
"enforce", "max-age", and "report-uri", but future specifications and | enforce, max-age, and report-uri, but future specifications and | |||
implementations might use additional directives. | implementations might use additional directives. | |||
2.3.2.2. Storage Model | 2.3.2.2. Storage Model | |||
If the substring matching the host production from the Request-URI | If the substring matching the host production from the Request-URI | |||
(of the message to which the host responded) does not exactly match | (of the message to which the host responded) does not exactly match | |||
an existing Known Expect-CT Host's domain name, per the matching | an existing Known Expect-CT Host's domain name, per the matching | |||
procedure for a Congruent Match specified in Section 8.2 of | procedure for a Congruent Match specified in Section 8.2 of | |||
[RFC6797], then the UA MUST add this host to the Known Expect-CT Host | [RFC6797], then the UA MUST add this host to the Known Expect-CT Host | |||
cache. The UA caches: | cache. The UA caches: | |||
o the Expect-CT Host's domain name, | * the Expect-CT Host's domain name. | |||
o whether the "enforce" directive is present | * whether the enforce directive is present. | |||
o the Effective Expiration Date, which is the Effective Expect-CT | * the Effective Expiration Date, which is the Effective Expect-CT | |||
Date plus the value of the "max-age" directive. Alternatively, | Date plus the value of the max-age directive. Alternatively, the | |||
the UA MAY cache enough information to calculate the Effective | UA MAY cache enough information to calculate the Effective | |||
Expiration Date. The Effective Expiration Date is calculated from | Expiration Date. The Effective Expiration Date is calculated from | |||
when the UA observed the Expect-CT header field and is independent | when the UA observed the Expect-CT header field and is independent | |||
of when the response was generated. | of when the response was generated. | |||
o the value of the "report-uri" directive, if present. | * the value of the report-uri directive, if present. | |||
If any other metadata from optional or future Expect-CT header | If any other metadata from optional or future Expect-CT header | |||
directives are present in the Expect-CT header field, and the UA | directives are present in the Expect-CT header field, and the UA | |||
understands them, the UA MAY note them as well. | understands them, the UA MAY note them as well. | |||
UAs MAY set an upper limit on the value of max-age, so that UAs that | UAs MAY set an upper limit on the value of max-age so that UAs that | |||
have noted erroneous Expect-CT hosts (whether by accident or due to | have noted erroneous Expect-CT Hosts (whether by accident or due to | |||
attack) have some chance of recovering over time. If the server sets | attack) have some chance of recovering over time. If the server sets | |||
a max-age greater than the UA's upper limit, the UA may behave as if | a max-age greater than the UA's upper limit, the UA may behave as if | |||
the server set the max-age to the UA's upper limit. For example, if | the server set the max-age to the UA's upper limit. For example, if | |||
the UA caps max-age at 5,184,000 seconds (60 days), and an Expect-CT | the UA caps max-age at 5,184,000 seconds (60 days), and an Expect-CT | |||
Host sets a max- age directive of 90 days in its Expect-CT header | Host sets a max-age directive of 90 days in its Expect-CT header | |||
field, the UA may behave as if the max-age were effectively 60 days. | field, the UA may behave as if the max-age were effectively 60 days. | |||
(One way to achieve this behavior is for the UA to simply store a | (One way to achieve this behavior is for the UA to simply store a | |||
value of 60 days instead of the 90-day value provided by the Expect- | value of 60 days instead of the 90-day value provided by the Expect- | |||
CT host.) | CT Host.) | |||
2.3.3. Reporting | 2.3.3. Reporting | |||
If the UA receives, over a secure transport, an HTTP response that | If the UA receives, over a secure transport, an HTTP response that | |||
includes an Expect-CT header field with a "report-uri" directive, and | includes an Expect-CT header field with a report-uri directive, and | |||
the connection does not comply with the UA's CT Policy (i.e., the | the connection does not comply with the UA's CT Policy (i.e., the | |||
connection is not CT-qualified), and the UA has not already sent an | connection is not CT qualified), and the UA has not already sent an | |||
Expect-CT report for this connection, then the UA SHOULD send a | Expect-CT report for this connection, then the UA SHOULD send a | |||
report to the specified "report-uri" as specified in Section 3. | report to the specified report-uri as specified in Section 3. | |||
2.4. Evaluating Expect-CT Connections for CT Compliance | 2.4. Evaluating Expect-CT Connections for CT Compliance | |||
When a UA sets up a TLS connection, the UA determines whether the | When a UA sets up a TLS connection, the UA determines whether the | |||
host is a Known Expect-CT Host according to its Known Expect-CT Host | host is a Known Expect-CT Host according to its Known Expect-CT Host | |||
cache. An Expect-CT Host is "expired" if the effective expiration | cache. An Expect-CT Host is "expired" if the Effective Expiration | |||
date refers to a date in the past. The UA MUST ignore any expired | Date refers to a date in the past. The UA MUST ignore any expired | |||
Expect-CT Hosts in its cache and not treat such hosts as Known | Expect-CT Hosts in its cache and not treat such hosts as Known | |||
Expect-CT hosts. | Expect-CT Hosts. | |||
When a UA connects to a Known Expect-CT Host using a TLS connection, | When a UA connects to a Known Expect-CT Host using a TLS connection, | |||
if the TLS connection has no errors, then the UA will apply an | if the TLS connection has no errors, then the UA will apply an | |||
additional correctness check: compliance with a CT Policy. A UA | additional correctness check: compliance with a CT Policy. A UA | |||
should evaluate compliance with its CT Policy whenever connecting to | should evaluate compliance with its CT Policy whenever connecting to | |||
a Known Expect-CT Host. However, the check can be skipped for local | a Known Expect-CT Host. However, the check can be skipped for local | |||
policy reasons (as discussed in Section 2.4.1), or in the event that | policy reasons (as discussed in Section 2.4.1) or in the event that | |||
other checks cause the UA to terminate the connection before CT | other checks cause the UA to terminate the connection before CT | |||
compliance is evaluated. For example, a Public Key Pinning failure | compliance is evaluated. For example, a Public Key Pinning failure | |||
[RFC7469] could cause the UA to terminate the connection before CT | [RFC7469] could cause the UA to terminate the connection before CT | |||
compliance is checked. Similarly, if the UA terminates the | compliance is checked. Similarly, if the UA terminates the | |||
connection due to an Expect-CT failure, this could cause the UA to | connection due to an Expect-CT failure, this could cause the UA to | |||
skip subsequent correctness checks. When the CT compliance check is | skip subsequent correctness checks. When the CT compliance check is | |||
skipped or bypassed, Expect-CT reports (Section 3) will not be sent. | skipped or bypassed, Expect-CT reports (Section 3) will not be sent. | |||
When CT compliance is evaluated for a Known Expect-CT Host, the UA | When CT compliance is evaluated for a Known Expect-CT Host, the UA | |||
MUST evaluate compliance when setting up the TLS session, before | MUST evaluate compliance when setting up the TLS session, before | |||
beginning an HTTP conversation over the TLS channel. | beginning an HTTP conversation over the TLS channel. | |||
If a connection to a Known Expect-CT Host violates the UA's CT policy | If a connection to a Known Expect-CT Host violates the UA's CT Policy | |||
(i.e., the connection is not CT-qualified), and if the Known Expect- | (i.e., the connection is not CT qualified), and if the Known Expect- | |||
CT Host's Expect-CT metadata indicates an "enforce" configuration, | CT Host's Expect-CT metadata indicates an enforce configuration, the | |||
the UA MUST treat the CT compliance failure as an error. The UA MAY | UA MUST treat the CT compliance failure as an error. The UA MAY | |||
allow the user to bypass the error, unless connection errors should | allow the user to bypass the error unless connection errors should | |||
have no user recourse due to other policies in effect (such as HSTS, | have no user recourse due to other policies in effect (such as HSTS, | |||
as described in Section 12.1 of [RFC6797]. | as described in Section 12.1 of [RFC6797]). | |||
If a connection to a Known Expect-CT Host violates the UA's CT | If a connection to a Known Expect-CT Host violates the UA's CT | |||
policy, and if the Known Expect-CT Host's Expect-CT metadata includes | Policy, and if the Known Expect-CT Host's Expect-CT metadata includes | |||
a "report-uri", the UA SHOULD send an Expect-CT report to that | a report-uri, the UA SHOULD send an Expect-CT report to that report- | |||
"report-uri" (Section 3). | uri (Section 3). | |||
2.4.1. Skipping CT compliance checks | 2.4.1. Skipping CT Compliance Checks | |||
It is acceptable for a UA to skip CT compliance checks for some hosts | It is acceptable for a UA to skip CT compliance checks for some hosts | |||
according to local policy. For example, a UA MAY disable CT | according to local policy. For example, a UA MAY disable CT | |||
compliance checks for hosts whose validated certificate chain | compliance checks for hosts whose validated certificate chain | |||
terminates at a user-defined trust anchor, rather than a trust anchor | terminates at a user-defined trust anchor rather than a trust anchor | |||
built-in to the UA (or underlying platform). | built in to the UA (or underlying platform). | |||
If the UA does not evaluate CT compliance, e.g., because the user has | If the UA does not evaluate CT compliance, e.g., because the user has | |||
elected to disable it, or because a presented certificate chain | elected to disable it, or because a presented certificate chain | |||
chains up to a user-defined trust anchor, UAs SHOULD NOT send Expect- | chains up to a user-defined trust anchor, UAs SHOULD NOT send Expect- | |||
CT reports. | CT reports. | |||
3. Reporting Expect-CT Failure | 3. Reporting Expect-CT Failure | |||
When the UA attempts to connect to a Known Expect-CT Host and the | When the UA attempts to connect to a Known Expect-CT Host and the | |||
connection is not CT-qualified, the UA SHOULD report Expect-CT | connection is not CT qualified, the UA SHOULD report Expect-CT | |||
failures to the "report-uri", if any, in the Known Expect-CT Host's | failures to the report-uri, if any, in the Known Expect-CT Host's | |||
Expect-CT metadata. | Expect-CT metadata. | |||
When the UA receives an Expect-CT response header field over a | When the UA receives an Expect-CT response header field over a | |||
connection that is not CT-qualified, if the UA has not already sent | connection that is not CT qualified, if the UA has not already sent | |||
an Expect-CT report for this connection, then the UA SHOULD report | an Expect-CT report for this connection, then the UA SHOULD report | |||
Expect-CT failures to the configured "report-uri", if any. | Expect-CT failures to the configured report-uri, if any. | |||
3.1. Generating a violation report | 3.1. Generating a Violation Report | |||
To generate a violation report object, the UA constructs a JSON | To generate a violation report object, the UA constructs a JSON | |||
[RFC8259] object with the following keys and values: | [RFC8259] object with the following keys and values: | |||
o "date-time": the value for this key indicates the UTC time that | "date-time" | |||
the UA observed the CT compliance failure. The value is a string | The value for this key indicates the UTC time that the UA observed | |||
formatted according to Section 5.6, "Internet Date/Time Format", | the CT compliance failure. The value is a string formatted | |||
of [RFC3339]. | according to Section 5.6 of [RFC3339], "Internet Date/Time | |||
Format". | ||||
o "hostname": the value is the hostname to which the UA made the | ||||
original request that failed the CT compliance check. The value | ||||
is provided as a string. | ||||
o "port": the value is the port to which the UA made the original | "hostname" | |||
The value is the hostname to which the UA made the original | ||||
request that failed the CT compliance check. The value is | request that failed the CT compliance check. The value is | |||
provided as an integer. | provided as a string. | |||
o "scheme": the value is the scheme with which the UA made the | "port" | |||
The value is the port to which the UA made the original request | ||||
that failed the CT compliance check. The value is provided as an | ||||
integer. | ||||
"scheme" | ||||
(optional) The value is the scheme with which the UA made the | ||||
original request that failed the CT compliance check. The value | original request that failed the CT compliance check. The value | |||
is provided as a string. This key is optional and is assumed to | is provided as a string. This key is optional and is assumed to | |||
be "https" if not present. | be "https" if not present. | |||
o "effective-expiration-date": the value indicates the Effective | "effective-expiration-date" | |||
Expiration Date (see Section 2.3.2.2) for the Expect-CT Host that | The value indicates the Effective Expiration Date (see | |||
failed the CT compliance check, in UTC. The value is provided as | Section 2.3.2.2) for the Expect-CT Host that failed the CT | |||
a string formatted according to Section 5.6 of [RFC3339] | compliance check, in UTC. The value is provided as a string | |||
("Internet Date/Time Format"). | formatted according to Section 5.6 of [RFC3339], "Internet Date/ | |||
Time Format". | ||||
o "served-certificate-chain": the value is the certificate chain as | "served-certificate-chain" | |||
served by the Expect-CT Host during TLS session setup. The value | The value is the certificate chain as served by the Expect-CT Host | |||
is provided as an array of strings, which MUST appear in the order | during TLS session setup. The value is provided as an array of | |||
that the certificates were served; each string in the array is the | strings, which MUST appear in the order that the certificates were | |||
Privacy-Enhanced Mail (PEM) representation of each X.509 | served; each string in the array is the Privacy-Enhanced Mail | |||
certificate as described in [RFC7468]. | (PEM) representation of each X.509 certificate as described in | |||
[RFC7468]. | ||||
o "validated-certificate-chain": the value is the certificate chain | "validated-certificate-chain" | |||
as constructed by the UA during certificate chain verification. | The value is the certificate chain as constructed by the UA during | |||
(This may differ from the value of the "served-certificate-chain" | certificate chain verification. (This may differ from the value | |||
key.) The value is provided as an array of strings, which MUST | of the "served-certificate-chain" key.) The value is provided as | |||
appear in the order matching the chain that the UA validated; each | an array of strings, which MUST appear in the order matching the | |||
string in the array is the Privacy-Enhanced Mail (PEM) | chain that the UA validated; each string in the array is the PEM | |||
representation of each X.509 certificate as described in | representation of each X.509 certificate as described in | |||
[RFC7468]. The first certificate in the chain represents the end- | [RFC7468]. The first certificate in the chain represents the end- | |||
entity certificate being verified. UAs that build certificate | entity certificate being verified. UAs that build certificate | |||
chains in more than one way during the validation process SHOULD | chains in more than one way during the validation process SHOULD | |||
send the last chain built. | send the last chain built. | |||
o "scts": the value represents the SCTs (if any) that the UA | "scts" | |||
received for the Expect-CT host and their validation statuses. | The value represents the SCTs (if any) that the UA received for | |||
The value is provided as an array of JSON objects. The SCTs may | the Expect-CT Host and their validation statuses. The value is | |||
appear in any order. Each JSON object in the array has the | provided as an array of JSON objects. The SCTs may appear in any | |||
following keys: | order. Each JSON object in the array has the following keys: | |||
* A "version" key, with an integer value. The UA MUST set this | * A "version" key, with an integer value. The UA MUST set this | |||
value to "1" if the SCT is in the format defined in Section 3.2 | value to 1 if the SCT is in the format defined in Section 3.2 | |||
of [RFC6962] and "2" if it is in the format defined in | of [RFC6962] or 2 if it is in the format defined in Section 4.5 | |||
Section 4.5 of [I-D.ietf-trans-rfc6962-bis]. | of [RFC9162]. | |||
* The "status" key, with a string value that the UA MUST set to | * The "status" key, with a string value that the UA MUST set to | |||
one of the following values: "unknown" (indicating that the UA | one of the following values: "unknown" (indicating that the UA | |||
does not have or does not trust the public key of the log from | does not have or does not trust the public key of the log from | |||
which the SCT was issued), "valid" (indicating that the UA | which the SCT was issued); "valid" (indicating that the UA | |||
successfully validated the SCT as described in Section 5.2 of | successfully validated the SCT as described in Section 5.2 of | |||
[RFC6962] or Section 8.2.3 of [I-D.ietf-trans-rfc6962-bis]), or | [RFC6962] or Section 8.1.3 of [RFC9162]); or "invalid" | |||
"invalid" (indicating that the SCT validation failed because of | (indicating that the SCT validation failed because of a bad | |||
a bad signature or an invalid timestamp). | signature or an invalid timestamp). | |||
* The "source" key, with a string value that indicates from where | * The "source" key, with a string value that indicates from where | |||
the UA obtained the SCT, as defined in Section 3 of [RFC6962] | the UA obtained the SCT, as defined in Section 3 of [RFC6962] | |||
and Section 6 of [I-D.ietf-trans-rfc6962-bis]. The UA MUST set | and Section 6 of [RFC9162]. The UA MUST set the value to one | |||
the value to one of "tls-extension", "ocsp", or "embedded". | of the following: "tls-extension", "ocsp", or "embedded". | |||
These correspond to the three methods of delivering SCTs in the | These correspond to the three methods of delivering SCTs in the | |||
TLS handshake that are described in Section 3.3 of [RFC6962]. | TLS handshake that are described in Section 3.3 of [RFC6962]. | |||
* The "serialized_sct" key, with a string value. If the value of | * The "serialized_sct" key, with a string value. If the value of | |||
the "version" key is "1", the UA MUST set this value to the | the "version" key is 1, the UA MUST set this value to the | |||
base64 encoded [RFC4648] serialized | base64-encoded [RFC4648] serialized SignedCertificateTimestamp | |||
"SignedCertificateTimestamp" structure from Section 3.2 of | structure from Section 3.2 of [RFC6962]. The base64 encoding | |||
[RFC6962]. The base64 encoding is defined in Section 4 of | is defined in Section 4 of [RFC4648]. If the value of the | |||
[RFC4648]. If the value of the "version" key is "2", the UA | "version" key is 2, the UA MUST set this value to the | |||
MUST set this value to the base64 encoded [RFC4648] serialized | base64-encoded [RFC4648] serialized TransItem structure | |||
"TransItem" structure representing the SCT, as defined in | representing the SCT, as defined in Section 4.5 of [RFC9162]. | |||
Section 4.5 of [I-D.ietf-trans-rfc6962-bis]. | ||||
o "failure-mode": the value indicates whether the Expect-CT report | "failure-mode" | |||
was triggered by an Expect-CT policy in enforce or report-only | The value indicates whether the Expect-CT report was triggered by | |||
mode. The value is provided as a string. The UA MUST set this | an Expect-CT policy in enforce or report-only mode. The value is | |||
value to "enforce" if the Expect-CT metadata indicates an | provided as a string. The UA MUST set this value to "enforce" if | |||
"enforce" configuration, and "report-only" otherwise. | the Expect-CT metadata indicates an enforce configuration, and | |||
"report-only" otherwise. | ||||
o "test-report": the value is set to true if the report is being | "test-report" | |||
sent by a testing client to verify that the report server behaves | (optional) The value is set to true if the report is being sent by | |||
correctly. The value is provided as a boolean, and MUST be set to | a testing client to verify that the report server behaves | |||
correctly. The value is provided as a boolean and MUST be set to | ||||
true if the report serves to test the server's behavior and can be | true if the report serves to test the server's behavior and can be | |||
discarded. | discarded. | |||
3.2. Sending a violation report | 3.2. Sending a Violation Report | |||
The UA SHOULD report Expect-CT failures for Known Expect-CT Hosts: | The UA SHOULD report Expect-CT failures for Known Expect-CT Hosts: | |||
that is, when a connection to a Known Expect-CT Host does not comply | that is, when a connection to a Known Expect-CT Host does not comply | |||
with the UA's CT Policy and the host's Expect-CT metadata contains a | with the UA's CT Policy and the host's Expect-CT metadata contains a | |||
"report-uri". | report-uri. | |||
Additionally, the UA SHOULD report Expect-CT failures for hosts for | Additionally, the UA SHOULD report Expect-CT failures for hosts for | |||
which it does not have any stored Expect-CT metadata. That is, when | which it does not have any stored Expect-CT metadata; that is, when | |||
the UA connects to a host and receives an Expect-CT header field | the UA connects to a host and receives an Expect-CT header field that | |||
which contains the "report-uri" directive, the UA SHOULD report an | contains the report-uri directive, the UA SHOULD report an Expect-CT | |||
Expect-CT failure if the the connection does not comply with the UA's | failure if the connection does not comply with the UA's CT Policy. | |||
CT Policy. | ||||
The steps to report an Expect-CT failure are as follows. | The steps to report an Expect-CT failure are as follows. | |||
1. Prepare a JSON object "report object" with the single key | 1. Prepare a JSON object report object with the single key "expect- | |||
"expect-ct-report", whose value is the result of generating a | ct-report", whose value is the result of generating a violation | |||
violation report object as described in Section 3.1. | report object as described in Section 3.1. | |||
2. Let "report body" be the JSON stringification of "report object". | 2. Let report body be the JSON stringification of report object. | |||
3. Let "report-uri" be the value of the "report-uri" directive in | 3. Let report-uri be the value of the report-uri directive in the | |||
the Expect-CT header field. | Expect-CT header field. | |||
4. Send an HTTP POST request to "report-uri" with a "Content-Type" | 4. Send an HTTP POST request to report-uri with a Content-Type | |||
header field of "application/expect-ct-report+json", and an | header field of application/expect-ct-report+json and an entity | |||
entity body consisting of "report body". | body consisting of report body. | |||
The UA MAY perform other operations as part of sending the HTTP POST | The UA MAY perform other operations as part of sending the HTTP POST | |||
request, for example sending a CORS preflight as part of [FETCH]. | request, such as sending a Cross-Origin Resource Sharing (CORS) | |||
preflight as part of [FETCH]. | ||||
Future versions of this specification may need to modify or extend | Future versions of this specification may need to modify or extend | |||
the Expect-CT report format. They may do so by defining a new top- | the Expect-CT report format. They may do so by defining a new top- | |||
level key to contain the report, replacing the "expect-ct-report" | level key to contain the report, replacing the "expect-ct-report" | |||
key. Section 3.3 defines how report servers should handle report | key. Section 3.3 defines how report servers should handle report | |||
formats that they do not support. | formats that they do not support. | |||
3.3. Receiving a violation report | 3.3. Receiving a Violation Report | |||
Upon receiving an Expect-CT violation report, the report server MUST | Upon receiving an Expect-CT violation report, the report server MUST | |||
respond with a 2xx (Successful) status code if it can parse the | respond with a 2xx (Successful) status code if it can parse the | |||
request body as valid JSON, the report conforms to the format | request body as valid JSON, the report conforms to the format | |||
described in Section 3.1, and it recognizes the scheme, hostname, and | described in Section 3.1, and it recognizes the scheme, hostname, and | |||
port in the "scheme", "hostname", and "port" fields of the report. | port in the "scheme", "hostname", and "port" fields of the report. | |||
If the report body cannot be parsed, or the report does not conform | If the report body cannot be parsed or does not conform to the format | |||
to the format described in Section 3.1, or the report server does not | described in Section 3.1, or the report server does not expect to | |||
expect to receive reports for the scheme, hostname, or port in the | receive reports for the scheme, hostname, or port in the report, then | |||
report, then the report server MUST respond with a 400 Bad Request | the report server MUST respond with a 400 Bad Request status code. | |||
status code. | ||||
As described in Section 3.2, future versions of this specification | As described in Section 3.2, future versions of this specification | |||
may define new report formats that are sent with a different top- | may define new report formats that are sent with a different top- | |||
level key. If the report server does not recognize the report | level key. If the report server does not recognize the report | |||
format, the report server MUST respond with a 501 Not Implemented | format, the report server MUST respond with a 501 Not Implemented | |||
status code. | status code. | |||
If the report's "test-report" key is set to true, the server MAY | If the report's "test-report" key is set to true, the server MAY | |||
discard the report without further processing but MUST still return a | discard the report without further processing but MUST still return a | |||
2xx (Successful) status code. If the "test-report" key is absent or | 2xx (Successful) status code. If the "test-report" key is absent or | |||
skipping to change at page 16, line 18 ¶ | skipping to change at line 721 ¶ | |||
CT Policy, end users will experience denials of service. It is | CT Policy, end users will experience denials of service. It is | |||
advisable for UAs to explain to users why they cannot access the | advisable for UAs to explain to users why they cannot access the | |||
Expect-CT Host, e.g., in a user interface that explains that the | Expect-CT Host, e.g., in a user interface that explains that the | |||
host's certificate cannot be validated. | host's certificate cannot be validated. | |||
5. Authoring Considerations | 5. Authoring Considerations | |||
Expect-CT could be specified as a TLS extension or X.509 certificate | Expect-CT could be specified as a TLS extension or X.509 certificate | |||
extension instead of an HTTP response header field. Using an HTTP | extension instead of an HTTP response header field. Using an HTTP | |||
header field as the mechanism for Expect-CT introduces a layering | header field as the mechanism for Expect-CT introduces a layering | |||
mismatch: for example, the software that terminates TLS and validates | mismatch; for example, the software that terminates TLS and validates | |||
Certificate Transparency information might know nothing about HTTP. | Certificate Transparency information might know nothing about HTTP. | |||
Nevertheless, an HTTP header field was chosen primarily for ease of | Nevertheless, an HTTP header field was chosen primarily for ease of | |||
deployment. In practice, deploying new certificate extensions | deployment. In practice, deploying new certificate extensions | |||
requires certificate authorities to support them, and new TLS | requires certificate authorities to support them, and new TLS | |||
extensions require server software updates, including possibly to | extensions require server software updates, including possibly to | |||
servers outside of the site owner's direct control (such as in the | servers outside of the site owner's direct control (such as in the | |||
case of a third-party CDN). Ease of deployment is a high priority | case of a third-party Content Delivery Network (CDN)). Ease of | |||
for Expect-CT because it is intended as a temporary transition | deployment is a high priority for Expect-CT because it is intended as | |||
mechanism for user agents that are transitioning to universal | a temporary transition mechanism for user agents that are | |||
Certificate Transparency requirements. | transitioning to universal Certificate Transparency requirements. | |||
6. Privacy Considerations | 6. Privacy Considerations | |||
Expect-CT can be used to infer what Certificate Transparency policy a | Expect-CT can be used to infer what Certificate Transparency Policy a | |||
UA is using, by attempting to retrieve specially-configured websites | UA is using by attempting to retrieve specially configured websites | |||
which pass one user agents' policies but not another's. Note that | that pass one user agent's policies but not another's. Note that | |||
this consideration is true of UAs which enforce CT policies without | this consideration is true of UAs that enforce CT policies without | |||
Expect-CT as well. | Expect-CT as well. | |||
Additionally, reports submitted to the "report-uri" could reveal | Additionally, reports submitted to the report-uri could reveal | |||
information to a third party about which webpage is being accessed | information to a third party about which web page is being accessed | |||
and by which IP address, by using individual "report-uri" values for | and by which IP address, by using individual report-uri values for | |||
individually-tracked pages. This information could be leaked even if | individually tracked pages. This information could be leaked even if | |||
client-side scripting were disabled. | client-side scripting were disabled. | |||
Implementations store state about Known Expect-CT Hosts, and hence | Implementations store state about Known Expect-CT Hosts and, hence, | |||
which domains the UA has contacted. Implementations may choose to | which domains the UA has contacted. Implementations may choose to | |||
not store this state subject to local policy (e.g., in the private | not store this state subject to local policy (e.g., in the private | |||
browsing mode of a web browser). | browsing mode of a web browser). | |||
Violation reports, as noted in Section 3, contain information about | Violation reports, as noted in Section 3, contain information about | |||
the certificate chain that has violated the CT policy. In some | the certificate chain that has violated the CT Policy. In some | |||
cases, such as organization-wide compromise of the end-to-end | cases, such as an organization-wide compromise of the end-to-end | |||
security of TLS, this may include information about the interception | security of TLS, this may include information about the interception | |||
tools and design used by the organization that the organization would | tools and design used by the organization that the organization would | |||
otherwise prefer not be disclosed. | otherwise prefer not be disclosed. | |||
Because Expect-CT causes remotely-detectable behavior, it's advisable | Because Expect-CT causes remotely detectable behavior, it's advisable | |||
that UAs offer a way for privacy-sensitive end users to clear | that UAs offer a way for privacy-sensitive end users to clear | |||
currently noted Expect-CT hosts, and allow users to query the current | currently noted Expect-CT Hosts and allow users to query the current | |||
state of Known Expect-CT Hosts. | state of Known Expect-CT Hosts. | |||
7. Security Considerations | 7. Security Considerations | |||
7.1. Hostile header attacks | 7.1. Hostile Header Attacks | |||
When UAs support the Expect-CT header field, it becomes a potential | When UAs support the Expect-CT header field, it becomes a potential | |||
vector for hostile header attacks against site owners. If a site | vector for hostile header attacks against site owners. If a site | |||
owner uses a certificate issued by a certificate authority which does | owner uses a certificate issued by a certificate authority that does | |||
not embed SCTs nor serve SCTs via OCSP or TLS extension, a malicious | not embed SCTs nor serve SCTs via the Online Certificate Status | |||
server operator or attacker could temporarily reconfigure the host to | Protocol (OCSP) or TLS extension, a malicious server operator or | |||
comply with the UA's CT policy, and add the Expect-CT header field in | attacker could temporarily reconfigure the host to comply with the | |||
enforcing mode with a long "max-age". Implementing user agents would | UA's CT Policy and add the Expect-CT header field in enforcing mode | |||
note this as an Expect-CT Host (see Section 2.3.2.1). After having | with a long max-age. Implementing user agents would note this as an | |||
done this, the configuration could then be reverted to not comply | Expect-CT Host (see Section 2.3.2.1). After having done this, the | |||
with the CT policy, prompting failures. Note this scenario would | configuration could then be reverted to not comply with the CT | |||
require the attacker to have substantial control over the | Policy, prompting failures. Note that this scenario would require | |||
infrastructure in question, being able to obtain different | the attacker to have substantial control over the infrastructure in | |||
certificates, change server software, or act as a man-in-the-middle | question, being able to obtain different certificates, change server | |||
in connections. | software, or act as a man in the middle in connections. | |||
Site operators can mitigate this situation by one of: reconfiguring | Site operators can mitigate this situation by one of the following: | |||
their web server to transmit SCTs using the TLS extension defined in | reconfiguring their web server to transmit SCTs using the TLS | |||
Section 6.5 of [I-D.ietf-trans-rfc6962-bis], obtaining a certificate | extension defined in Section 6.4 of [RFC9162]; obtaining a | |||
from an alternative certificate authority which provides SCTs by one | certificate from an alternative certificate authority that provides | |||
of the other methods, or by waiting for the user agents' persisted | SCTs by one of the other methods; or by waiting for the user agent's | |||
notation of this as an Expect-CT host to reach its "max-age". User | persisted notation of this as an Expect-CT Host to reach its max-age. | |||
agents may choose to implement mechanisms for users to cure this | User agents may choose to implement mechanisms for users to cure this | |||
situation, as noted in Section 4. | situation, as noted in Section 4. | |||
7.2. Maximum max-age | 7.2. Maximum max-age | |||
There is a security trade-off in that low maximum values provide a | There is a security trade-off in that low maximum values provide a | |||
narrow window of protection for users that visit the Known Expect-CT | narrow window of protection for users that visit the Known Expect-CT | |||
Host only infrequently, while high maximum values might result in a | Host only infrequently, while high maximum values might result in a | |||
denial of service to a UA in the event of a hostile header attack, or | denial of service to a UA in the event of a hostile header attack or | |||
simply an error on the part of the site-owner. | simply an error on the part of the site owner. | |||
There is probably no ideal maximum for the "max-age" directive. | There is probably no ideal maximum for the max-age directive. Since | |||
Since Expect-CT is primarily a policy-expansion and investigation | Expect-CT is primarily a policy-expansion and investigation | |||
technology rather than an end-user protection, a value on the order | technology rather than an end-user protection, a value on the order | |||
of 30 days (2,592,000 seconds) may be considered a balance between | of 30 days (2,592,000 seconds) may be considered a balance between | |||
these competing security concerns. | these competing security concerns. | |||
7.3. Amplification attacks | 7.3. Amplification Attacks | |||
Another kind of hostile header attack uses the "report-uri" mechanism | Another kind of hostile header attack uses the report-uri mechanism | |||
on many hosts not currently exposing SCTs as a method to cause a | on many hosts not currently exposing SCTs as a method to cause a | |||
denial-of-service to the host receiving the reports. If some highly- | denial of service to the host receiving the reports. If some highly | |||
trafficked websites emitted a non-enforcing Expect-CT header field | trafficked websites emitted a non-enforcing Expect-CT header field | |||
with a "report-uri", implementing UAs' reports could flood the | with a report-uri, implementing UAs' reports could flood the | |||
reporting host. It is noted in Section 2.1.1 that UAs should limit | reporting host. It is noted in Section 2.1.1 that UAs should limit | |||
the rate at which they emit reports, but an attacker may alter the | the rate at which they emit reports, but an attacker may alter the | |||
Expect-CT header's fields to induce UAs to submit different reports | Expect-CT header fields to induce UAs to submit different reports to | |||
to different URIs to still cause the same effect. | different URIs to still cause the same effect. | |||
8. IANA Considerations | 8. IANA Considerations | |||
8.1. Header Field Registry | 8.1. Header Field Registry | |||
This document registers the "Expect-CT" header field in the | This document registers the "Expect-CT" header field in the | |||
"Permanent Message Header Field Names" registry located at | "Hypertext Transfer Protocol (HTTP) Field Name Registry" registry | |||
https://www.iana.org/assignments/message-headers [4]. | located at <https://www.iana.org/assignments/http-fields>. | |||
Header field name: Expect-CT | Header field name: Expect-CT | |||
Applicable protocol: http | Applicable protocol: http | |||
Status: experimental | Status: permanent | |||
Author/Change controller: IETF | Author/Change controller: IETF | |||
Specification document(s): This document | Specification document(s): This document | |||
Related information: (empty) | Related information: (empty) | |||
8.2. Media Types Registry | 8.2. Media Types Registry | |||
The MIME media type for Expect-CT violation reports is "application/ | This document registers the application/expect-ct-report+json media | |||
expect-ct-report+json" (which uses the suffix established in | type (which uses the suffix established in [RFC6839]) for Expect-CT | |||
[RFC6839]). | violation reports in the "Media Types" registry as follows. | |||
Type name: application | Type name: application | |||
Subtype name: expect-ct-report+json | Subtype name: expect-ct-report+json | |||
Required parameters: n/a | Required parameters: n/a | |||
Optional parameters: n/a | Optional parameters: n/a | |||
Encoding considerations: binary | Encoding considerations: binary | |||
Security considerations: See Section 7 | Security considerations: See Section 7 | |||
Interoperability considerations: n/a | Interoperability considerations: n/a | |||
Published specification: This document | Published specification: This document | |||
Applications that use this media type: UAs that implement | Applications that use this media type: UAs that implement | |||
Certificate Transparency compliance checks and reporting | Certificate Transparency compliance checks and reporting | |||
skipping to change at page 19, line 25 ¶ | skipping to change at line 873 ¶ | |||
Additional information: | Additional information: | |||
Deprecated alias names for this type: n/a | Deprecated alias names for this type: n/a | |||
Magic number(s): n/a | Magic number(s): n/a | |||
File extension(s): n/a | File extension(s): n/a | |||
Macintosh file type code(s): n/a | Macintosh file type code(s): n/a | |||
Person & email address to contact for further information: Emily | Person & email address to contact for further information: | |||
Stark (estark@google.com) | Emily Stark (estark@google.com) | |||
Intended usage: COMMON | Intended usage: COMMON | |||
Restrictions on usage: none | Restrictions on usage: none | |||
Author: Emily Stark (estark@google.com) | Author: Emily Stark (estark@google.com) | |||
Change controller: IETF | Change controller: IETF | |||
9. References | 9. References | |||
9.1. Normative References | 9.1. Normative References | |||
[I-D.ietf-trans-rfc6962-bis] | ||||
Laurie, B., Langley, A., Kasper, E., Messeri, E., and R. | ||||
Stradling, "Certificate Transparency Version 2.0", draft- | ||||
ietf-trans-rfc6962-bis-30 (work in progress), November | ||||
2018. | ||||
[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, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-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>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
skipping to change at page 20, line 43 ¶ | skipping to change at line 931 ¶ | |||
[RFC6839] Hansen, T. and A. Melnikov, "Additional Media Type | [RFC6839] Hansen, T. and A. Melnikov, "Additional Media Type | |||
Structured Syntax Suffixes", RFC 6839, | Structured Syntax Suffixes", RFC 6839, | |||
DOI 10.17487/RFC6839, January 2013, | DOI 10.17487/RFC6839, January 2013, | |||
<https://www.rfc-editor.org/info/rfc6839>. | <https://www.rfc-editor.org/info/rfc6839>. | |||
[RFC6962] Laurie, B., Langley, A., and E. Kasper, "Certificate | [RFC6962] Laurie, B., Langley, A., and E. Kasper, "Certificate | |||
Transparency", RFC 6962, DOI 10.17487/RFC6962, June 2013, | Transparency", RFC 6962, DOI 10.17487/RFC6962, June 2013, | |||
<https://www.rfc-editor.org/info/rfc6962>. | <https://www.rfc-editor.org/info/rfc6962>. | |||
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | ||||
Protocol (HTTP/1.1): Message Syntax and Routing", | ||||
RFC 7230, DOI 10.17487/RFC7230, June 2014, | ||||
<https://www.rfc-editor.org/info/rfc7230>. | ||||
[RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
RFC 7234, DOI 10.17487/RFC7234, June 2014, | ||||
<https://www.rfc-editor.org/info/rfc7234>. | ||||
[RFC7468] Josefsson, S. and S. Leonard, "Textual Encodings of PKIX, | [RFC7468] Josefsson, S. and S. Leonard, "Textual Encodings of PKIX, | |||
PKCS, and CMS Structures", RFC 7468, DOI 10.17487/RFC7468, | PKCS, and CMS Structures", RFC 7468, DOI 10.17487/RFC7468, | |||
April 2015, <https://www.rfc-editor.org/info/rfc7468>. | April 2015, <https://www.rfc-editor.org/info/rfc7468>. | |||
[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>. | |||
[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>. | |||
[RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | [RFC8259] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | |||
Interchange Format", STD 90, RFC 8259, | Interchange Format", STD 90, RFC 8259, | |||
DOI 10.17487/RFC8259, December 2017, | DOI 10.17487/RFC8259, December 2017, | |||
<https://www.rfc-editor.org/info/rfc8259>. | <https://www.rfc-editor.org/info/rfc8259>. | |||
[RFC9110] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "HTTP Semantics", STD 97, RFC 9110, | ||||
DOI 10.17487/RFC9110, June 2022, | ||||
<https://www.rfc-editor.org/info/rfc9110>. | ||||
[RFC9111] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
Ed., "HTTP Caching", STD 98, RFC 9111, | ||||
DOI 10.17487/RFC9111, June 2022, | ||||
<https://www.rfc-editor.org/info/rfc9111>. | ||||
[RFC9162] Laurie, B., Messeri, E., and R. Stradling, "Certificate | ||||
Transparency Version 2.0", RFC 9162, DOI 10.17487/RFC9162, | ||||
December 2021, <https://www.rfc-editor.org/info/rfc9162>. | ||||
9.2. Informative References | 9.2. Informative References | |||
[FETCH] WHATWG, "Fetch - Living Standard", n.d., | [FETCH] WHATWG, "Fetch - Living Standard", | |||
<https://fetch.spec.whatwg.org>. | <https://fetch.spec.whatwg.org>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
9.3. URIs | ||||
[1] https://lists.w3.org/Archives/Public/ietf-http-wg/ | ||||
[2] http://httpwg.github.io/ | ||||
[3] https://github.com/httpwg/http-extensions/labels/expect-ct | ||||
[4] https://www.iana.org/assignments/message-headers | ||||
Appendix A. Changes | ||||
A.1. Since -07 | ||||
o Editorial changes | ||||
o Specify that the end-entity certificate appears first in the | ||||
"validated-certificate-chain" field of an Expect-CT report. | ||||
o Define how report format can be extended by future versions of | ||||
this specification. | ||||
o Add optional "scheme" key to report format. | ||||
o Specify exact status codes for report server errors. | ||||
o Limit report-uris to HTTPS only. | ||||
o Note that this version of Expect-CT is only compatible with RFC | ||||
6962 and 6962-bis, not any future versions of CT. | ||||
A.2. Since -06 | ||||
o Editorial changes | ||||
A.3. Since -05 | ||||
o Remove SHOULD requirement that UAs disallow certificate error | ||||
overrides for Known Expect-CT Hosts. | ||||
o Remove restriction that Expect-CT Hosts cannot be IP addresses. | ||||
o Editorial changes | ||||
A.4. Since -04 | ||||
o Editorial changes | ||||
A.5. Since -03 | ||||
o Editorial changes | ||||
A.6. Since -02 | ||||
o Add concept of test reports and specify that servers must respond | ||||
with 2xx status codes to valid reports. | ||||
o Add "failure-mode" key to reports to allow report servers to | ||||
distinguish report-only from enforced failures. | ||||
A.7. Since -01 | ||||
o Change SCT reporting format to support both RFC 6962 and 6962-bis | ||||
SCTs. | ||||
A.8. Since -00 | ||||
o Editorial changes | ||||
o Change Content-Type header of reports to 'application/expect-ct- | ||||
report+json' | ||||
o Update header field syntax to match convention (issue #327) | ||||
o Reference RFC 6962-bis instead of RFC 6962 | ||||
Author's Address | Author's Address | |||
Emily Stark | Emily Stark | |||
Email: estark@google.com | Email: estark@google.com | |||
End of changes. 137 change blocks. | ||||
468 lines changed or deleted | 384 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |