<?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.2.3 -->

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

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

<rfc ipr="trust200902" docName="draft-bishop-httpbis-http2-additional-certs-05" 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></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>TLS provides fundamental mutual authentication services for HTTP,
supporting up to one server certificate and up to one client certificate
associated to the session to prove client and server identities as
necessary. This draft provides mechanisms for providing additional such
certificates at the HTTP layer when these constraints are not
sufficient.</t>

<t>Many HTTP servers host content from several origins. HTTP/2 <xref target="RFC7540"></xref>
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 <xref target="I-D.ietf-tls-tls13"></xref> handshake.</t>

<t>In many cases, servers will wish to maintain separate certificates for
different origins but still desire the benefits of a shared HTTP
connection. Similarly, servers may require clients to present
authentication, but have different requirements based on the content the
client is attempting to access.</t>

<t>This document describes how TLS exported authenticators
<xref target="I-D.ietf-tls-exported-authenticator"></xref> can be used to provide proof of ownership
of additional certificates to the HTTP layer to support both scenarios.</t>



    </abstract>


  </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 in from. The traditional form of
server authentication in HTTP has been in the form of X.509 certificates
provided during the TLS <xref target="I-D.ietf-tls-tls13">RFC5246</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>

<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="I-D.ietf-httpbis-origin-frame"></xref> 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-previous" title="HTTP/1.1 using TLS 1.2 and previous">

<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> accomodates 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><![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="I-D.ietf-tls-tls13"></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><![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 the on-stream frames incorporate them 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. An
authenticator message can be constructed by either the client or the server
given an established TLS connection, a certificate, and a corresponding private
key.  Exported Authenticators use the message structures from section 4.4 of
<xref target="I-D.ietf-tls-tls13"></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. These pre-supplied elements
are then available for automatic use (in some situations) or for reference by
individual streams.</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>RFC 2119 <xref target="RFC2119"></xref> defines the terms “MUST”, “MUST NOT”, “SHOULD” and “MAY”.</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 single <spanx style="verb">CERTIFICATE</spanx> frame (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. If the certificate is marked as <spanx style="verb">AUTOMATIC_USE</spanx>, the certificate
may be used by the recipient to authorize any current or future request.
Otherwise, the recipient requests the required certificate on each stream, but
the previously-supplied certificates are available for reference without having
to resend them.</t>

<t>Likewise, the details of a request are sent on stream zero and stored by
the recipient. These details will be referenced by subsequent
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frames.</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.</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_CERT_AUTH</spanx>
(0xSETTING-TBD) setting.</t>

<t>The initial value for the <spanx style="verb">SETTINGS_HTTP_CERT_AUTH</spanx> setting is 0,
indicating that the peer does not support HTTP-layer certificate authentication.
If a peer does support HTTP-layer certificate authentication, the value
is 1.</t>

</section>
<section anchor="cert-available" title="Making certificates or requests available">

<t>When a peer has advertised support for HTTP-layer certificates as in
<xref target="setting"/>, either party can supply additional certificates into the
connection at any time. These certificates then become available for the
peer to consider when deciding whether a connection is suitable to
transport a particular request.</t>

<t>Available certificates which have the <spanx style="verb">AUTOMATIC_USE</spanx> flag set MAY be
used by the recipient without further notice. This means that clients or
servers which predict a certificate will be required could pre-supply
the certificate without being asked. Regardless of whether
<spanx style="verb">AUTOMATIC_USE</spanx> is set, these certificates are available for reference
by future <spanx style="verb">USE_CERTIFICATE</spanx> frames.</t>

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

]]></artwork></figure>

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

]]></artwork></figure>

<t>Likewise, either party can supply a <spanx style="verb">CERTIFICATE_REQUEST</spanx> that outlines
parameters of a certificate they might request in the future.  It
is important to note that this does not currently request such a
certificate, but makes the contents of the request available for
reference by a future <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame.</t>

</section>
<section anchor="cert-challenge" title="Requiring certificate authentication">

<t>As defined in <xref target="RFC7540"></xref>, when a client finds that a 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="I-D.ietf-httpbis-origin-frame"></xref>) and advertised support for HTTP-layer
certificates (see <xref target="setting"/>), it MAY send a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame on the
stream it will use to make the request. (If the request parameters have not
already been made available using a <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame, the client will
need to send the <spanx style="verb">CERTIFICATE_REQUEST</spanx> in order to generate the
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frame.) The stream represents a pending request to that
origin which is blocked until a valid certificate is processed.</t>

