<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.6 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-httpbis-http2-secondary-certs-06" category="std">

  <front>
    <title abbrev="Secondary Cert Auth in HTTP/2">Secondary Certificate Authentication in HTTP/2</title>

    <author initials="M." surname="Bishop" fullname="Mike Bishop">
      <organization>Akamai</organization>
      <address>
        <email>mbishop@evequefou.be</email>
      </address>
    </author>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cloudflare</organization>
      <address>
        <email>nick@cloudflare.com</email>
      </address>
    </author>
    <author initials="M." surname="Thomson" fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>martin.thomson@gmail.com</email>
      </address>
    </author>

    <date />

    <area>General</area>
    <workgroup>HTTP</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>A use of TLS Exported Authenticators is described which enables HTTP/2 clients
and servers to offer additional certificate-based credentials after the
connection is established. The means by which these credentials are used with
requests is defined.</t>



    </abstract>


    <note title="Note to Readers">


<t>Discussion of this draft takes place on the HTTP working group mailing list
(ietf-http-wg@w3.org), which is archived at
<eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/">https://lists.w3.org/Archives/Public/ietf-http-wg/</eref>.</t>

<t>Working Group information can be found at <eref target="http://httpwg.github.io/">http://httpwg.github.io/</eref>; source
code and issues list for this draft can be found at
<eref target="https://github.com/httpwg/http-extensions/labels/secondary-certs">https://github.com/httpwg/http-extensions/labels/secondary-certs</eref>.</t>


    </note>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>HTTP clients need to know that the content they receive on a connection comes
from the origin that they intended to retrieve it from. The traditional form of
server authentication in HTTP has been in the form of a single X.509 certificate
provided during the TLS (<xref target="RFC5246"></xref>, <xref target="RFC8446"></xref>) handshake.</t>

<t>Many existing HTTP <xref target="RFC7230"></xref> servers also have authentication requirements for
the resources they serve.  Of the bountiful authentication options available for
authenticating HTTP requests, client certificates present a unique challenge for
resource-specific authentication requirements because of the interaction with
the underlying TLS layer.</t>

<t>TLS 1.2 <xref target="RFC5246"></xref> supports one server and one client certificate on a
connection. These certificates may contain multiple identities, but only one
certificate may be provided.</t>

<t>Many HTTP servers host content from several origins. HTTP/2 permits clients to
reuse an existing HTTP connection to a server provided that the secondary origin
is also in the certificate provided during the TLS handshake.  In many cases,
servers choose to maintain separate certificates for different origins but
still desire the benefits of a shared HTTP connection.</t>

<section anchor="server-certificate-authentication" title="Server Certificate Authentication">

<t>Section 9.1.1 of <xref target="RFC7540"></xref> describes how connections may be used to make
requests from multiple origins as long as the server is authoritative for both.
A server is considered authoritative for an origin if DNS resolves the origin to
the IP address of the server and (for TLS) if the certificate presented by the
server contains the origin in the Subject Alternative Names field.</t>

<t><xref target="RFC7838"></xref> enables a step of abstraction from the DNS resolution. If both hosts
have provided an Alternative Service at hostnames which resolve to the IP
address of the server, they are considered authoritative just as if DNS resolved
the origin itself to that address. However, the server’s one TLS certificate is
still required to contain the name of each origin in question.</t>

<t><xref target="RFC8336"/> relaxes the requirement to perform the DNS lookup if already
connected to a server with an appropriate certificate which claims support for a
particular origin.</t>

<t>Servers which host many origins often would prefer to have separate certificates
for some sets of origins. This may be for ease of certificate management (the
ability to separately revoke or renew them), due to different sources of
certificates (a CDN acting on behalf of multiple origins), or other factors
which might drive this administrative decision. Clients connecting to such
origins cannot currently reuse connections, even if both client and server would
prefer to do so.</t>

<t>Because the TLS SNI extension is exchanged in the clear, clients might also
prefer to retrieve certificates inside the encrypted context. When this
information is sensitive, it might be advantageous to request a general-purpose
certificate or anonymous ciphersuite at the TLS layer, while acquiring the
“real” certificate in HTTP after the connection is established.</t>

</section>
<section anchor="client-certificate-authentication" title="Client Certificate Authentication">

<t>For servers that wish to use client certificates to authenticate users, they
might request client authentication during or immediately after the TLS
handshake. However, if not all users or resources need certificate-based
authentication, a request for a certificate has the unfortunate consequence of
triggering the client to seek a certificate, possibly requiring user
interaction, network traffic, or other time-consuming activities. During this
time, the connection is stalled in many implementations. Such a request can
result in a poor experience, particularly when sent to a client that does not
expect the request.</t>

<t>The TLS 1.3 CertificateRequest can be used by servers to give clients hints
about which certificate to offer. Servers that rely on certificate-based
authentication might request different certificates for different resources.
Such a server cannot use contextual information about the resource to construct
an appropriate TLS CertificateRequest message during the initial handshake.</t>

<t>Consequently, client certificates are requested at connection establishment time
only in cases where all clients are expected or required to have a single
certificate that is used for all resources. Many other uses for client
certificates are reactive, that is, certificates are requested in response to
the client making a request.</t>

<section anchor="http11-using-tls-12-and-earlier" title="HTTP/1.1 Using TLS 1.2 and Earlier">

<t>In HTTP/1.1, a server that relies on client authentication for a subset of users
or resources does not request a certificate when the connection is established.
Instead, it only requests a client certificate when a request is made to a
resource that requires a certificate.  TLS 1.2 <xref target="RFC5246"></xref> accommodates this by
permitting the server to request a new TLS handshake, in which the server will
request the client’s certificate.</t>

<t><xref target="ex-http11"/> shows the server initiating a TLS-layer renegotiation in response
to receiving an HTTP/1.1 request to a protected resource.</t>

<figure title="HTTP/1.1 reactive certificate authentication with TLS 1.2" anchor="ex-http11"><artwork type="drawing"><![CDATA[
Client                                      Server
   -- (HTTP) GET /protected -------------------> *1
   <---------------------- (TLS) HelloRequest -- *2
   -- (TLS) ClientHello ----------------------->
   <------------------ (TLS) ServerHello, ... --
   <---------------- (TLS) CertificateRequest -- *3
   -- (TLS) ..., Certificate ------------------> *4
   -- (TLS) Finished -------------------------->
   <-------------------------- (TLS) Finished --
   <--------------------------- (HTTP) 200 OK -- *5
]]></artwork></figure>

<t>In this example, the server receives a request for a protected resource (at *1
on <xref target="ex-http11"/>).  Upon performing an authorization check, the server
determines that the request requires authentication using a client certificate
and that no such certificate has been provided.</t>

<t>The server initiates TLS renegotiation by sending a TLS HelloRequest (at *2).
The client then initiates a TLS handshake.  Note that some TLS messages are
elided from the figure for the sake of brevity.</t>

<t>The critical messages for this example are the server requesting a certificate
with a TLS CertificateRequest (*3); this request might use information about
the request or resource.  The client then provides a certificate and proof of
possession of the private key in Certificate and CertificateVerify messages
(*4).</t>

<t>When the handshake completes, the server performs any authorization checks a
second time.  With the client certificate available, it then authorizes the
request and provides a response (*5).</t>

</section>
<section anchor="http11-using-tls-13" title="HTTP/1.1 Using TLS 1.3">

<t>TLS 1.3 <xref target="RFC8446"></xref> introduces a new client authentication mechanism that allows
for clients to authenticate after the handshake has been completed. For the
purposes of authenticating an HTTP request, this is functionally equivalent to
renegotiation.  <xref target="ex-tls13"/> shows the simpler exchange this enables.</t>

