rfc9261.original | rfc9261.txt | |||
---|---|---|---|---|
TLS N. Sullivan | Internet Engineering Task Force (IETF) N. Sullivan | |||
Internet-Draft Cloudflare Inc. | Request for Comments: 9261 Cloudflare Inc. | |||
Intended status: Standards Track 4 March 2022 | Category: Standards Track July 2022 | |||
Expires: 5 September 2022 | ISSN: 2070-1721 | |||
Exported Authenticators in TLS | Exported Authenticators in TLS | |||
draft-ietf-tls-exported-authenticator-15 | ||||
Abstract | Abstract | |||
This document describes a mechanism that builds on Transport Layer | This document describes a mechanism that builds on Transport Layer | |||
Security (TLS) or Datagram Transport Layer Security (DTLS) and | Security (TLS) or Datagram Transport Layer Security (DTLS) and | |||
enables peers to provide a proof of ownership of an identity, such as | enables peers to provide proof of ownership of an identity, such as | |||
an X.509 certificate. This proof can be exported by one peer, | an X.509 certificate. This proof can be exported by one peer, | |||
transmitted out-of-band to the other peer, and verified by the | transmitted out of band to the other peer, and verified by the | |||
receiving peer. | receiving peer. | |||
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 https://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 5 September 2022. | 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/rfc9261. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction | |||
2. Conventions and Terminology . . . . . . . . . . . . . . . . . 3 | 2. Conventions and Terminology | |||
3. Message Sequences . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Message Sequences | |||
4. Authenticator Request . . . . . . . . . . . . . . . . . . . . 4 | 4. Authenticator Request | |||
5. Authenticator . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. Authenticator | |||
5.1. Authenticator Keys . . . . . . . . . . . . . . . . . . . 6 | 5.1. Authenticator Keys | |||
5.2. Authenticator Construction . . . . . . . . . . . . . . . 7 | 5.2. Authenticator Construction | |||
5.2.1. Certificate . . . . . . . . . . . . . . . . . . . . . 8 | 5.2.1. Certificate | |||
5.2.2. CertificateVerify . . . . . . . . . . . . . . . . . . 8 | 5.2.2. CertificateVerify | |||
5.2.3. Finished . . . . . . . . . . . . . . . . . . . . . . 10 | 5.2.3. Finished | |||
5.2.4. Authenticator Creation . . . . . . . . . . . . . . . 10 | 5.2.4. Authenticator Creation | |||
6. Empty Authenticator . . . . . . . . . . . . . . . . . . . . . 10 | 6. Empty Authenticator | |||
7. API considerations . . . . . . . . . . . . . . . . . . . . . 11 | 7. API Considerations | |||
7.1. The "request" API . . . . . . . . . . . . . . . . . . . . 11 | 7.1. The "request" API | |||
7.2. The "get context" API . . . . . . . . . . . . . . . . . . 11 | 7.2. The "get context" API | |||
7.3. The "authenticate" API . . . . . . . . . . . . . . . . . 11 | 7.3. The "authenticate" API | |||
7.4. The "validate" API . . . . . . . . . . . . . . . . . . . 12 | 7.4. The "validate" API | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 13 | 8. IANA Considerations | |||
8.1. Update of the TLS ExtensionType Registry . . . . . . . . 13 | 8.1. Update of the TLS ExtensionType Registry | |||
8.2. Update of the TLS Exporter Labels Registry . . . . . . . 13 | 8.2. Update of the TLS Exporter Labels Registry | |||
8.3. Update of the TLS HandshakeType Registry . . . . . . . . 13 | 8.3. Update of the TLS HandshakeType Registry | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 13 | 9. Security Considerations | |||
10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 14 | 10. References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 10.1. Normative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 14 | 10.2. Informative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 15 | Acknowledgements | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 16 | Author's Address | |||
1. Introduction | 1. Introduction | |||
This document provides a way to authenticate one party of a Transport | This document provides a way to authenticate one party of a Transport | |||
Layer Security (TLS) or Datagram Transport Layer Security (DTLS) | Layer Security (TLS) or Datagram Transport Layer Security (DTLS) | |||
connection to its peer using authentication messages created after | connection to its peer using authentication messages created after | |||
the session has been established. This allows both the client and | the session has been established. This allows both the client and | |||
server to prove ownership of additional identities at any time after | server to prove ownership of additional identities at any time after | |||
the handshake has completed. This proof of authentication can be | the handshake has completed. This proof of authentication can be | |||
exported and transmitted out-of-band from one party to be validated | exported and transmitted out of band from one party to be validated | |||
by its peer. | by its peer. | |||
This mechanism provides two advantages over the authentication that | This mechanism provides two advantages over the authentication that | |||
TLS and DTLS natively provide: | TLS and DTLS natively provide: | |||
multiple identities - Endpoints that are authoritative for multiple | multiple identities: Endpoints that are authoritative for multiple | |||
identities - but do not have a single certificate that includes | identities, but that do not have a single certificate that | |||
all of the identities - can authenticate additional identities | includes all of the identities, can authenticate additional | |||
over a single connection. | identities over a single connection. | |||
spontaneous authentication - Endpoints can authenticate after a | spontaneous authentication: After a connection is established, | |||
connection is established, in response to events in a higher-layer | endpoints can authenticate in response to events in a higher-layer | |||
protocol, as well as integrating more context (such as context | protocol; they can also integrate more context (such as context | |||
from the application). | from the application). | |||
Versions of TLS prior to TLS 1.3 used renegotiation as a way to | Versions of TLS prior to TLS 1.3 used renegotiation as a way to | |||
enable post-handshake client authentication given an existing TLS | enable post-handshake client authentication given an existing TLS | |||
connection. The mechanism described in this document may be used to | connection. The mechanism described in this document may be used to | |||
replace the post-handshake authentication functionality provided by | replace the post-handshake authentication functionality provided by | |||
renegotiation. Unlike renegotiation, exported Authenticator-based | renegotiation. Unlike renegotiation, Exported Authenticator-based | |||
post-handshake authentication does not require any changes at the TLS | post-handshake authentication does not require any changes at the TLS | |||
layer. | layer. | |||
Post-handshake authentication is defined in section 4.6.3 of TLS 1.3 | Post-handshake authentication is defined in TLS 1.3 Section 4.6.2 of | |||
[RFC8446], but it has the disadvantage of requiring additional state | [RFC8446], but it has the disadvantage of requiring additional state | |||
to be stored as part of the TLS state machine. Furthermore, the | to be stored as part of the TLS state machine. Furthermore, the | |||
authentication boundaries of TLS 1.3 post-handshake authentication | authentication boundaries of TLS 1.3 post-handshake authentication | |||
align with TLS record boundaries, which are often not aligned with | align with TLS record boundaries, which are often not aligned with | |||
the authentication boundaries of the higher-layer protocol. For | the authentication boundaries of the higher-layer protocol. For | |||
example, multiplexed connection protocols like HTTP/2 [RFC7540] do | example, multiplexed connection protocols like HTTP/2 [RFC9113] do | |||
not have a notion of which TLS record a given message is a part of. | not have a notion of which TLS record a given message is a part of. | |||
Exported Authenticators are meant to be used as a building block for | Exported Authenticators are meant to be used as a building block for | |||
application protocols. Mechanisms such as those required to | application protocols. Mechanisms such as those required to | |||
advertise support and handle authentication errors are not handled by | advertise support and handle authentication errors are not handled by | |||
TLS (or DTLS). | TLS (or DTLS). | |||
The minimum version of TLS and DTLS required to implement the | The minimum version of TLS and DTLS required to implement the | |||
mechanisms decribed in this document are TLS 1.2 [RFC6347] and DTLS | mechanisms described in this document are TLS 1.2 [RFC5246] and DTLS | |||
1.2 [RFC5246]. | 1.2 [RFC6347]. | |||
2. Conventions and Terminology | 2. Conventions and 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 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. | |||
This document uses terminology such as client, server, connection, | This document uses terminology such as client, server, connection, | |||
handshake, endpoint, peer that are defined in section 1.1 of | handshake, endpoint, and peer that are defined in Section 1.1 of | |||
[RFC8446]. The term "initial connection" refers to the (D)TLS | [RFC8446]. The term "initial connection" refers to the (D)TLS | |||
connection from which the exported authenticator messages are | connection from which the Exported Authenticator messages are | |||
derived. | derived. | |||
3. Message Sequences | 3. Message Sequences | |||
There are two types of messages defined in this document: | There are two types of messages defined in this document: | |||
Authenticator Requests and Authenticators. These can be combined in | authenticator requests and authenticators. These can be combined in | |||
the following three sequences: | the following three sequences: | |||
Client Authentication | Client Authentication | |||
* Server generates Authenticator Request | * Server generates authenticator request | |||
* Client generates Authenticator from Server's Authenticator Request | * Client generates Authenticator from Server's authenticator request | |||
* Server validates Client's Authenticator | * Server validates Client's authenticator | |||
Server Authentication | Server Authentication | |||
* Client generates Authenticator Request | * Client generates authenticator request | |||
* Server generates Authenticator from Client's Authenticator Request | * Server generates authenticator from Client's authenticator request | |||
* Client validates Server's Authenticator | * Client validates Server's authenticator | |||
Spontaneous Server Authentication | Spontaneous Server Authentication | |||
* Server generates Authenticator | * Server generates authenticator | |||
* Client validates Server's Authenticator | * Client validates Server's authenticator | |||
4. Authenticator Request | 4. Authenticator Request | |||
The authenticator request is a structured message that can be created | The authenticator request is a structured message that can be created | |||
by either party of a (D)TLS connection using data exported from that | by either party of a (D)TLS connection using data exported from that | |||
connection. It can be transmitted to the other party of the (D)TLS | connection. It can be transmitted to the other party of the (D)TLS | |||
connection at the application layer. The application layer protocol | connection at the application layer. The application-layer protocol | |||
used to send the authenticator request SHOULD use a secure transport | used to send the authenticator request SHOULD use a secure transport | |||
channel with equivalent security to TLS, such as QUIC [RFC9001], as | channel with equivalent security to TLS, such as QUIC [RFC9001], as | |||
its underlying transport to keep the request confidential. The | its underlying transport to keep the request confidential. The | |||
application MAY use the existing (D)TLS connection to transport the | application MAY use the existing (D)TLS connection to transport the | |||
authenticator. | authenticator. | |||
An authenticator request message can be constructed by either the | An authenticator request message can be constructed by either the | |||
client or the server. Server-generated authenticator requests use | client or the server. Server-generated authenticator requests use | |||
the CertificateRequest message from Section 4.3.2 of [RFC8446]. | the CertificateRequest message from Section 4.3.2 of [RFC8446]. | |||
Client-generated authenticator requests use a new message, called the | Client-generated authenticator requests use a new message, called the | |||
ClientCertificateRequest, which uses the same structure as | "ClientCertificateRequest", that uses the same structure as | |||
CertificateRequest. (Note that the latter is not a request for a | CertificateRequest. (Note that the latter is not a request for a | |||
client certificate, but rather a certificate request generated by the | client certificate, but rather a certificate request generated by the | |||
client.) These message structures are used even if the connection | client.) These message structures are used even if the connection | |||
protocol is TLS 1.2 or DTLS 1.2. | protocol is TLS 1.2 or DTLS 1.2. | |||
The CertificateRequest and ClientCertificateRequest messages are used | The CertificateRequest and ClientCertificateRequest messages are used | |||
to define the parameters in a request for an authenticator. These | to define the parameters in a request for an authenticator. These | |||
are encoded as TLS handshake messages, including length and type | are encoded as TLS handshake messages, including length and type | |||
fields. They do not include any TLS record layer framing and are not | fields. They do not include any TLS record-layer framing and are not | |||
encrypted with a handshake or application-data key. | encrypted with a handshake or application-data key. | |||
The structures are defined to be: | The structures are defined to be: | |||
struct { | struct { | |||
opaque certificate_request_context<0..2^8-1>; | opaque certificate_request_context<0..2^8-1>; | |||
Extension extensions<2..2^16-1>; | Extension extensions<2..2^16-1>; | |||
} ClientCertificateRequest; | } ClientCertificateRequest; | |||
struct { | struct { | |||
opaque certificate_request_context<0..2^8-1>; | opaque certificate_request_context<0..2^8-1>; | |||
Extension extensions<2..2^16-1>; | Extension extensions<2..2^16-1>; | |||
} CertificateRequest; | } CertificateRequest; | |||
certificate_request_context: An opaque string which identifies the | certificate_request_context: An opaque string that identifies the | |||
authenticator request and which will be echoed in the | authenticator request and that will be echoed in the authenticator | |||
authenticator message. A certificate_request_context value MUST | message. A certificate_request_context value MUST be unique for | |||
be unique for each authenticator request within the scope of a | each authenticator request within the scope of a connection | |||
connection (preventing replay and context confusion). The | (preventing replay and context confusion). The | |||
certificate_request_context SHOULD be chosen to be unpredictable | certificate_request_context SHOULD be chosen to be unpredictable | |||
to the peer (e.g., by randomly generating it) in order to prevent | to the peer (e.g., by randomly generating it) in order to prevent | |||
an attacker who has temporary access to the peer's private key | an attacker who has temporary access to the peer's private key | |||
from pre-computing valid authenticators. For example, the | from precomputing valid authenticators. For example, the | |||
application may choose this value to correspond to a value used in | application may choose this value to correspond to a value used in | |||
an existing datastructure in the software to simplify | an existing data structure in the software to simplify | |||
implementation. | implementation. | |||
extensions: The set of extensions allowed in the CertificateRequest | extensions: The set of extensions allowed in the structures of | |||
structure and the ClientCertificateRequest structure are those | CertificateRequest and ClientCertificateRequest is comprised of | |||
defined in the TLS ExtensionType Values IANA registry [RFC8447] | those defined in the "TLS ExtensionType Values" IANA registry | |||
containing CR in the TLS 1.3 column. In addition, the set of | containing CR in the "TLS 1.3" column (see [IANA-TLS] and | |||
extensions in the ClientCertificateRequest structure MAY include | [RFC8447]). In addition, the set of extensions in the | |||
the server_name [RFC6066] extension. | ClientCertificateRequest structure MAY include the server_name | |||
extension [RFC6066]. | ||||
The uniqueness requirements of the certificate_request_context apply | The uniqueness requirements of the certificate_request_context apply | |||
only to CertificateRequest and ClientCertificateRequest messages that | across CertificateRequest and ClientCertificateRequest messages that | |||
are used as part of authenticator requests, but do apply across | are used as part of authenticator requests. A | |||
CertificateRequest and ClientCertificateRequest messages. A | ||||
certificate_request_context value used in a ClientCertificateRequest | certificate_request_context value used in a ClientCertificateRequest | |||
cannot be used in an authenticator CertificateRequest on the same | cannot be used in an authenticator CertificateRequest on the same | |||
connection, and vice versa. There is no impact if the value of a | connection, and vice versa. There is no impact if the value of a | |||
certificate_request_context used in an authenticator request matches | certificate_request_context used in an authenticator request matches | |||
the value of a certificate_request_context in the handshake or in a | the value of a certificate_request_context in the handshake or in a | |||
post-handshake message. | post-handshake message. | |||
5. Authenticator | 5. Authenticator | |||
The authenticator is a structured message that can be exported from | The authenticator is a structured message that can be exported from | |||
either party of a (D)TLS connection. It can be transmitted to the | either party of a (D)TLS connection. It can be transmitted to the | |||
other party of the (D)TLS connection at the application layer. The | other party of the (D)TLS connection at the application layer. The | |||
application layer protocol used to send the authenticator SHOULD use | application-layer protocol used to send the authenticator SHOULD use | |||
a secure transport channel with equivalent security to TLS, such as | a secure transport channel with equivalent security to TLS, such as | |||
QUIC [RFC9001], as its underlying transport to keep the authenticator | QUIC [RFC9001], as its underlying transport to keep the authenticator | |||
confidential. The application MAY use the existing (D)TLS connection | confidential. The application MAY use the existing (D)TLS connection | |||
to transport the authenticator. | to transport the authenticator. | |||
An authenticator message can be constructed by either the client or | An authenticator message can be constructed by either the client or | |||
the server given an established (D)TLS connection, an identity, such | the server given an established (D)TLS connection; an identity, such | |||
as an X.509 certificate, and a corresponding private key. Clients | as an X.509 certificate; and a corresponding private key. Clients | |||
MUST NOT send an authenticator without a preceding authenticator | MUST NOT send an authenticator without a preceding authenticator | |||
request; for servers an authenticator request is optional. For | request; for servers, an authenticator request is optional. For | |||
authenticators that do not correspond to authenticator requests, the | authenticators that do not correspond to authenticator requests, the | |||
certificate_request_context is chosen by the server. | certificate_request_context is chosen by the server. | |||
5.1. Authenticator Keys | 5.1. Authenticator Keys | |||
Each authenticator is computed using a Handshake Context and Finished | Each authenticator is computed using a Handshake Context and Finished | |||
MAC Key derived from the (D)TLS connection. These values are derived | MAC (Message Authentication Code) Key derived from the (D)TLS | |||
using an exporter as described in Section 4 of [RFC5705] (for (D)TLS | connection. These values are derived using an exporter as described | |||
1.2) or Section 7.5 of [RFC8446] (for (D)TLS 1.3). For (D)TLS 1.3, | in Section 4 of [RFC5705] (for (D)TLS 1.2) or Section 7.5 of | |||
the exporter_master_secret MUST be used, not the | [RFC8446] (for (D)TLS 1.3). For (D)TLS 1.3, the | |||
exporter_master_secret MUST be used, not the | ||||
early_exporter_master_secret. These values use different labels | early_exporter_master_secret. These values use different labels | |||
depending on the role of the sender: | depending on the role of the sender: | |||
* The Handshake Context is an exporter value that is derived using | * The Handshake Context is an exporter value that is derived using | |||
the label "EXPORTER-client authenticator handshake context" or | the label "EXPORTER-client authenticator handshake context" or | |||
"EXPORTER-server authenticator handshake context" for | "EXPORTER-server authenticator handshake context" for | |||
authenticators sent by the client or server respectively. | authenticators sent by the client or server, respectively. | |||
* The Finished MAC Key is an exporter value derived using the label | * The Finished MAC Key is an exporter value derived using the label | |||
"EXPORTER-client authenticator finished key" or "EXPORTER-server | "EXPORTER-client authenticator finished key" or "EXPORTER-server | |||
authenticator finished key" for authenticators sent by the client | authenticator finished key" for authenticators sent by the client | |||
or server respectively. | or server, respectively. | |||
The context_value used for the exporter is empty (zero length) for | The context_value used for the exporter is empty (zero length) for | |||
all four values. There is no need to include additional context | all four values. There is no need to include additional context | |||
information at this stage since the application-supplied context is | information at this stage because the application-supplied context is | |||
included in the authenticator itself. The length of the exported | included in the authenticator itself. The length of the exported | |||
value is equal to the length of the output of the hash function | value is equal to the length of the output of the hash function | |||
associated with the selected cipher suite (for TLS 1.3) or the hash | associated with the selected ciphersuite (for TLS 1.3) or the hash | |||
function used for the pseudorandom function (PRF) (for (D)TLS 1.2). | function used for the pseudorandom function (PRF) (for (D)TLS 1.2). | |||
Exported authenticators cannot be used with (D)TLS 1.2 cipher suites | Exported Authenticators cannot be used with (D)TLS 1.2 ciphersuites | |||
that do not use the TLS PRF and with TLS 1.3 cipher suites that do | that do not use the TLS PRF and with TLS 1.3 ciphersuites that do not | |||
not have an associated hash function. This hash is referred to as | have an associated hash function. This hash is referred to as the | |||
the authenticator hash. | "authenticator hash". | |||
To avoid key synchronization attacks, Exported Authenticators MUST | To avoid key synchronization attacks, Exported Authenticators MUST | |||
NOT be generated or accepted on (D)TLS 1.2 connections that did not | NOT be generated or accepted on (D)TLS 1.2 connections that did not | |||
negotiate the extended master secret extension [RFC7627]. | negotiate the extended master secret extension [RFC7627]. | |||
5.2. Authenticator Construction | 5.2. Authenticator Construction | |||
An authenticator is formed from the concatenation of TLS 1.3 | An authenticator is formed from the concatenation of TLS 1.3 | |||
[RFC8446] Certificate, CertificateVerify, and Finished messages. | Certificate, CertificateVerify, and Finished messages [RFC8446]. | |||
These messages are encoded as TLS handshake messages, including | These messages are encoded as TLS handshake messages, including | |||
length and type fields. They do not include any TLS record layer | length and type fields. They do not include any TLS record-layer | |||
framing and are not encrypted with a handshake or application-data | framing and are not encrypted with a handshake or application-data | |||
key. | key. | |||
If the peer populating the certificate_request_context field in an | If the peer populating the certificate_request_context field in an | |||
authenticator's Certificate message has already created or correctly | authenticator's Certificate message has already created or correctly | |||
validated an authenticator with the same value, then no authenticator | validated an authenticator with the same value, then no authenticator | |||
should be constructed. If there is no authenticator request, the | should be constructed. If there is no authenticator request, the | |||
extensions are chosen from those presented in the (D)TLS handshake's | extensions are chosen from those presented in the (D)TLS handshake's | |||
ClientHello. Only servers can provide an authenticator without a | ClientHello. Only servers can provide an authenticator without a | |||
corresponding request. | corresponding request. | |||
skipping to change at page 8, line 9 ¶ | skipping to change at line 325 ¶ | |||
the general model for extensions in (D)TLS in which extensions can | the general model for extensions in (D)TLS in which extensions can | |||
only be included as part of a Certificate message if they were | only be included as part of a Certificate message if they were | |||
previously sent as part of a CertificateRequest message or | previously sent as part of a CertificateRequest message or | |||
ClientHello message. This ensures that the recipient will be able to | ClientHello message. This ensures that the recipient will be able to | |||
process such extensions. | process such extensions. | |||
5.2.1. Certificate | 5.2.1. Certificate | |||
The Certificate message contains the identity to be used for | The Certificate message contains the identity to be used for | |||
authentication, such as the end-entity certificate and any supporting | authentication, such as the end-entity certificate and any supporting | |||
certificates in the chain. This structure is defined in [RFC8446], | certificates in the chain. This structure is defined in | |||
Section 4.4.2. | Section 4.4.2 of [RFC8446]. | |||
The Certificate message contains an opaque string called | The Certificate message contains an opaque string called | |||
certificate_request_context, which is extracted from the | "certificate_request_context", which is extracted from the | |||
authenticator request if present. If no authenticator request is | authenticator request, if present. If no authenticator request is | |||
provided, the certificate_request_context can be chosen arbitrarily | provided, the certificate_request_context can be chosen arbitrarily; | |||
but MUST be unique within the scope of the connection and be | however, it MUST be unique within the scope of the connection and be | |||
unpredictable to the peer. | unpredictable to the peer. | |||
Certificates chosen in the Certificate message MUST conform to the | Certificates chosen in the Certificate message MUST conform to the | |||
requirements of a Certificate message in the negotiated version of | requirements of a Certificate message in the negotiated version of | |||
(D)TLS. In particular, the entries of certificate_list MUST be valid | (D)TLS. In particular, the entries of certificate_list MUST be valid | |||
for the signature algorithms indicated by the peer in the | for the signature algorithms indicated by the peer in the | |||
"signature_algorithms" and "signature_algorithms_cert" extension, as | "signature_algorithms" and "signature_algorithms_cert" extensions, as | |||
described in Section 4.2.3 of [RFC8446] for (D)TLS 1.3 or from | described in Section 4.2.3 of [RFC8446] for (D)TLS 1.3 or in Sections | |||
Sections 7.4.2 and 7.4.6 of [RFC5246] for (D)TLS 1.2. | 7.4.2 and 7.4.6 of [RFC5246] for (D)TLS 1.2. | |||
In addition to "signature_algorithms" and | In addition to "signature_algorithms" and | |||
"signature_algorithms_cert", the "server_name" [RFC6066], | "signature_algorithms_cert", the "server_name" [RFC6066], | |||
"certificate_authorities" (Section 4.2.4. of [RFC8446]), and | "certificate_authorities" (Section 4.2.4 of [RFC8446]), and | |||
"oid_filters" (Section 4.2.5. of [RFC8446]) extensions are used to | "oid_filters" (Section 4.2.5 of [RFC8446]) extensions are used to | |||
guide certificate selection. | guide certificate selection. | |||
Only the X.509 certificate type defined in [RFC8446] is supported. | Only the X.509 certificate type defined in [RFC8446] is supported. | |||
Alternative certificate formats such as [RFC7250] Raw Public Keys are | Alternative certificate formats such as Raw Public Keys as described | |||
not supported in this version of the specification and their use in | in [RFC7250] are not supported in this version of the specification | |||
this context has not yet been analysed. | and their use in this context has not yet been analyzed. | |||
If an authenticator request was provided, the Certificate message | If an authenticator request was provided, the Certificate message | |||
MUST contain only extensions present in the authenticator request. | MUST contain only extensions present in the authenticator request. | |||
Otherwise, the Certificate message MUST contain only extensions | Otherwise, the Certificate message MUST contain only extensions | |||
present in the (D)TLS ClientHello. Unrecognized extensions in the | present in the (D)TLS ClientHello. Unrecognized extensions in the | |||
authenticator request MUST be ignored. | authenticator request MUST be ignored. | |||
5.2.2. CertificateVerify | 5.2.2. CertificateVerify | |||
This message is used to provide explicit proof that an endpoint | This message is used to provide explicit proof that an endpoint | |||
skipping to change at page 9, line 16 ¶ | skipping to change at line 377 ¶ | |||
SignatureScheme algorithm; | SignatureScheme algorithm; | |||
opaque signature<0..2^16-1>; | opaque signature<0..2^16-1>; | |||
} CertificateVerify; | } CertificateVerify; | |||
The algorithm field specifies the signature algorithm used (see | The algorithm field specifies the signature algorithm used (see | |||
Section 4.2.3 of [RFC8446] for the definition of this field). The | Section 4.2.3 of [RFC8446] for the definition of this field). The | |||
signature is a digital signature using that algorithm. | signature is a digital signature using that algorithm. | |||
The signature scheme MUST be a valid signature scheme for TLS 1.3. | The signature scheme MUST be a valid signature scheme for TLS 1.3. | |||
This excludes all RSASSA-PKCS1-v1_5 algorithms and combinations of | This excludes all RSASSA-PKCS1-v1_5 algorithms and combinations of | |||
ECDSA and hash algorithms that are not supported in TLS 1.3. | Elliptic Curve Digital Signature Algorithm (ECDSA) and hash | |||
algorithms that are not supported in TLS 1.3. | ||||
If an authenticator request is present, the signature algorithm MUST | If an authenticator request is present, the signature algorithm MUST | |||
be chosen from one of the signature schemes present in the | be chosen from one of the signature schemes present in the | |||
"signature_algorithms" extensino of the authenticator request. | "signature_algorithms" extension of the authenticator request. | |||
Otherwise, with spontaneous server authentication, the signature | Otherwise, with spontaneous server authentication, the signature | |||
algorithm used MUST be chosen from the "signature_algorithms" sent by | algorithm used MUST be chosen from the "signature_algorithms" sent by | |||
the peer in the ClientHello of the (D)TLS handshake. If there are no | the peer in the ClientHello of the (D)TLS handshake. If there are no | |||
available signature algorithms, then no authenticator should be | available signature algorithms, then no authenticator should be | |||
constructed. | constructed. | |||
The signature is computed using the chosen signature scheme over the | The signature is computed using the chosen signature scheme over the | |||
concatenation of: | concatenation of: | |||
* A string that consists of octet 32 (0x20) repeated 64 times | * a string that consists of octet 32 (0x20) repeated 64 times, | |||
* The context string "Exported Authenticator" (which is not NUL- | * the context string "Exported Authenticator" (which is not NUL- | |||
terminated) | terminated), | |||
* A single 0 octet which serves as the separator | * a single 0 octet that serves as the separator, and | |||
* The hashed authenticator transcript | * the hashed authenticator transcript. | |||
The authenticator transcript is the hash of the concatenated | The authenticator transcript is the hash of the concatenated | |||
Handshake Context, authenticator request (if present), and | Handshake Context, authenticator request (if present), and | |||
Certificate message: | Certificate message: | |||
Hash(Handshake Context || authenticator request || Certificate) | Hash(Handshake Context || authenticator request || Certificate) | |||
Where Hash is the authenticator hash defined in section 4.1. If the | Where Hash is the authenticator hash defined in Section 5.1. If the | |||
authenticator request is not present, it is omitted from this | authenticator request is not present, it is omitted from this | |||
construction, i.e., it is zero-length. | construction, i.e., it is zero-length. | |||
If the party that generates the exported authenticator does so with a | If the party that generates the authenticator does so with a | |||
different connection than the party that is validating it, then the | different connection than the party that is validating it, then the | |||
Handshake Context will not match, resulting in a CertificateVerify | Handshake Context will not match, resulting in a CertificateVerify | |||
message that does not validate. This includes situations in which | message that does not validate. This includes situations in which | |||
the application data is sent via TLS-terminating proxy. Given a | the application data is sent via TLS-terminating proxy. Given a | |||
failed CertificateVerify validation, it may be helpful for the | failed CertificateVerify validation, it may be helpful for the | |||
application to confirm that both peers share the same connection | application to confirm that both peers share the same connection | |||
using a value derived from the connection secrets (such as the | using a value derived from the connection secrets (such as the | |||
Handshake Context) before taking a user-visible action. | Handshake Context) before taking a user-visible action. | |||
5.2.3. Finished | 5.2.3. Finished | |||
An HMAC [HMAC] over the hashed authenticator transcript, which is the | An HMAC [HMAC] over the hashed authenticator transcript is the | |||
concatenation of the Handshake Context, authenticator request (if | concatenation of the Handshake Context, authenticator request (if | |||
present), Certificate, and CertificateVerify. The HMAC is computed | present), Certificate, and CertificateVerify. The HMAC is computed | |||
using the authenticator hash, using the Finished MAC Key as a key. | using the authenticator hash, using the Finished MAC Key as a key. | |||
Finished = HMAC(Finished MAC Key, Hash(Handshake Context || | Finished = HMAC(Finished MAC Key, Hash(Handshake Context || | |||
authenticator request || Certificate || CertificateVerify)) | authenticator request || Certificate || CertificateVerify)) | |||
5.2.4. Authenticator Creation | 5.2.4. Authenticator Creation | |||
An endpoint constructs an authenticator by serializing the | An endpoint constructs an authenticator by serializing the | |||
skipping to change at page 10, line 38 ¶ | skipping to change at line 449 ¶ | |||
An authenticator is valid if the CertificateVerify message is | An authenticator is valid if the CertificateVerify message is | |||
correctly constructed given the authenticator request (if used) and | correctly constructed given the authenticator request (if used) and | |||
the Finished message matches the expected value. When validating an | the Finished message matches the expected value. When validating an | |||
authenticator, constant-time comparisons SHOULD be used for signature | authenticator, constant-time comparisons SHOULD be used for signature | |||
and MAC validation. | and MAC validation. | |||
6. Empty Authenticator | 6. Empty Authenticator | |||
If, given an authenticator request, the endpoint does not have an | If, given an authenticator request, the endpoint does not have an | |||
appropriate identity or does not want to return one, it constructs an | appropriate identity or does not want to return one, it constructs an | |||
authenticated refusal called an empty authenticator. This is a | authenticated refusal called an "empty authenticator". This is a | |||
Finished message sent without a Certificate or CertificateVerify. | Finished message sent without a Certificate or CertificateVerify. | |||
This message is an HMAC over the hashed authenticator transcript with | This message is an HMAC over the hashed authenticator transcript with | |||
a Certificate message containing no CertificateEntries and the | a Certificate message containing no CertificateEntries and the | |||
CertificateVerify message omitted. The HMAC is computed using the | CertificateVerify message omitted. The HMAC is computed using the | |||
authenticator hash, using the Finished MAC Key as a key. This | authenticator hash, using the Finished MAC Key as a key. This | |||
message is encoded as a TLS handshake message, including length and | message is encoded as a TLS handshake message, including length and | |||
type field. It does not include TLS record layer framing and is not | type field. It does not include TLS record-layer framing and is not | |||
encrypted with a handshake or application-data key. | encrypted with a handshake or application-data key. | |||
Finished = HMAC(Finished MAC Key, Hash(Handshake Context || | Finished = HMAC(Finished MAC Key, Hash(Handshake Context || | |||
authenticator request || Certificate)) | authenticator request || Certificate)) | |||
7. API considerations | 7. API Considerations | |||
The creation and validation of both authenticator requests and | The creation and validation of both authenticator requests and | |||
authenticators SHOULD be implemented inside the (D)TLS library even | authenticators SHOULD be implemented inside the (D)TLS library even | |||
if it is possible to implement it at the application layer. (D)TLS | if it is possible to implement it at the application layer. (D)TLS | |||
implementations supporting the use of exported authenticators SHOULD | implementations supporting the use of Exported Authenticators SHOULD | |||
provide application programming interfaces by which clients and | provide application programming interfaces by which clients and | |||
servers may request and verify exported authenticator messages. | servers may request and verify Exported Authenticator messages. | |||
Notwithstanding the success conditions described below, all APIs MUST | Notwithstanding the success conditions described below, all APIs MUST | |||
fail if: | fail if: | |||
* the connection uses a (D)TLS version of 1.1 or earlier, or | * the connection uses a (D)TLS version of 1.1 or earlier, or | |||
* the connection is (D)TLS 1.2 and the extended master secret | * the connection is (D)TLS 1.2 and the extended master secret | |||
extension [RFC7627] was not negotiated | extension [RFC7627] was not negotiated | |||
The following sections describe APIs that are considered necessary to | The following sections describe APIs that are considered necessary to | |||
implement exported authenticators. These are informative only. | implement Exported Authenticators. These are informative only. | |||
7.1. The "request" API | 7.1. The "request" API | |||
The "request" API takes as input: | The "request" API takes as input: | |||
* certificate_request_context (from 0 to 255 octets) | * certificate_request_context (from 0 to 255 octets) | |||
* set of extensions to include (this MUST include | * the set of extensions to include (this MUST include | |||
signature_algorithms) and the contents thereof | signature_algorithms) and the contents thereof | |||
It returns an authenticator request, which is a sequence of octets | It returns an authenticator request, which is a sequence of octets | |||
that comprises a CertificateRequest or ClientCertificateRequest | that comprises a CertificateRequest or ClientCertificateRequest | |||
message. | message. | |||
7.2. The "get context" API | 7.2. The "get context" API | |||
The "get context" API takes as input: | The "get context" API takes as input: | |||
skipping to change at page 12, line 4 ¶ | skipping to change at line 508 ¶ | |||
* authenticator or authenticator request | * authenticator or authenticator request | |||
It returns the certificate_request_context. | It returns the certificate_request_context. | |||
7.3. The "authenticate" API | 7.3. The "authenticate" API | |||
The "authenticate" API takes as input: | The "authenticate" API takes as input: | |||
* a reference to the initial connection | * a reference to the initial connection | |||
* an identity, such as a set of certificate chains and associated | * an identity, such as a set of certificate chains and associated | |||
extensions (OCSP [RFC6960], SCT [RFC6962], etc.) | extensions (OCSP [RFC6960], SCT [RFC6962] (obsoleted by | |||
[RFC9162]), etc.) | ||||
* a signer (either the private key associated with the identity, or | * a signer (either the private key associated with the identity or | |||
interface to perform private key operations) for each chain | the interface to perform private key operations) for each chain | |||
* an authenticator request or certificate_request_context (from 0 to | * an authenticator request or certificate_request_context (from 0 to | |||
255 octets) | 255 octets) | |||
It returns either the exported authenticator or an empty | It returns either the authenticator or an empty authenticator as a | |||
authenticator as a sequence of octets. It is recommended that the | sequence of octets. It is RECOMMENDED that the logic for selecting | |||
logic for selecting the certificates and extensions to include in the | the certificates and extensions to include in the exporter be | |||
exporter is implemented in the TLS library. Implementing this in the | implemented in the TLS library. Implementing this in the TLS library | |||
TLS library lets the implementer take advantage of existing extension | lets the implementer take advantage of existing extension and | |||
and certificate selection logic and more easily remember which | certificate selection logic, and the implementer can more easily | |||
extensions were sent in the ClientHello. | remember which extensions were sent in the ClientHello. | |||
It is also possible to implement this API outside of the TLS library | It is also possible to implement this API outside of the TLS library | |||
using TLS exporters. This may be preferable in cases where the | using TLS exporters. This may be preferable in cases where the | |||
application does not have access to a TLS library with these APIs or | application does not have access to a TLS library with these APIs or | |||
when TLS is handled independently of the application layer protocol. | when TLS is handled independently of the application-layer protocol. | |||
7.4. The "validate" API | 7.4. The "validate" API | |||
The "validate" API takes as input: | The "validate" API takes as input: | |||
* a reference to the initial connection | * a reference to the initial connection | |||
* an optional authenticator request | * an optional authenticator request | |||
* an authenticator | * an authenticator | |||
* a function for validating a certificate chain | * a function for validating a certificate chain | |||
It returns a status to indicate whether the authenticator is valid or | It returns a status to indicate whether or not the authenticator is | |||
not after applying the function for validating the certificate chain | valid after applying the function for validating the certificate | |||
to the chain contained in the authenticator. If validation is | chain to the chain contained in the authenticator. If validation is | |||
successful, it also returns the identity, such as the certificate | successful, it also returns the identity, such as the certificate | |||
chain and its extensions. | chain and its extensions. | |||
The API should return a failure if the certificate_request_context of | The API should return a failure if the certificate_request_context of | |||
the authenticator was used in a different authenticator that was | the authenticator was used in a different authenticator that was | |||
previously validated. Well-formed empty authenticators are returned | previously validated. Well-formed empty authenticators are returned | |||
as invalid. | as invalid. | |||
When validating an authenticator, constant-time comparison should be | When validating an authenticator, constant-time comparison should be | |||
used. | used. | |||
8. IANA Considerations | 8. IANA Considerations | |||
8.1. Update of the TLS ExtensionType Registry | 8.1. Update of the TLS ExtensionType Registry | |||
IANA is requested to update the entry for server_name(0) in the | IANA has updated the entry for server_name(0) in the "TLS | |||
registry for ExtensionType (defined in [RFC8446]) by replacing the | ExtensionType Values" registry [IANA-TLS] (defined in [RFC8446]) by | |||
value in the "TLS 1.3" column with the value "CH, EE, CR" and adding | replacing the value in the "TLS 1.3" column with the value "CH, EE, | |||
this document in the "Reference" column. | CR" and listing this document in the "Reference" column. | |||
IANA is also requested to add the following note to the registry: | IANA has also added the following note to the registry: | |||
The addition of the "CR" to the "TLS 1.3" column for the | | The addition of the "CR" to the "TLS 1.3" column for the | |||
server_name(0) extension only marks the extension as valid in a | | server_name(0) extension only marks the extension as valid in a | |||
ClientCertificateRequest created as part of client-generated | | ClientCertificateRequest created as part of client-generated | |||
authenticator requests. | | authenticator requests. | |||
8.2. Update of the TLS Exporter Labels Registry | 8.2. Update of the TLS Exporter Labels Registry | |||
IANA is requested to add the following entries to the registry for | IANA has added the following entries to the "TLS Exporter Labels" | |||
Exporter Labels (defined in [RFC5705]): "EXPORTER-client | registry [IANA-EXPORT] (defined in [RFC5705]): "EXPORTER-client | |||
authenticator handshake context", "EXPORTER-server authenticator | authenticator handshake context", "EXPORTER-server authenticator | |||
handshake context", "EXPORTER-client authenticator handshake | handshake context", "EXPORTER-client authenticator finished key" and | |||
context", "EXPORTER-client authenticator finished key" and "EXPORTER- | "EXPORTER-server authenticator finished key" with "DTLS-OK" and | |||
server authenticator finished key" with "DTLS-OK" and "Recommended" | "Recommended" set to "Y" and this document listed as the reference. | |||
set to "Y" and this document added to the "Reference" column. | ||||
8.3. Update of the TLS HandshakeType Registry | 8.3. Update of the TLS HandshakeType Registry | |||
IANA is requested to add the following entry to the registry for | IANA has added the following entry to the "TLS HandshakeType" | |||
HandshakeType (defined in [RFC8446]): "client_certificate_request" | registry [IANA-HANDSHAKE] (defined in [RFC8446]): | |||
with "DTLS-OK" and "Recommended" set to "Y" and this document added | "client_certificate_request" (17) with "DTLS-OK" set to "Y" and this | |||
to the "Reference" column with the following in the "Note" column: | document listed as the reference. In addition, the following appears | |||
"Used in TLS versions prior to 1.3." | in the "Comment" column: | |||
| Used in TLS versions prior to 1.3. | ||||
9. Security Considerations | 9. Security Considerations | |||
The Certificate/Verify/Finished pattern intentionally looks like the | The Certificate/Verify/Finished pattern intentionally looks like the | |||
TLS 1.3 pattern which now has been analyzed several times. For | TLS 1.3 pattern that now has been analyzed several times. For | |||
example, [SIGMAC] presents a relevant framework for analysis, and | example, [SIGMAC] presents a relevant framework for analysis, and | |||
section 10. of [RFC8446] contains a conprehensive set of references. | Appendix E.1.6 of [RFC8446] contains a comprehensive set of | |||
references. | ||||
Authenticators are independent and unidirectional. There is no | Authenticators are independent and unidirectional. There is no | |||
explicit state change inside TLS when an authenticator is either | explicit state change inside TLS when an authenticator is either | |||
created or validated. The application in possession of a validated | created or validated. The application in possession of a validated | |||
authenticator can rely on any semantics associated with data in the | authenticator can rely on any semantics associated with data in the | |||
certificate_request_context. | certificate_request_context. | |||
* This property makes it difficult to formally prove that a server | * This property makes it difficult to formally prove that a server | |||
is jointly authoritative over multiple identities, rather than | is jointly authoritative over multiple identities, rather than | |||
individually authoritative over each. | individually authoritative over each. | |||
* There is no indication in (D)TLS about which point in time an | * There is no indication in (D)TLS about which point in time an | |||
authenticator was computed. Any feedback about the time of | authenticator was computed. Any feedback about the time of | |||
creation or validation of the authenticator should be tracked as | creation or validation of the authenticator should be tracked as | |||
part of the application layer semantics if required. | part of the application-layer semantics if required. | |||
The signatures generated with this API cover the context string | The signatures generated with this API cover the context string | |||
"Exported Authenticator" and therefore cannot be transplanted into | "Exported Authenticator"; therefore, they cannot be transplanted into | |||
other protocols. | other protocols. | |||
In TLS 1.3 the client can not explicitly learn from the TLS layer | In TLS 1.3, the client cannot explicitly learn from the TLS layer | |||
whether its Finished message was accepted. Because the application | whether its Finished message was accepted. Because the application | |||
traffic keys are not dependent on the client's final flight, | traffic keys are not dependent on the client's final flight, | |||
receiving messages from the server does not prove that the server | receiving messages from the server does not prove that the server | |||
received the client's Finished. To avoid disagreement between the | received the client's Finished message. To avoid disagreement | |||
client and server on the authentication status of EAs, servers MUST | between the client and server on the authentication status of | |||
verify the client Finished before sending an EA or processing a | Exported Authenticators, servers MUST verify the client Finished | |||
received EA. | message before sending an EA or processing a received Exported | |||
Authenticator. | ||||
10. Acknowledgements | ||||
Comments on this proposal were provided by Martin Thomson. | ||||
Suggestions for Section 9 were provided by Karthikeyan Bhargavan. | ||||
11. References | 10. References | |||
11.1. Normative References | 10.1. Normative References | |||
[HMAC] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | [HMAC] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
Hashing for Message Authentication", RFC 2104, | Hashing for Message Authentication", RFC 2104, | |||
DOI 10.17487/RFC2104, February 1997, | DOI 10.17487/RFC2104, February 1997, | |||
<https://www.rfc-editor.org/info/rfc2104>. | <https://www.rfc-editor.org/info/rfc2104>. | |||
[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>. | |||
skipping to change at page 15, line 36 ¶ | skipping to change at line 680 ¶ | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[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>. | |||
[RFC8447] Salowey, J. and S. Turner, "IANA Registry Updates for TLS | [RFC8447] Salowey, J. and S. Turner, "IANA Registry Updates for TLS | |||
and DTLS", RFC 8447, DOI 10.17487/RFC8447, August 2018, | and DTLS", RFC 8447, DOI 10.17487/RFC8447, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8447>. | <https://www.rfc-editor.org/info/rfc8447>. | |||
11.2. Informative References | 10.2. Informative References | |||
[IANA-EXPORT] | ||||
IANA, "TLS Exporter Labels", | ||||
<https://www.iana.org/assignments/tls-parameters/>. | ||||
[IANA-HANDSHAKE] | ||||
IANA, "TLS HandshakeType", | ||||
<https://www.iana.org/assignments/tls-parameters/>. | ||||
[IANA-TLS] IANA, "TLS ExtensionType Values", | ||||
<https://www.iana.org/assignments/tls-extensiontype- | ||||
values/>. | ||||
[RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., | [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., | |||
Galperin, S., and C. Adams, "X.509 Internet Public Key | Galperin, S., and C. Adams, "X.509 Internet Public Key | |||
Infrastructure Online Certificate Status Protocol - OCSP", | Infrastructure Online Certificate Status Protocol - OCSP", | |||
RFC 6960, DOI 10.17487/RFC6960, June 2013, | RFC 6960, DOI 10.17487/RFC6960, June 2013, | |||
<https://www.rfc-editor.org/info/rfc6960>. | <https://www.rfc-editor.org/info/rfc6960>. | |||
[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>. | |||
[RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | [RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | |||
Weiler, S., and T. Kivinen, "Using Raw Public Keys in | Weiler, S., and T. Kivinen, "Using Raw Public Keys in | |||
Transport Layer Security (TLS) and Datagram Transport | Transport Layer Security (TLS) and Datagram Transport | |||
Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | |||
June 2014, <https://www.rfc-editor.org/info/rfc7250>. | June 2014, <https://www.rfc-editor.org/info/rfc7250>. | |||
[RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | ||||
Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | ||||
DOI 10.17487/RFC7540, May 2015, | ||||
<https://www.rfc-editor.org/info/rfc7540>. | ||||
[RFC9001] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | [RFC9001] Thomson, M., Ed. and S. Turner, Ed., "Using TLS to Secure | |||
QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | QUIC", RFC 9001, DOI 10.17487/RFC9001, May 2021, | |||
<https://www.rfc-editor.org/info/rfc9001>. | <https://www.rfc-editor.org/info/rfc9001>. | |||
[RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113, | ||||
DOI 10.17487/RFC9113, June 2022, | ||||
<https://www.rfc-editor.org/info/rfc9113>. | ||||
[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>. | ||||
[SIGMAC] Krawczyk, H., "A Unilateral-to-Mutual Authentication | [SIGMAC] Krawczyk, H., "A Unilateral-to-Mutual Authentication | |||
Compiler for Key Exchange (with Applications to Client | Compiler for Key Exchange (with Applications to Client | |||
Authentication in TLS 1.3)", 2016, | Authentication in TLS 1.3)", Proceedings of the 2016 ACM | |||
SIGSAC Conference on Computer and Communications Security, | ||||
DOI 10.1145/2976749.2978325, August 2016, | ||||
<https://eprint.iacr.org/2016/711.pdf>. | <https://eprint.iacr.org/2016/711.pdf>. | |||
Acknowledgements | ||||
Comments on this proposal were provided by Martin Thomson. | ||||
Suggestions for Section 9 were provided by Karthikeyan Bhargavan. | ||||
Author's Address | Author's Address | |||
Nick Sullivan | Nick Sullivan | |||
Cloudflare Inc. | Cloudflare Inc. | |||
Email: nick@cloudflare.com | Email: nick@cloudflare.com | |||
End of changes. 93 change blocks. | ||||
204 lines changed or deleted | 225 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/ |