<t>The request is blocked until the server has responded with a
<spanx style="verb">USE_CERTIFICATE</spanx> frame pointing to a certificate for that origin. If
the certificate is already available, the server SHOULD immediately
respond with the appropriate <spanx style="verb">USE_CERTIFICATE</spanx> frame. (If the
certificate has not already been transmitted, the server will need to
make the certificate available as described in <xref target="cert-available"/> before
completing the exchange.)</t>

<t>If the server does not have the desired certificate, it MUST respond with an
empty <spanx style="verb">USE_CERTIFICATE</spanx> frame. In this case, or if the server has not advertised
support for HTTP-layer certificates, the client MUST NOT send any requests for
resources in that origin on the current connection.</t>

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

]]></artwork></figure>

<t>Likewise, on each stream where certificate authentication is required,
the server sends a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame, which the client
answers with a <spanx style="verb">USE_CERTIFICATE</spanx> frame indicating the certificate to
use. 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><![CDATA[
Client                                      Server
   <---------- (stream 0) CERTIFICATE_REQUEST --
   ...
   -- (stream N) GET /protected --------------->
   <----------- (stream N) CERTIFICATE_NEEDED --
   -- (stream 0) CERTIFICATE ------------------>
   -- (stream N) USE_CERTIFICATE -------------->
   <----------------------- (stream N) 200 OK --

]]></artwork></figure>

<t>A server SHOULD provide certificates for an origin before pushing resources from
it or supplying content referencing the origin. 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, the client MUST verify the server’s possession of an
appropriate certificate by sending a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame on the pushed
stream to inform the server that progress is blocked until the request is
satisfied. The client MUST NOT use the pushed resource until an appropriate
certificate has been received and validated.</t>

</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 on 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">Request-ID</spanx> and <spanx style="verb">Cert-ID</spanx> are sender-local, and the use of the same value by
the other peer does not imply any correlation between their frames. These values
MUST be unique per sender 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 to indicate that
the HTTP request on the current stream is blocked pending certificate
authentication. The frame includes 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>

<t>The <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame contains 2 octets, which is 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 on 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 on the same stream at any
given time.</t>

<t>Clients MUST NOT send multiple <spanx style="verb">CERTIFICATE_NEEDED</spanx> frames
on the same stream.</t>

<t>The <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame MUST NOT be sent to a peer which has
not advertised support for HTTP-layer certificate authentication.</t>

<t>The <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame MUST NOT be sent on stream zero, and MUST
NOT be sent on a stream in the “half-closed (local)” state <xref target="RFC7540"></xref>. A
client that receives a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame on 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 in response to a
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frame to indicate which certificate is being used
to satisfy the requirement.</t>

<t>A <spanx style="verb">USE_CERTIFICATE</spanx> frame with no payload 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>Otherwise, the <spanx style="verb">USE_CERTIFICATE</spanx> frame contains 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>The <spanx style="verb">USE_CERTIFICATE</spanx> frame MUST NOT be sent on stream zero or a stream on which
a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame has not been received. Receipt of a
<spanx style="verb">USE_CERTIFICATE</spanx> frame in these circumstances SHOULD be treated as a stream
error of type <spanx style="verb">PROTOCOL_ERROR</spanx>. Each <spanx style="verb">USE_CERTIFICATE</spanx> frame should reference a
preceding <spanx style="verb">CERTIFICATE</spanx> frame. Receipt of a <spanx style="verb">USE_CERTIFICATE</spanx> frame before the
necessary frames have been received on stream zero MUST also result in a stream
error of type <spanx style="verb">PROTOCOL_ERROR</spanx>.</t>

<t>The referenced certificate chain MUST conform to the requirements expressed in
the <spanx style="verb">CERTIFICATE_REQUEST</spanx> to the best of the sender’s ability. Specifically, if
the <spanx style="verb">CERTIFICATE_REQUEST</spanx> contained a non-empty <spanx style="verb">Cert-Extensions</spanx> element, the
end-entity certificate MUST match with regard to the extensions recognized by
the sender.</t>