<figure title="HTTP/1.1 reactive certificate authentication with TLS 1.3" anchor="ex-tls13"><artwork type="drawing"><![CDATA[
Client                                      Server
   -- (HTTP) GET /protected ------------------->
   <---------------- (TLS) CertificateRequest --
   -- (TLS) Certificate, CertificateVerify,
               Finished ----------------------->
   <--------------------------- (HTTP) 200 OK --
]]></artwork></figure>

<t>TLS 1.3 does not support renegotiation, instead supporting direct client
authentication.  In contrast to the TLS 1.2 example, in TLS 1.3, a server can
simply request a certificate.</t>

</section>
<section anchor="http2" title="HTTP/2">

<t>An important part of the HTTP/1.1 exchange is that the client is able to easily
identify the request that caused the TLS renegotiation.  The client is able to
assume that the next unanswered request on the connection is responsible.  The
HTTP stack in the client is then able to direct the certificate request to the
application or component that initiated that request.  This ensures that the
application has the right contextual information for processing the request.</t>

<t>In HTTP/2, a client can have multiple outstanding requests.  Without some sort
of correlation information, a client is unable to identify which request caused
the server to request a certificate.</t>

<t>Thus, the minimum necessary mechanism to support reactive certificate
authentication in HTTP/2 is an identifier that can be use to correlate an HTTP
request with a request for a certificate.  Since streams are used for individual
requests, correlation with a stream is sufficient.</t>

<t><xref target="RFC7540"></xref> prohibits renegotiation after any application data has been sent. This
completely blocks reactive certificate authentication in HTTP/2 using TLS 1.2.
If this restriction were relaxed by an extension or update to HTTP/2, such an
identifier could be added to TLS 1.2 by means of an extension to TLS.
Unfortunately, many TLS 1.2 implementations do not permit application data to
continue during a renegotiation. This is problematic for a multiplexed protocol
like HTTP/2.</t>

</section>
</section>
<section anchor="http-layer-certificate-authentication" title="HTTP-Layer Certificate Authentication">

<t>This draft defines HTTP/2 frames to carry the relevant certificate messages,
enabling certificate-based authentication of both clients and servers
independent of TLS version. This mechanism can be implemented at the HTTP layer
without breaking the existing interface between HTTP and applications above it.</t>

<t>This could be done in a naive manner by replicating the TLS messages as HTTP/2
frames on each stream. However, this would create needless redundancy between
streams and require frequent expensive signing operations. Instead, TLS Exported
Authenticators <xref target="I-D.ietf-tls-exported-authenticator"></xref> are exchanged on stream
zero and other frames incorporate them to particular requests by reference as
needed.</t>

<t>TLS Exported Authenticators are structured messages that can be exported by
either party of a TLS connection and validated by the other party. Given an
established TLS connection, a request can be constructed which describes the
desired certificate and an authenticator message can be constructed proving
possession of a certificate and a corresponding private key. Both requests and
authenticators can be generated by either the client or the server. Exported
Authenticators use the message structures from Sections 4.3.2 and 4.4 of
<xref target="RFC8446"></xref>, but different parameters.</t>

<t>Each Authenticator is computed using a Handshake Context and Finished MAC Key
derived from the TLS session.  The Handshake Context is identical for both
parties of the TLS connection, while the Finished MAC Key is dependent on
whether the Authenticator is created by the client or the server.</t>

<t>Successfully verified Authenticators result in certificate chains, with verified
possession of the corresponding private key, which can be supplied into a
collection of available certificates. Likewise, descriptions of desired
certificates can be supplied into these collections.</t>

<t><xref target="discovery"/> describes how the feature is employed, defining means to detect
support in peers (<xref target="setting"/>), make certificates and requests available
(<xref target="cert-available"/>), and indicate when streams are blocked waiting on an
appropriate certificate (<xref target="cert-challenge"/>). <xref target="certs-http2"/> defines the
required frame types, which parallel the TLS 1.3 message exchange. Finally,
<xref target="errors"/> defines new error types which can be used to notify peers when the
exchange has not been successful.</t>

</section>
<section anchor="terminology" title="Terminology">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”,
“SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>

</section>
</section>
<section anchor="discovery" title="Discovering Additional Certificates at the HTTP/2 Layer">

<t>A certificate chain with proof of possession of the private key corresponding to
the end-entity certificate is sent as a sequence of <spanx style="verb">CERTIFICATE</spanx> frames (see
<xref target="http-cert"/>) on stream zero. Once the holder of a certificate has sent the
chain and proof, this certificate chain is cached by the recipient and available
for future use. Clients can proactively indicate the certificate they intend to
use on each request using an unsolicited <spanx style="verb">USE_CERTIFICATE</spanx> frame, if desired.
The previously-supplied certificates are available for reference without having
to resend them.</t>

<t>Otherwise, the server uses a <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame to describe a class of
certificates on stream zero, then uses <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames to associate
these with individual requests. The client responds with a <spanx style="verb">USE_CERTIFICATE</spanx>
frame indicating the certificate which should be used to satisfy the request.</t>

<t>Data sent by each peer is correlated by the ID given in each frame.  This ID is
unrelated to values used by the other peer, even if each uses the same ID in
certain cases.  <spanx style="verb">USE_CERTIFICATE</spanx> frames indicate whether they are sent
proactively or are in response to a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame.</t>

<section anchor="setting" title="Indicating Support for HTTP-Layer Certificate Authentication">

<t>Clients and servers that will accept requests for HTTP-layer certificate
authentication indicate this using the HTTP/2 <spanx style="verb">SETTINGS_HTTP_CLIENT_CERT_AUTH</spanx>
(0xSETTING-TBD1) and <spanx style="verb">SETTINGS_HTTP_SERVER_CERT_AUTH</spanx> (0xSETTING-TBD2) settings.</t>

<t>The initial value for both settings is 0, indicating that the peer does not
support HTTP-layer certificate authentication. If a peer does support HTTP-layer
certificate authentication, one or both of the values is non-zero.
<spanx style="verb">SETTINGS_HTTP_CLIENT_CERT_AUTH</spanx> indicates that servers can use certificates for
client authentication, while <spanx style="verb">SETTINGS_HTTP_SERVER_CERT_AUTH</spanx> indicates that
servers are able to offer additional certificates to demonstrate control over
other origin hostnames.</t>

<t>In order to ensure that the TLS connection is direct to the server, rather than
via a TLS-terminating proxy, each side will separately compute and confirm the
value of these settings.  The setting values are derived from a TLS exporter
(see Section 7.5 of <xref target="RFC8446"></xref> and <xref target="RFC5705"/> for more details on exporters).
Clients MUST NOT use an early exporter during their 0-RTT flight, but MUST send
an updated SETTINGS frame using a regular exporter after the TLS handshake
completes.</t>

<t>The exporter is constructed with the following input:</t>

<t><list style="symbols">
  <t>Label:
  <list style="symbols">
      <t>“EXPORTER HTTP CERTIFICATE client” for clients</t>
      <t>“EXPORTER HTTP CERTIFICATE server” for servers</t>
    </list></t>
  <t>Context:  Empty</t>
  <t>Length:  Eight bytes</t>
</list></t>

<t>The value of the exporter is split into two four-byte values.  The first four
bytes are used for the <spanx style="verb">SETTINGS_HTTP_CLIENT_CERT_AUTH</spanx> value, while the
following four bytes are used for the <spanx style="verb">SETTINGS_HTTP_SERVER_CERT_AUTH</spanx> value.</t>

<t>Each is converted to a setting value as:</t>

<figure><artwork><![CDATA[
Exporter fragment | 0x80000000
]]></artwork></figure>

<t>That is, the most significant bit will always be set, regardless of the value of
the exporter. Each endpoint will compute the expected values from their peer. If
the setting is not received, or if the value received is not the expected value,
the frames defined in this document SHOULD NOT be sent in the indicated
direction.</t>

</section>
<section anchor="cert-available" title="Making Certificates or Requests Available">

<t>When both peers have advertised support for HTTP-layer certificates in a given
direction as in <xref target="setting"/>, the indicated endpoint can supply additional
certificates into the connection at any time.  That is, if both endpoints have
sent <spanx style="verb">SETTINGS_HTTP_SERVER_CERT_AUTH</spanx> and validated the value received from the
peer, the server may send certificates.  If both endpoints have sent
<spanx style="verb">SETTINGS_HTTP_CLIENT_CERT_AUTH</spanx> and validated the value received from the peer,
the client may send certificates.</t>

<t>Implementations which predict a certificate will be required could supply the
certificate before being asked. These certificates are available for reference
by future <spanx style="verb">USE_CERTIFICATE</spanx> frames.</t>

<t>Certificates supplied by servers can be considered by clients without further
action by the server. A server SHOULD NOT send certificates which do not cover
origins which it is prepared to service on the current connection, but MAY use
the ORIGIN frame <xref target="RFC8336"/> to indicate that not all covered origins will be
served.</t>

<t>Certificates supplied by clients MUST NOT be considered by servers when
processing a request unless the client explicitly authorizes their use. Clients
MAY send <spanx style="verb">USE_CERTIFICATE</spanx> frame with the <spanx style="verb">UNSOLICITED</spanx> flag set to indicate
that an available certificate should be considered on a new request.</t>

<figure title="Proactive server authentication" anchor="ex-http2-server-proactive"><artwork type="drawing"><![CDATA[
Client                                      Server
   <------------------ (stream 0) CERTIFICATE --
   ...
   -- (stream N) GET /from-new-origin --------->
   <----------------------- (stream N) 200 OK --

]]></artwork></figure>

<figure title="Proactive client authentication" anchor="ex-http2-client-proactive"><artwork type="drawing"><![CDATA[
Client                                      Server
   -- (stream 0) CERTIFICATE ------------------>
   -- (stream 0) USE_CERTIFICATE (S=1) -------->
   -- (stream 0) USE_CERTIFICATE (S=3) -------->
   -- (streams 1,3) GET /protected ------------>
   <-------------------- (streams 1,3) 200 OK --

]]></artwork></figure>

<t>Likewise, a party can supply a <spanx style="verb">CERTIFICATE_REQUEST</spanx> that outlines parameters of
a certificate they might request in the future.  Upon receipt of a
<spanx style="verb">CERTIFICATE_REQUEST</spanx>, endpoints SHOULD provide a corresponding certificate in
anticipation of a request shortly being blocked. Clients MAY wait for a
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frame to assist in associating the certificate request with
a particular HTTP transaction.</t>

</section>
<section anchor="cert-challenge" title="Requiring Certificate Authentication">

<section anchor="requiring-additional-server-certificates" title="Requiring Additional Server Certificates">

<t>As defined in <xref target="RFC7540"></xref>, when a client finds that an https:// origin (or
Alternative Service <xref target="RFC7838"></xref>) to which it needs to make a request has the same
IP address as a server to which it is already connected, it MAY check whether
the TLS certificate provided contains the new origin as well, and if so, reuse
the connection.</t>

<t>If the TLS certificate does not contain the new origin, but the server has
claimed support for that origin (with an ORIGIN frame, see <xref target="RFC8336"/>) and
advertised support for HTTP-layer server certificates (see <xref target="setting"/>), the
client MAY send a <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame describing the desired origin.
The client then sends a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame for stream zero referencing
the request, indicating that the connection cannot be used for that origin until
the certificate is provided.</t>

<t>If the server does not have the desired certificate, it MUST send an Empty
Authenticator, as described in Section 5 of
<xref target="I-D.ietf-tls-exported-authenticator"></xref>, in a <spanx style="verb">CERTIFICATE</spanx> frame in response to
the request, followed by a <spanx style="verb">USE_CERTIFICATE</spanx> frame for stream zero which
references the Empty Authenticator.</t>

<t>If a server has not advertised support for HTTP-layer certificates, fails to
provide a requested certificate, or provides a certificate which is unacceptable
to the client, the client MUST NOT send any requests for resources in that
origin on the current connection.  The client MAY open a new connection in an
effort to reach an authoritative server.</t>

<figure title="Client-requested certificate" anchor="ex-http2-server-requested"><artwork type="drawing"><![CDATA[
Client                                      Server
   <----------------------- (stream 0) ORIGIN --
   -- (stream 0) CERTIFICATE_REQUEST ---------->
   -- (stream 0) CERTIFICATE_NEEDED (S=0) ----->
   <------------------ (stream 0) CERTIFICATE --
   <-------- (stream 0) USE_CERTIFICATE (S=0) --
   -- (stream N) GET /from-new-origin --------->
   <----------------------- (stream N) 200 OK --
]]></artwork></figure>

<t>If a client receives a <spanx style="verb">PUSH_PROMISE</spanx> referencing an origin for which it has not
yet received the server’s certificate, this is a stream error on the push
stream; see section 8.2 of <xref target="RFC7540"></xref>.  To avoid this, servers MUST supply the
associated certificates before pushing resources from a different origin.</t>

</section>
<section anchor="requiring-additional-client-certificates" title="Requiring Additional Client Certificates">

<t>Likewise, the server sends a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame for each stream where
certificate authentication is required.  The client answers with a
<spanx style="verb">USE_CERTIFICATE</spanx> frame indicating the certificate to use on that stream. If the
request parameters or the responding certificate are not already available, they
will need to be sent as described in <xref target="cert-available"/> as part of this
exchange.</t>

<figure title="Reactive certificate authentication" anchor="ex-http2-client-requested"><artwork type="drawing"><![CDATA[
Client                                      Server
   <---------- (stream 0) CERTIFICATE_REQUEST --
   ...
   -- (stream N) GET /protected --------------->
   <----- (stream 0) CERTIFICATE_NEEDED (S=N) --
   -- (stream 0) CERTIFICATE ------------------>
   -- (stream 0) USE_CERTIFICATE (S=N) -------->
   <----------------------- (stream N) 200 OK --
]]></artwork></figure>

<t>If the client does not have the desired certificate, it instead sends an Empty
Authenticator, as described in Section 5 of
<xref target="I-D.ietf-tls-exported-authenticator"></xref>, in a <spanx style="verb">CERTIFICATE</spanx> frame in response to
the request, followed by a <spanx style="verb">USE_CERTIFICATE</spanx> frame which references the Empty
Authenticator.</t>

<t>If the client has not advertised support for HTTP-layer certificates, fails to
provide a requested certificate, or provides a certificate the server is unable
to verify, the server processes the request based solely on the certificate
provided during the TLS handshake, if any.  This might result in an error
response via HTTP, such as a status code 403 (Not Authorized).</t>

</section>
</section>
</section>
<section anchor="certs-http2" title="Certificates Frames for HTTP/2">

<t>The <spanx style="verb">CERTIFICATE_REQUEST</spanx> and <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames are correlated by
their <spanx style="verb">Request-ID</spanx> field. Subsequent <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames with the same
<spanx style="verb">Request-ID</spanx> value MAY be sent for other streams where the sender is expecting a
certificate with the same parameters.</t>