<t>If these requirements are not satisfied, the recipient 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>TLS 1.3 defines the <spanx style="verb">CertificateRequest</spanx> message, which prompts the client to
provide a certificate which conforms to certain properties specified by the
server.  This draft defines the <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame (0xFRAME-TBD2),
which uses the same set of extensions to specify a desired certificate, but
can be sent over any TLS version and can be sent by either peer.</t>

<t>The <spanx style="verb">CERTIFICATE_REQUEST</spanx> frame SHOULD NOT be sent to a peer which has not
advertised support for HTTP-layer certificate authentication.</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><![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)        |      Extension-Count (16)     |
 +-------------------------------+-------------------------------+
 |                          Extensions(?)                      ...
 +---------------------------------------------------------------+
]]></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='Extension-Count and Extensions:'>
  A list of certificate selection criteria, represented in a series of
<spanx style="verb">Extension</spanx> structures (see <xref target="I-D.ietf-tls-tls13"></xref> section 4.2). This criteria
MUST be used in certificate selection as described in <xref target="I-D.ietf-tls-tls13"/>.
The number of <spanx style="verb">Extension</spanx> structures is given by the 16-bit <spanx style="verb">Extension-Count</spanx>
field, which MAY be zero.</t>
</list></t>

<t>Some extensions used for certificate selection allow multiple values (e.g.
oid_filters on Extended Key Usage). If the sender has included a non-empty
Extensions list, the certificate MUST match all criteria specified by extensions
the recipient recognizes. However, the recipient MUST ignore and skip any
unrecognized certificate selection extensions.</t>

<t>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 anchor="http-cert" title="The CERTIFICATE Frame">

<t>The <spanx style="verb">CERTIFICATE</spanx> frame (id=0xFRAME-TBD3) provides a 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='AUTOMATIC_USE (0x01):'>
  Indicates that the certificate can be used automatically on future
requests.</t>
  <t hangText='TO_BE_CONTINUED (0x02):'>
  Indicates that the exported authenticator spans more than one frame.</t>
</list></t>

<figure title="CERTIFICATE frame payload" anchor="fig-proof-frame"><artwork><![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)         |   Authenticator Fragment (*)...
 +---------------------------------------------------------------+
]]></artwork></figure>

<t>The <spanx style="verb">Exported Authenticator Fragment</spanx> field contains 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>

<t>This opaque data 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">AUTOMATIC_USE</spanx> flag is set, the recipient MAY omit sending
<spanx style="verb">CERTIFICATE_NEEDED</spanx> frames on future streams which would require a
similar certificate and use the referenced certificate for
authentication without further notice to the holder. This behavior is
optional, and receipt of a <spanx style="verb">CERTIFICATE_NEEDED</spanx> frame does not imply
that previously-presented certificates were unacceptable, even if
<spanx style="verb">AUTOMATIC_USE</spanx> was set. Servers MUST set the <spanx style="verb">AUTOMATIC_USE</spanx> flag when
sending a <spanx style="verb">CERTIFICATE</spanx> frame. A server MUST NOT send certificates
for origins which it is not prepared to service on the current
connection.</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 certificate, supporting information about the certificate
(OCSP, SCT, etc.), and an optional <spanx style="verb">certificate_request_context</spanx>.  When
generating exported authenticators for use with this extension, the
<spanx style="verb">certificate_request_context</spanx> MUST be the two-octet Cert-ID.</t>

<t>Upon receipt of a completed authenticator, an endpoint MUST check that:</t>

<t><list style="symbols">
  <t>the <spanx style="verb">validate</spanx> API confirms the validity of the authenticator itself</t>
  <t>the <spanx style="verb">certificate_request_context</spanx> matches the Cert-ID of the frame(s) in
which it was received</t>
</list></t>

<t>Once the authenticator is accepted, the endpoint can perform any other checks
for the acceptability of the certificate itself.</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. In this section, those errors are restated and added to
the HTTP/2 error code registry.</t>

<t><list style="hanging">
  <t hangText='BAD_CERTIFICATE (0xERROR-TBD1):'>
  A certificate was corrupt, contained signatures that did not verify
correctly, etc.</t>
  <t hangText='UNSUPPORTED_CERTIFICATE (0xERROR-TBD2):'>
  A certificate was of an unsupported type or did not contain required