<t>The <spanx style="verb">CERTIFICATE</spanx>, and <spanx style="verb">USE_CERTIFICATE</spanx> frames are correlated by their
<spanx style="verb">Cert-ID</spanx> field. Subsequent <spanx style="verb">USE_CERTIFICATE</spanx> frames with the same <spanx style="verb">Cert-ID</spanx> MAY
be sent in response to other <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames and refer to the same
certificate.</t>

<t><spanx style="verb">CERTIFICATE_NEEDED</spanx> and <spanx style="verb">USE_CERTIFICATE</spanx> frames are correlated by the Stream
ID they reference.  Unsolicited <spanx style="verb">USE_CERTIFICATE</spanx> frames are not responses to
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frames; otherwise, each <spanx style="verb">USE_CERTIFICATE</spanx> frame for a
stream is considered to respond to a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame for the same
stream in sequence.</t>

<figure title="Frame correlation" anchor="frame-relationships"><artwork type="drawing"><![CDATA[
   +---------+           +---------+
   | REQUEST |           |   CERT  |
   +---------+           +---------+
        |                     |
        | Request-ID          | Cert-ID
        |                     |
        v                     v
   +---------+ Stream ID +---------+
   | NEEDED  |---------->|   USE   |
   +---------+           +---------+
]]></artwork></figure>

<t><spanx style="verb">Request-ID</spanx> and <spanx style="verb">Cert-ID</spanx> are independent and sender-local.  The use of the
same value by the other peer or in the other context does not imply any
correlation between these frames. These values MUST be unique per sender for
each space over the lifetime of the connection.</t>

<section anchor="http-cert-needed" title="The CERTIFICATE_NEEDED Frame">

<t>The <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame (0xFRAME-TBD1) is sent on stream zero to indicate
that the HTTP request on the indicated stream is blocked pending certificate
authentication. The frame includes stream ID and a request identifier which can
be used to correlate the stream with a previous <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame sent
on stream zero. The <spanx style="verb">CERTIFICATE_REQUEST</spanx> describes the certificate the sender
requires to make progress on the stream in question.</t>

<figure title="CERTIFICATE_NEEDED frame payload" anchor="fig-cert-needed"><artwork type="drawing"><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +---------------------------------------------------------------+
 |R|                        Stream ID (31)                       |
 +-------------------------------+-------------------------------+
 |        Request-ID (16)        |
 +-------------------------------+
]]></artwork></figure>

<t>The <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame contains 6 octets.  The first four octets
indicate the Stream ID of the affected stream.  The following two octets are the
authentication request identifier, <spanx style="verb">Request-ID</spanx>. A peer that receives a
<spanx style="verb">CERTIFICATE_NEEDED</spanx> of any other length MUST treat this as a stream error of
type <spanx style="verb">PROTOCOL_ERROR</spanx>. Frames with identical request identifiers refer to the
same <spanx style="verb">CERTIFICATE_REQUEST</spanx>.</t>

<t>A server MAY send multiple <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames for the same stream. If a
server requires that a client provide multiple certificates before authorizing a
single request, each required certificate MUST be indicated with a separate
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frame, each of which MUST have a different request
identifier (referencing different <spanx style="verb">CERTIFICATE_REQUEST</spanx> frames describing each
required certificate). To reduce the risk of client confusion, servers SHOULD
NOT have multiple outstanding <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames for the same stream at
any given time.</t>

<t>Clients MUST only send multiple <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames for stream zero.
Multiple <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames on any other stream MUST be considered
a stream error of type <spanx style="verb">PROTOCOL_ERROR</spanx>.</t>

<t>The <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame MUST NOT be sent to a client which has not
advertised the <spanx style="verb">SETTINGS_HTTP_CLIENT_CERT_AUTH</spanx>, or to a server which has not
advertised the <spanx style="verb">SETTINGS_HTTP_SERVER_CERT_AUTH</spanx> setting.  An endpoint which
receives a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame but did not advertise support MAY treat
this as a connection error of type <spanx style="verb">CERTIFICATE_WITHOUT_CONSENT</spanx>.</t>

<t>The <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame MUST NOT reference a stream in the “half-closed
(local)” or “closed” states <xref target="RFC7540"></xref>. A client that receives a
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frame for a stream which is not in a valid state SHOULD
treat this as a stream error of type <spanx style="verb">PROTOCOL_ERROR</spanx>.</t>

</section>
<section anchor="http-use-certificate" title="The USE_CERTIFICATE Frame">

<t>The <spanx style="verb">USE_CERTIFICATE</spanx> frame (0xFRAME-TBD4) is sent on stream zero to indicate
which certificate is being used on a particular request stream.</t>

<t>The <spanx style="verb">USE_CERTIFICATE</spanx> frame defines a single flag:</t>

<t><list style="hanging">
  <t hangText='UNSOLICITED (0x01):'>
  Indicates that no <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame has yet been received for this
stream.</t>
</list></t>

<t>The payload of the <spanx style="verb">USE_CERTIFICATE</spanx> frame is as follows:</t>

<figure title="USE_CERTIFICATE frame payload" anchor="fig-use-cert"><artwork type="drawing"><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +---------------------------------------------------------------+
 |R|                        Stream ID (31)                       |
 +-------------------------------+-------------------------------+
 |         [Cert-ID (16)]        |
 +-------------------------------+
]]></artwork></figure>

<t>The first four octets indicate the Stream ID of the affected stream.  The
following two octets, if present, contain the two-octet <spanx style="verb">Cert-ID</spanx> of the
certificate the sender wishes to use. This MUST be the ID of a certificate for
which proof of possession has been presented in a <spanx style="verb">CERTIFICATE</spanx> frame.
Recipients of a <spanx style="verb">USE_CERTIFICATE</spanx> frame of any other length MUST treat this as a
stream error of type <spanx style="verb">PROTOCOL_ERROR</spanx>. Frames with identical certificate
identifiers refer to the same certificate chain.</t>

<t>A <spanx style="verb">USE_CERTIFICATE</spanx> frame which omits the Cert-ID refers to the certificate
provided at the TLS layer, if any. If no certificate was provided at the TLS
layer, the stream should be processed with no authentication, likely returning
an authentication-related error at the HTTP level (e.g. 403) for servers or
routing the request to a new connection for clients.</t>

<t>The <spanx style="verb">UNSOLICITED</spanx> flag MAY be set by clients on the first <spanx style="verb">USE_CERTIFICATE</spanx>
frame referring to a given stream. This permits a client to proactively indicate
which certificate should be used when processing a new request.  When such an
unsolicited indication refers to a request that has not yet been received,
servers SHOULD cache the indication briefly in anticipation of the request.</t>

<t>Receipt of more than one unsolicited <spanx style="verb">USE_CERTIFICATE</spanx> frame or an unsolicited
<spanx style="verb">USE_CERTIFICATE</spanx> frame which is not the first in reference to a given stream
MUST be treated as a stream error of type <spanx style="verb">CERTIFICATE_OVERUSED</spanx>.</t>

<t>Each <spanx style="verb">USE_CERTIFICATE</spanx> frame which is not marked as unsolicited is considered to
respond in order to the <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames for the same stream. If a
<spanx style="verb">USE_CERTIFICATE</spanx> frame is received for which a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame has
not been sent, this MUST be treated as a stream error of type
<spanx style="verb">CERTIFICATE_OVERUSED</spanx>.</t>

<t>Receipt of a <spanx style="verb">USE_CERTIFICATE</spanx> frame with an unknown <spanx style="verb">Cert-ID</spanx> MUST result in a
stream error of type <spanx style="verb">PROTOCOL_ERROR</spanx>.</t>