extensions</t>
  <t hangText='CERTIFICATE_REVOKED (0xERROR-TBD3):'>
  A certificate was revoked by its signer</t>
  <t hangText='CERTIFICATE_EXPIRED (0xERROR-TBD4):'>
  A certificate has expired or is not currently valid</t>
  <t hangText='CERTIFICATE_GENERAL (0xERROR-TBD5):'>
  Any other certificate-related error</t>
</list></t>

<t>As described in <xref target="RFC7540"></xref>, implementations MAY choose to treat a stream error as
a connection error at any time. Of particular note, a stream error cannot occur
on stream 0, which means that implementations cannot send non-session errors in
response to <spanx style="verb">CERTIFICATE_REQUEST</spanx>, and <spanx style="verb">CERTIFICATE</spanx> frames. Implementations
which do not wish to terminate the connection MAY either send relevant errors on
any stream which references the failing certificate in question or process the
requests as unauthenticated and provide error information at the HTTP semantic
layer.</t>

</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. As recommended in
<xref target="I-D.ietf-httpbis-origin-frame"></xref>, clients opting not to consult DNS ought to
employ some alternative means to increase confidence that the certificate is
legitimate.</t>

<t>As noted in the Security Considerations of
<xref target="I-D.ietf-tls-exported-authenticator"></xref>, it 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>

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

<t>Failure to provide a certificate on 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="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>

<t>Client implementations need to carefully consider the impact of setting
the <spanx style="verb">AUTOMATIC_USE</spanx> flag. This flag is a performance optimization,
permitting the client to avoid a round-trip on each request where the
server checks for certificate authentication. However, once this flag
has been sent, the client has zero knowledge about whether the server
will use the referenced cert for any future request, or even for an
existing request which has not yet completed. Clients MUST NOT set this
flag on any certificate which is not appropriate for currently-in-flight
requests, and MUST NOT make any future requests on the same connection
which they are not willing to have associated with the provided
certificate.</t>

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

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

<t>The HTTP/2 <spanx style="verb">SETTINGS_HTTP_CERT_AUTH</spanx> setting 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_HTTP_CERT_AUTH Setting">

<t>The SETTINGS_HTTP_CERT_AUTH setting is registered in the “HTTP/2 Settings”
registry established in <xref target="RFC7540"></xref>.</t>

<t><list style="hanging">
  <t hangText='Name:'>
  SETTINGS_HTTP_CERT_AUTH</t>
  <t hangText='Code:'>
  0xSETTING-TBD</t>
  <t hangText='Initial Value:'>
  0</t>
  <t hangText='Specification:'>
  This document.</t>
</list></t>

</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>Five 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>BAD_CERTIFICATE</c>
      <c>0xERROR-TBD1</c>
      <c><xref target="errors"/></c>
      <c>UNSUPPORTED_CERTIFICATE</c>
      <c>0xERROR-TBD2</c>
      <c><xref target="errors"/></c>
      <c>CERTIFICATE_REVOKED</c>
      <c>0xERROR-TBD3</c>
      <c><xref target="errors"/></c>
      <c>CERTIFICATE_EXPIRED</c>
      <c>0xERROR-TBD4</c>
      <c><xref target="errors"/></c>
      <c>CERTIFICATE_GENERAL</c>
      <c>0xERROR-TBD5</c>
      <c><xref target="errors"/></c>
</texttable>

</section>
</section>
<section anchor="ack" title="Acknowledgements">

<t>Eric Rescorla pointed out several failings in an earlier revision.
Andrei Popov contributed to the TLS considerations.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<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="RFC2459" target='https://www.rfc-editor.org/info/rfc2459'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and CRL Profile</title>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<author initials='W.' surname='Ford' fullname='W. Ford'><organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'><organization /></author>
<author initials='D.' surname='Solo' fullname='D. Solo'><organization /></author>
<date year='1999' month='January' />
<abstract><t>This memo profiles the X.509 v3 certificate and X.509 v2 CRL for use in the Internet.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2459'/>
<seriesInfo name='DOI' value='10.17487/RFC2459'/>
</reference>



<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="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>



<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="X690" target="http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf">
  <front>
    <title>Information technology - ASN.1 encoding Rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
    <author >
      <organization>ITU-T</organization>
    </author>
    <date year="2002"/>
  </front>
  <seriesInfo name="ISO" value="ISO/IEC 8825-1:2002"/>
</reference>




<reference anchor="I-D.ietf-tls-tls13">
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>

<author initials='E' surname='Rescorla' fullname='Eric Rescorla'>
    <organization />