<t>The referenced certificate chain needs to conform to the requirements expressed
in the <spanx style="verb">CERTIFICATE_REQUEST</spanx> to the best of the sender’s ability, or the
recipient is likely to reject it as unsuitable despite properly validating the
authenticator.  If the recipient considers the certificate unsuitable, it MAY at
its discretion either return an error at the HTTP semantic layer, or respond
with a stream error <xref target="RFC7540"/> on any stream where the certificate is used.
<xref target="errors"/> defines certificate-related error codes which might be applicable.</t>

</section>
<section anchor="http-cert-request" title="The CERTIFICATE_REQUEST Frame">

<t>The <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame (id=0xFRAME-TBD2) provides an exported
authenticator request message from the TLS layer that specifies a desired
certificate.  This describes the certificate the sender wishes to have
presented.</t>

<t>The <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame SHOULD NOT be sent to a client which has not
advertised the <spanx style="verb">SETTINGS_HTTP_CLIENT_CERT_AUTH</spanx>, or to a server which has not
advertised the <spanx style="verb">SETTINGS_HTTP_SERVER_CERT_AUTH</spanx> setting.</t>

<t>The <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame MUST be sent on stream zero.  A
<spanx style="verb">CERTIFICATE_REQUEST</spanx> frame received on any other stream MUST be rejected with a
stream error of type <spanx style="verb">PROTOCOL_ERROR</spanx>.</t>

<figure title="CERTIFICATE_REQUEST frame payload" anchor="fig-cert-request"><artwork type="drawing"><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-------------------------------+-------------------------------+
 |        Request-ID (16)        |          Request (?)        ...
 +---------------------------------------------------------------+
]]></artwork></figure>

<t>The frame contains the following fields:</t>

<t><list style="hanging">
  <t hangText='Request-ID:'>
  <spanx style="verb">Request-ID</spanx> is a 16-bit opaque identifier used to correlate subsequent
certificate-related frames with this request.  The identifier MUST be unique
in the session for the sender.</t>
  <t hangText='Request:'>
  An exported authenticator request, generated using the <spanx style="verb">request</spanx> API described
in <xref target="I-D.ietf-tls-exported-authenticator"></xref>. See <xref target="exp-auth"/> for more details on
the input to this API.</t>
</list></t>

<section anchor="exp-req" title="Exported Authenticator Request Characteristics">

<t>The Exported Authenticator <spanx style="verb">request</spanx> API defined in
<xref target="I-D.ietf-tls-exported-authenticator"></xref> takes as input a set of desired
certificate characteristics and a <spanx style="verb">certificate_request_context</spanx>, which needs to
be unpredictable. When generating exported authenticators for use with this
extension, the <spanx style="verb">certificate_request_context</spanx> MUST contain both the two-octet
Request-ID as well as at least 96 bits of additional entropy.</t>

<t>Upon receipt of a <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame, the recipient MUST verify that
the first two octets of the authenticator’s <spanx style="verb">certificate_request_context</spanx>
matches the Request-ID presented in the frame.</t>

<t>The TLS library on the authenticating peer will provide mechanisms to select an
appropriate certificate to respond to the transported request.  TLS libraries on
servers MUST be able to recognize the <spanx style="verb">server_name</spanx> extension (<xref target="RFC6066"></xref>) at a
minimum. Clients MUST always specify the desired origin using this extension,
though other extensions MAY also be included.</t>

</section>
</section>
<section anchor="http-cert" title="The CERTIFICATE Frame">

<t>The <spanx style="verb">CERTIFICATE</spanx> frame (id=0xFRAME-TBD3) provides an exported authenticator
message from the TLS layer that provides a chain of certificates, associated
extensions and proves possession of the private key corresponding to the
end-entity certificate.</t>

<t>The <spanx style="verb">CERTIFICATE</spanx> frame defines two flags:</t>

<t><list style="hanging">
  <t hangText='TO_BE_CONTINUED (0x01):'>
  Indicates that the exported authenticator spans more than one frame.</t>
  <t hangText='UNSOLICITED (0x02):'>
  Indicates that the exported authenticator does not contain a Request-ID.</t>
</list></t>

<figure title="CERTIFICATE frame payload" anchor="fig-proof-frame"><artwork type="drawing"><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-------------------------------+-------------------------------+
 |          Cert-ID (16)         |        Request-ID (16)        |
 +-------------------------------+-------------------------------+
 |                   Authenticator Fragment (*)                ...
 +---------------------------------------------------------------+
]]></artwork></figure>

<t>The frame contains the following fields:</t>

<t><list style="hanging">
  <t hangText='Cert-ID:'>
  <spanx style="verb">Cert-ID</spanx> is a 16-bit opaque identifier used to correlate other certificate-
related frames with this exported authenticator fragment.</t>
  <t hangText='Request-ID:'>
  <spanx style="verb">Request-ID</spanx> is an optional 16-bit opaque identifier used to correlate this
exported authenticator with the request which triggered it, if any.  This field
is present only if the <spanx style="verb">UNSOLICITED</spanx> flag is not set.</t>
  <t hangText='Authenticator Fragment:'>
  A portion of the opaque data returned from the TLS connection exported
authenticator <spanx style="verb">authenticate</spanx> API. See <xref target="exp-auth"/> for more details on the
input to this API.</t>
</list></t>

<t>An exported authenticator is transported in zero or more <spanx style="verb">CERTIFICATE</spanx> frames
with the <spanx style="verb">TO_BE_CONTINUED</spanx> flag set, followed by one <spanx style="verb">CERTIFICATE</spanx> frame with
the <spanx style="verb">TO_BE_CONTINUED</spanx> flag unset.  Each of these frames contains the same
<spanx style="verb">Cert-ID</spanx> field, permitting them to be associated with each other.  Receipt of
any <spanx style="verb">CERTIFICATE</spanx> frame with the same <spanx style="verb">Cert-ID</spanx> following the receipt of a
<spanx style="verb">CERTIFICATE</spanx> frame with <spanx style="verb">TO_BE_CONTINUED</spanx> unset MUST be treated as a connection
error of type <spanx style="verb">PROTOCOL_ERROR</spanx>.</t>

<t>If the <spanx style="verb">UNSOLICITED</spanx> flag is not set, the <spanx style="verb">CERTIFICATE</spanx> frame also contains
a Request-ID indicating the certificate request which caused this exported
authenticator to be generated.  The value of this flag and the contents
of the Request-ID field MUST NOT differ between frames with the same
Cert-ID.</t>

<t>Upon receiving a complete series of <spanx style="verb">CERTIFICATE</spanx> frames, the receiver may
validate the Exported Authenticator value by using the exported authenticator
API. This returns either an error indicating that the message was invalid, or
the certificate chain and extensions used to create the message.</t>

<t>The <spanx style="verb">CERTIFICATE</spanx> frame MUST be sent on stream zero.  A <spanx style="verb">CERTIFICATE</spanx> frame
received on any other stream MUST be rejected with a stream error of type
<spanx style="verb">PROTOCOL_ERROR</spanx>.</t>

<section anchor="exp-auth" title="Exported Authenticator Characteristics">

<t>The Exported Authenticator API defined in <xref target="I-D.ietf-tls-exported-authenticator"></xref>
takes as input a request, a set of certificates, and supporting information
about the certificate (OCSP, SCT, etc.).  The result is an opaque token which is
used when generating the <spanx style="verb">CERTIFICATE</spanx> frame.</t>

<t>Upon receipt of a <spanx style="verb">CERTIFICATE</spanx> frame, an endpoint MUST perform the following
steps to validate the token it contains:</t>

<t><list style="symbols">
  <t>Verify that either the <spanx style="verb">UNSOLICITED</spanx> flag is set (clients only) or that the
Request-ID field contains the Request-ID of a previously-sent
<spanx style="verb">CERTIFICATE_REQUEST</spanx> frame.</t>
  <t>Using the <spanx style="verb">get context</spanx> API, retrieve the <spanx style="verb">certificate_request_context</spanx> used
to generate the authenticator, if any.  Verify that the <spanx style="verb">certificate_request_context</spanx>
begins with the supplied Request-ID, if any.</t>
  <t>Use the <spanx style="verb">validate</spanx> API to confirm the validity of the authenticator with
regard to the generated request (if any).</t>
</list></t>

<t>If the authenticator cannot be validated, this SHOULD be treated as a connection
error of type <spanx style="verb">CERTIFICATE_UNREADABLE</spanx>.</t>

<t>Once the authenticator is accepted, the endpoint can perform any other checks
for the acceptability of the certificate itself.  Clients MUST NOT accept any
end-entity certificate from an exported authenticator which does not contain
the Required Domain extension; see <xref target="extension"/> and <xref target="impersonation"/>.</t>

</section>
</section>
</section>
<section anchor="errors" title="Indicating Failures During HTTP-Layer Certificate Authentication">

<t>Because this draft permits certificates to be exchanged at the HTTP framing
layer instead of the TLS layer, several certificate-related errors which are
defined at the TLS layer might now occur at the HTTP framing layer.</t>

<t>There are two classes of errors which might be encountered, and they are handled
differently.</t>

<section anchor="misbehavior" title="Misbehavior">

<t>This category of errors could indicate a peer failing to follow restrictions in
this document, or might indicate that the connection is not fully secure.  These
errors are fatal to stream or connection, as appropriate.</t>

<t><list style="hanging">
  <t hangText='CERTIFICATE_OVERUSED (0xERROR-TBD1):'>
  More certificates were used on a request than were requested</t>
  <t hangText='CERTIFICATE_WITHOUT_CONSENT (0xERROR-TBD2):'>
  A CERTIFICATE_NEEDED frame was received by a peer which did not indicate
support for this extension.</t>
  <t hangText='CERTIFICATE_UNREADABLE (0xERROR-TBD3):'>
  An exported authenticator could not be validated.</t>
</list></t>

</section>
<section anchor="invalid-certificates" title="Invalid Certificates">

<t>Unacceptable certificates (expired, revoked, or insufficient to satisfy the
request) are not treated as stream or connection errors.  This is typically not
an indication of a protocol failure.  Servers SHOULD process requests with the
indicated certificate, likely resulting in a “4XX”-series status code in the
response. Clients SHOULD establish a new connection in an attempt to reach an
authoritative server.</t>

</section>
</section>
<section anchor="extension" title="Required Domain Certificate Extension">

<t>The Required Domain extension allows certificates to limit their use with
Secondary Certificate Authentication.  A client MUST verify that the server has
proven ownership of the indicated identity before accepting the limited
certificate over Secondary Certificate Authentication.</t>

<t>The identity in this extension is a restriction asserted by the requester of the
certificate and is not verified by the CA.  Conforming CAs SHOULD mark the
requiredDomain extension as non-critical.  Conforming CAs MUST require the
presence of a CAA record <xref target="RFC6844"/> prior to issuing a certificate with this
extension.  Because a Required Domain value of “*” has a much higher risk of
reuse if compromised, conforming Certificate Authorities are encouraged to
require more extensive verification prior to issuing such a certificate.</t>

<t>The required domain is represented as a GeneralName, as specified in Section
4.2.1.6 of <xref target="RFC5280"/>. Unlike the subject field, conforming CAs MUST NOT issue
certificates with a requiredDomain extension containing empty GeneralName
fields.  Clients that encounter such a certificate when processing a
certification path MUST consider the certificate invalid.</t>

<t>The wildcard character “<spanx style="emph">” MAY be used to represent that any previously
authenticated identity is acceptable.  This character MUST be the entirety of
the name if used and MUST have a type of “dNSName”.  (That is, “</spanx>” is
acceptable, but “<spanx style="emph">.com” and “w</spanx>.example.com” are not).</t>

<figure><artwork><![CDATA[
id-ce-requiredDomain OBJECT IDENTIFIER ::=  { id-ce TBD1 }

RequiredDomain ::= GeneralName
]]></artwork></figure>

</section>
<section anchor="security" title="Security Considerations">

<t>This mechanism defines an alternate way to obtain server and client certificates
other than in the initial TLS handshake. While the signature of exported
authenticator values is expected to be equally secure, it is important to
recognize that a vulnerability in this code path is at least equal to a
vulnerability in the TLS handshake.</t>

<section anchor="impersonation" title="Impersonation">

<t>This mechanism could increase the impact of a key compromise. Rather than
needing to subvert DNS or IP routing in order to use a compromised certificate,
a malicious server now only needs a client to connect to <spanx style="emph">some</spanx> HTTPS site under
its control in order to present the compromised certificate. Clients SHOULD
consult DNS for hostnames presented in secondary certificates if they would have
done so for the same hostname if it were present in the primary certificate.</t>

<t>As recommended in <xref target="RFC8336"/>, clients opting not to consult DNS ought to
employ some alternative means to increase confidence that the certificate is
legitimate.</t>

<t>One such means is the Required Domain certificate extension defined in
{extension}. Clients MUST require that server certificates presented via this
mechanism contain the Required Domain extension and require that a certificate
previously accepted on the connection (including the certificate presented in
TLS) lists the Required Domain in the Subject field or the Subject Alternative
Name extension.</t>

<t>As noted in the Security Considerations of
<xref target="I-D.ietf-tls-exported-authenticator"></xref>, it is difficult to formally prove that an
endpoint is jointly authoritative over multiple certificates, rather than
individually authoritative on each certificate.  As a result, clients MUST NOT
assume that because one origin was previously colocated with another, those
origins will be reachable via the same endpoints in the future.  Clients MUST
NOT consider previous secondary certificates to be validated after TLS session
resumption.  However, clients MAY proactively query for previously-presented
secondary certificates.</t>

</section>
<section anchor="fingerprinting" title="Fingerprinting">

<t>This draft defines a mechanism which could be used to probe servers for origins
they support, but opens no new attack versus making repeat TLS connections with
different SNI values. Servers SHOULD impose similar denial-of-service
mitigations (e.g. request rate limits) to <spanx style="verb">CERTIFICATE_REQUEST</spanx> frames as to new
TLS connections.</t>

<t>While the extensions in the <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame permit the sender to
enumerate the acceptable Certificate Authorities for the requested certificate,
it might not be prudent (either for security or data consumption) to include the
full list of trusted Certificate Authorities in every request. Senders,
particularly clients, SHOULD send only the extensions that narrowly specify
which certificates would be acceptable.</t>

<t>Servers can also learn information about clients using this mechanism. The
hostnames a user agent finds interesting and retrieves certificates for might
indicate origins the user has previously accessed.</t>

</section>
<section anchor="denial-of-service" title="Denial of Service">

<t>Failure to provide a certificate for a stream after receiving
<spanx style="verb">CERTIFICATE_NEEDED</spanx> blocks processing, and SHOULD be subject to standard
timeouts used to guard against unresponsive peers.</t>