</author>

<date month='July' day='3' year='2017' />

<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></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-tls-tls13-21' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-tls-tls13-21.txt' />
</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='July' day='17' year='2017' />

<abstract><t>This document describes a mechanism in Transport Layer Security (TLS) to provide an exportable proof of ownership of a certificate that can be transmitted out of band and verified by the other party.</t></abstract>

</front>

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




    </references>

    <references title='Informative References'>





<reference anchor="I-D.ietf-httpbis-origin-frame">
<front>
<title>The ORIGIN HTTP/2 Frame</title>

<author initials='M' surname='Nottingham' fullname='Mark Nottingham'>
    <organization />
</author>

<author initials='E' surname='Nygren' fullname='Erik Nygren'>
    <organization />
</author>

<date month='August' day='23' year='2017' />

<abstract><t>This document specifies the ORIGIN frame for HTTP/2, to indicate what origins are available on a given connection.  Note to Readers  Discussion of this draft takes place on the HTTP working group mailing list (ietf-http-wg@w3.org), which is archived at https://lists.w3.org/Archives/Public/ietf-http-wg/.  Working Group information can be found at http://httpwg.github.io/; source code and issues list for this draft can be found at https://github.com/httpwg/http-extensions/labels/origin-frame.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-httpbis-origin-frame-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-httpbis-origin-frame-04.txt' />
</reference>



<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>




    </references>




  </back>

<!-- ##markdown-source:
H4sIAOCb91kAA909aVMbSZbfieA/ZOAPC72SDNjug72GxribmDZ4Ac/MRm+H
KalSUONSlbYOsMbt+e37zjyqSsKe6d3YWGKmDVJVHi/ffeV4PN7earImt0fm
ys7KIk2qlTmxVZPNs1nSWHPcNne2aPCPrCxMVpgfr6/fPD3c3kqm08red9+j
F8LH0nJWJAsYP62SeTOeZvVduRzfNc0SfqV/D8dJmmY4fJKPZzBGPd5/AS/C
9Efm48vj69NP21u4mNuyWh2Zukm3t7a3smV1ZJqqrZvD/f3v9nFBlU2OzA+2
sFWSb289lNX726psl0e0lu2t93YFn6VH5qxobFXYZvwSl4SD1U1SpO+SvCxg
ypWtt7eW2ZH5uSlnI1OXVVPZeQ2/rRb4yy/4RgLbLKuj7S0DEDTww5t8nb23
5nvaI39sF0mWH5kF7/t39t7+V2vnZTuZWhwmfvs8m703V22eZ/dJwV+U1W1S
ZH8h6B+Zk7xs03kOO41GL+C9383cd5NZuegP/jqBUy3M9V25qMvB0V+Xf8ny
PIkXTm9NGn7rd7f4qY6/vVWU1QJevrcICHP56uTw4OA79/vzF+73F4fPv/a/
f7uvv3+9/7X7/JvDZ+7zb14859//9PV3/IsxTVLd2ubIIM4cPX368PAwyZp2
khXN07Prt+Prp3XTpis68vopLPHgm6d5Uty2ya2tn/5pAgON9w/3v5ks07kM
yIi/c1bMeR+A4I2d3RVlXt6uzNgcX51PDowtZmWaFbfmss1tDQi/tDMmD3yh
nJvvkzqbmdPoMbP7/enl3sicJEUJx5Pkve9P4HsDaGdeZjWA+LYFDLFp77GX
8NgOr9fjnPzA8QE24975MyYZoIdD/ru2VWbrDLYXvHR2dXGE/3l6dnpivv32
8MX44EhfORu/nGS2mY+bvMb/Hzw76n1sPyyBImw6TjxroFUBTSogBSHce0ru
ZZXdZsV4XiFG6lF/++zbI0an8XhskmndVMmMyPL6pyuzrMr7LAVIzFvgMguY
EGC5aJsW/kli5gTbvc9m+GhZEc2PgLLbJS4XAdouTVMaIHF60FZmFvA5PAj/
wCzPYNzwAaD4ui5nGfya4lMwMQxT14QzJa3SvYZjyRSwclhfA6dgEuAqhYXl
1cArJ0CHWc080W9xAcgH9FgveAv8OS7dM0hTt7M7YId+ZTByQ8vBHZs8WcG0
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
W/8NdJzKci+aAAA=

-->

</rfc>