<t>Validating a multitude of signatures can be computationally expensive, while
generating an invalid signature is computationally cheap. Implementations will
require checks for attacks from this direction. Invalid exported authenticators
SHOULD be treated as a session error, to avoid further attacks from the peer,
though an implementation MAY instead disable HTTP-layer certificates for the
current connection instead.</t>

</section>
<section anchor="persistence-of-service" title="Persistence of Service">

<t>CNAME records in the DNS are frequently used to delegate authority for an origin
to a third-party provider.  This delegation can be changed without notice, even
to the third-party provider, simply by modifying the CNAME record in question.</t>

<t>After the owner of the domain has redirected traffic elsewhere by changing the
CNAME, new connections will not arrive for that origin, but connections which
are properly directed to this provider for other origins would continue to claim
control of this origin (via ORIGIN frame and Secondary Certificates).  This is
proper behavior based on the third-party provider’s configuration, but would
likely not be what is intended by the owner of the origin.</t>

<t>This is not an issue which can be mitigated by the protocol, but something about
which third-party providers SHOULD educate their customers before using the
features described in this document.</t>

</section>
<section anchor="confusion-about-state" title="Confusion About State">

<t>Implementations need to be aware of the potential for confusion about the state
of a connection. The presence or absence of a validated certificate can change
during the processing of a request, potentially multiple times, as
<spanx style="verb">USE_CERTIFICATE</spanx> frames are received. A server that uses certificate
authentication needs to be prepared to reevaluate the authorization state of a
request as the set of certificates changes.</t>

</section>
</section>
<section anchor="iana" title="IANA Considerations">

<t>This draft adds entries in three registries.</t>

<t>The feature negotiation settings is registered in <xref target="iana-setting"/>. Four frame
types are registered in <xref target="iana-frame"/>.  Six error codes are registered in
<xref target="iana-errors"/>.</t>

<section anchor="iana-setting" title="HTTP/2 Settings">

<t>The SETTINGS_HTTP_CLIENT_CERT_AUTH and SETTINGS_HTTP_SERVER_CERT_AUTH settings
are registered in the “HTTP/2 Settings” registry established in <xref target="RFC7540"></xref>.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Initial Value</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>HTTP_CLIENT_CERT_AUTH</c>
      <c>0xSETTING-TBD1</c>
      <c>0</c>
      <c><xref target="setting"/></c>
      <c>HTTP_SERVER_CERT_AUTH</c>
      <c>0xSETTING-TBD2</c>
      <c>0</c>
      <c><xref target="setting"/></c>
</texttable>

</section>
<section anchor="iana-frame" title="New HTTP/2 Frames">

<t>Four new frame types are registered in the “HTTP/2 Frame Types” registry
established in <xref target="RFC7540"></xref>. The entries in the following table are registered by
this document.</t>

<texttable>
      <ttcol align='left'>Frame Type</ttcol>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>CERTIFICATE_NEEDED</c>
      <c>0xFRAME-TBD1</c>
      <c><xref target="http-cert-needed"/></c>
      <c>CERTIFICATE_REQUEST</c>
      <c>0xFRAME-TBD2</c>
      <c><xref target="http-cert-request"/></c>
      <c>CERTIFICATE</c>
      <c>0xFRAME-TBD3</c>
      <c><xref target="http-cert"/></c>
      <c>USE_CERTIFICATE</c>
      <c>0xFRAME-TBD4</c>
      <c><xref target="http-use-certificate"/></c>
</texttable>

</section>
<section anchor="iana-errors" title="New HTTP/2 Error Codes">

<t>Six new error codes are registered in the “HTTP/2 Error Code” registry
established in <xref target="RFC7540"></xref>. The entries in the following table are registered by
this document.</t>

<texttable>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>Code</ttcol>
      <ttcol align='left'>Specification</ttcol>
      <c>CERTIFICATE_OVERUSED</c>
      <c>0xERROR-TBD1</c>
      <c><xref target="errors"/></c>
      <c>CERTIFICATE_WITHOUT_CONSENT</c>
      <c>0xERROR-TBD2</c>
      <c><xref target="errors"/></c>
      <c>CERTIFICATE_UNREADABLE</c>
      <c>0xERROR-TBD3</c>
      <c><xref target="errors"/></c>
</texttable>

</section>
</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC5246" target='https://www.rfc-editor.org/info/rfc5246'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'><organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2008' month='August' />
<abstract><t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5246'/>
<seriesInfo name='DOI' value='10.17487/RFC5246'/>
</reference>



<reference  anchor="RFC6066" target='https://www.rfc-editor.org/info/rfc6066'>
<front>
<title>Transport Layer Security (TLS) Extensions: Extension Definitions</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<date year='2011' month='January' />
<abstract><t>This document provides specifications for existing TLS extensions.  It is a companion document for RFC 5246, &quot;The Transport Layer Security (TLS) Protocol Version 1.2&quot;.  The extensions specified are server_name, max_fragment_length, client_certificate_url, trusted_ca_keys, truncated_hmac, and status_request.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6066'/>
<seriesInfo name='DOI' value='10.17487/RFC6066'/>
</reference>



<reference  anchor="RFC7230" target='https://www.rfc-editor.org/info/rfc7230'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the &quot;http&quot; and &quot;https&quot; Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='7230'/>
<seriesInfo name='DOI' value='10.17487/RFC7230'/>
</reference>



<reference  anchor="RFC7540" target='https://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<author initials='M.' surname='Belshe' fullname='M. Belshe'><organization /></author>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson' role='editor'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t><t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>
</front>
<seriesInfo name='RFC' value='7540'/>
<seriesInfo name='DOI' value='10.17487/RFC7540'/>
</reference>



<reference  anchor="RFC8446" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<abstract><t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t><t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='8446'/>
<seriesInfo name='DOI' value='10.17487/RFC8446'/>
</reference>



<reference anchor="I-D.ietf-tls-exported-authenticator">
<front>
<title>Exported Authenticators in TLS</title>

<author initials='N' surname='Sullivan' fullname='Nick Sullivan'>
    <organization />
</author>

<date month='December' day='18' year='2019' />

<abstract><t>This document describes a mechanism in Transport Layer Security (TLS) for peers to provide a proof of ownership of a certificate.  This proof can be exported by one peer, transmitted out-of-band to the other peer, and verified by the receiving peer.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-exported-authenticator-11' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-exported-authenticator-11.txt' />
</reference>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference  anchor="RFC6844" target='https://www.rfc-editor.org/info/rfc6844'>
<front>
<title>DNS Certification Authority Authorization (CAA) Resource Record</title>
<author initials='P.' surname='Hallam-Baker' fullname='P. Hallam-Baker'><organization /></author>
<author initials='R.' surname='Stradling' fullname='R. Stradling'><organization /></author>
<date year='2013' month='January' />
<abstract><t>The Certification Authority Authorization (CAA) DNS Resource Record allows a DNS domain name holder to specify one or more Certification Authorities (CAs) authorized to issue certificates for that domain. CAA Resource Records allow a public Certification Authority to implement additional controls to reduce the risk of unintended certificate mis-issue.  This document defines the syntax of the CAA record and rules for processing CAA records by certificate issuers. [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6844'/>
<seriesInfo name='DOI' value='10.17487/RFC6844'/>
</reference>



<reference  anchor="RFC5280" target='https://www.rfc-editor.org/info/rfc5280'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author initials='D.' surname='Cooper' fullname='D. Cooper'><organization /></author>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<author initials='S.' surname='Boeyen' fullname='S. Boeyen'><organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'><organization /></author>
<date year='2008' month='May' />
<abstract><t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5280'/>
<seriesInfo name='DOI' value='10.17487/RFC5280'/>
</reference>




    </references>

    <references title='Informative References'>





<reference  anchor="RFC7838" target='https://www.rfc-editor.org/info/rfc7838'>
<front>
<title>HTTP Alternative Services</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='P.' surname='McManus' fullname='P. McManus'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke'><organization /></author>
<date year='2016' month='April' />
<abstract><t>This document specifies &quot;Alternative Services&quot; for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t></abstract>
</front>
<seriesInfo name='RFC' value='7838'/>
<seriesInfo name='DOI' value='10.17487/RFC7838'/>
</reference>



<reference  anchor="RFC8336" target='https://www.rfc-editor.org/info/rfc8336'>
<front>
<title>The ORIGIN HTTP/2 Frame</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='E.' surname='Nygren' fullname='E. Nygren'><organization /></author>
<date year='2018' month='March' />
<abstract><t>This document specifies the ORIGIN frame for HTTP/2, to indicate what origins are available on a given connection.</t></abstract>
</front>
<seriesInfo name='RFC' value='8336'/>
<seriesInfo name='DOI' value='10.17487/RFC8336'/>
</reference>



<reference  anchor="RFC5705" target='https://www.rfc-editor.org/info/rfc5705'>
<front>
<title>Keying Material Exporters for Transport Layer Security (TLS)</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2010' month='March' />
<abstract><t>A number of protocols wish to leverage Transport Layer Security (TLS) to perform key establishment but then use some of the keying material for their own purposes.  This document describes a general mechanism for allowing that.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5705'/>
<seriesInfo name='DOI' value='10.17487/RFC5705'/>
</reference>




    </references>


<section anchor="change-log" title="Change Log">

<t><list style='empty'>
  <t><spanx style="strong">RFC Editor’s Note:</spanx>  Please remove this section prior to publication of a
final version of this document.</t>
</list></t>

<section anchor="since-draft-ietf-httpbis-http2-secondary-certs-04" title="Since draft-ietf-httpbis-http2-secondary-certs-04:">

<t>Editorial updates only.</t>

</section>
<section anchor="since-draft-ietf-httpbis-http2-secondary-certs-03" title="Since draft-ietf-httpbis-http2-secondary-certs-03:">

<t><list style="symbols">
  <t><spanx style="verb">CERTIFICATE_REQUEST</spanx> frames contain the Request-ID, which MUST be checked
against the <spanx style="verb">certificate_request_context</spanx> of the Exported Authenticator
Request</t>
  <t><spanx style="verb">CERTIFICATE</spanx> frames contain the Request-ID to which they respond, unless the
UNSOLICITED flag is set</t>
  <t>The Required Domain extension is defined for certificates, which must be
present for certificates presented by servers</t>
</list></t>

</section>
<section anchor="since-draft-ietf-httpbis-http2-secondary-certs-02" title="Since draft-ietf-httpbis-http2-secondary-certs-02:">

<t>Editorial updates only.</t>

</section>
<section anchor="since-draft-ietf-httpbis-http2-secondary-certs-01" title="Since draft-ietf-httpbis-http2-secondary-certs-01:">

<t><list style="symbols">
  <t>Clients can send <spanx style="verb">CERTIFICATE_NEEDED</spanx> for stream 0 rather than speculatively
reserving a stream for an origin.</t>
  <t>Use SETTINGS to disable when a TLS-terminating proxy is present (#617,#651)</t>
</list></t>

</section>
<section anchor="since-draft-ietf-httpbis-http2-secondary-certs-00" title="Since draft-ietf-httpbis-http2-secondary-certs-00:">

<t><list style="symbols">
  <t>All frames sent on stream zero; replaced <spanx style="verb">AUTOMATIC_USE</spanx> on <spanx style="verb">CERTIFICATE</spanx> with
<spanx style="verb">UNSOLICITED</spanx> on <spanx style="verb">USE_CERTIFICATE</spanx>. (#482,#566)</t>
  <t>Use Exported Requests from the TLS Exported Authenticators draft; eliminate
facilities for expressing certificate requirements in <spanx style="verb">CERTIFICATE_REQUEST</spanx>
frame. (#481)</t>
</list></t>

</section>
<section anchor="since-draft-bishop-httpbis-http2-additional-certs-05" title="Since draft-bishop-httpbis-http2-additional-certs-05:">

<t><list style="symbols">
  <t>Adopted as draft-ietf-httpbis-http2-secondary-certs</t>
</list></t>

</section>
</section>
<section numbered="false" anchor="ack" title="Acknowledgements">
<t>Eric Rescorla pointed out several failings in an earlier revision. Andrei Popov
contributed to the TLS considerations.</t>

<t>A substantial portion of Mike’s work on this draft was supported by Microsoft
during his employment there.</t>

</section>


  </back>

<!-- ##markdown-source:
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
oABxvdQ7eIm7RfA707gboVK6F2d8o6VR56d2mqBAnisuCUNUTZ3mMzjOTldW
acmM5S9rGspz/ftaqKdN52Jb1SjNkxPkRTlHleDUwbfSUMZ9gDXb1GA2m8Ni
67Ig0fT5M9VVBs2pXwIopUtUXnC550MbVEtczpjvUgIQfK58g5QmTbS7BY/D
y4DCcCKyJIoa9oJocXFw4YmEGWu8CSnO2IljgBr+w3tlVQW0c2kkNliUd7ac
TJZV30z4l6xHK7lK9q7klu+MMqLXuWhjWkzKJV6xgFQnYIgbi2P5bE6tPSWj
O19Jc8+sHqfYqh70vlwpBeu5LqtV8Bpuy+gyyaRXNdYTiwuHxXV4URpqMhO1
HqUwG081biooiC3ou4x0x3e81OmEm39dIaY3Mh9c0Qysp5x8jazqKQIb3GtU
28D1iEnePekC6MUhKMDlVGisvUZzJm7CmGpX27KIE1/cbXBSRB2/pJUwHL2L
PUdHfbVhgvqTIKeCysjZ5cq8KenNLvvHtto/hU7J1tK99IomdLCzOb7CFNAW
p9prnvOH4+4Yb4N2Oa1+UfCOjEgUVCbocel2W/i7AVsXAGgfih1X0RqI7b7j
F7pVyx6N19UCk+2AoiikW4TpR6K++Qo7omomucs4dUmSp3w7H1WJxhdoRFX0
LocNARaDNHjR1tM//3lrKPZCWIbOjnhXtu490vJ+d4vXmtY/IEiadL6Iev+Y
Nb1/HnVEeShtT5y7HDGvSnQGvWtVgNxZ3JG6eTbnC5czH74xl3RvM8YX1kt5
MgjCpkq3LeQSdEEjxzOc5B1gBKxVVeHtT4Z9Sc3KFeUQcSoCo0m2ol1U5Pmg
icrdAfqGrGixIDvgwlskUY5XQaW3ipCqL3GW+smxUHRXXslzx0cIATidiHr/
HTlywQwxxzx4Yt0D49sB9C7z7kiSCsW39+FQ7Bfj22cS+MkRRV2qqdzT8/zr
p09B8YPIZaM9q+tl58LzvvgdvFr1eNKhMGfnbz3eoqQMvHsS8zNAlWCeENcR
GWq1h0AUbXJAOJiwMdBUq76+iMgWmVTJk+KskmvNmuMlk2tLJgncw5svQqOz
SM6d7IleuGqoKa+HjHQff6MFfU/gNj9jw6h2WTdh3xLzdLQ/2hs9x63g/X62
//UuQCr7tqB7NxmdjymrSzxbk54DRZCIk07jFtjBTbC91CI4kCK01LAtmLNh
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

-->

</rfc>

