<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" number="8740" consensus="true"
     ipr="trust200902" docName="draft-ietf-httpbis-http2-tls13-03"
     category="std" updates="7540" obsoletes="" submissionType="IETF"
     xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true"
     version="3">


  <front>
    <title>Using TLS 1.3 with HTTP/2</title>

    <seriesInfo name="RFC" value="8740"/>

    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <date year="2020" month="February"/>
    <area>Applications and Real-Time</area>
    <workgroup>HTTP</workgroup>

<keyword>HTTP</keyword>
<keyword>renegotiation</keyword>
<keyword>post-handshake client authentication</keyword>

 <abstract>
      <t>This document updates RFC 7540 by forbidding TLS 1.3 post-handshake
authentication, as an analog to the existing TLS 1.2 renegotiation restriction.</t>
    </abstract>

  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>

      <t>TLS 1.2 <xref target="RFC5246" format="default"/> and earlier
      versions of TLS support renegotiation, a mechanism for changing
      parameters and keys partway through a connection. This was sometimes
      used to implement reactive client authentication in HTTP/1.1 <xref
      target="RFC7230" format="default"/>, where the server decides whether or
      not to request a client certificate based on the HTTP request.</t>

      <t>HTTP/2 <xref target="RFC7540" format="default"/> multiplexes multiple
      HTTP requests over a single connection, which is incompatible with the
      mechanism above. Clients cannot correlate the certificate request with
      the HTTP request that triggered it. Thus, <xref target="RFC7540"
      sectionFormat="of" section="9.2.1"/> forbids renegotiation.</t>

      <t>TLS 1.3 <xref target="RFC8446" format="default"/> removes
      renegotiation and replaces it with separate post-handshake
      authentication and key update mechanisms. Post-handshake authentication
      has the same problems with multiplexed protocols as TLS 1.2
      renegotiation, but the prohibition in <xref target="RFC7540"
      format="default"/> only applies to renegotiation.

</t>

      <t>This document updates HTTP/2 <xref target="RFC7540"
      format="default"/> to similarly forbid TLS 1.3 post-handshake
authentication.</t>
    </section>

    <section anchor="requirements-language" numbered="true" toc="default">
      <name>Requirements Language</name>

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

    </section>

    <section anchor="post-handshake-authentication-in-http2" numbered="true" toc="default">
      <name>Post-Handshake Authentication in HTTP/2</name>
      <t>HTTP/2 servers <bcp14>MUST NOT</bcp14> send post-handshake TLS 1.3 CertificateRequest messages.
HTTP/2 clients <bcp14>MUST</bcp14> treat such messages as connection errors (see <xref target="RFC7540" sectionFormat="of" section="5.4.1"/>) of type PROTOCOL_ERROR.</t>
      <t><xref target="RFC7540" format="default"/> permitted renegotiation before the HTTP/2 connection preface to
provide confidentiality of the client certificate. TLS 1.3 encrypts the client
certificate in the initial handshake, so this is no longer necessary. HTTP/2
servers <bcp14>MUST NOT</bcp14> send post-handshake TLS 1.3 CertificateRequest messages before
the connection preface.</t>

      <t>The above applies even if the client offered the
      <tt>post_handshake_auth</tt> TLS extension. This extension is advertised
      independently of the selected Application-Layer Protocol Negotiation
      (ALPN) protocol <xref target="RFC7301" format="default"/>, so it is not
      sufficient to resolve the conflict with HTTP/2. HTTP/2 clients that also
      offer other ALPN protocols, notably HTTP/1.1, in a TLS ClientHello
      <bcp14>MAY</bcp14> include the <tt>post_handshake_auth</tt> extension to
      support those other protocols. This does not indicate support in
      HTTP/2.</t>
    </section>
    <section anchor="other-post-handshake-tls-messages-in-http2" numbered="true" toc="default">
      <name>Other Post-Handshake TLS Messages in HTTP/2</name>
      <t><xref target="RFC8446" format="default"/> defines two other messages that are exchanged after the handshake is
complete: KeyUpdate and NewSessionTicket.</t>
      <t>KeyUpdate messages only affect TLS itself and do not require any interaction
with the application protocol. HTTP/2 implementations <bcp14>MUST</bcp14> support key updates
when TLS 1.3 is negotiated.</t>
      <t>NewSessionTicket messages are also permitted. Though these interact
      with HTTP when early data is enabled, these interactions are defined in
      <xref target="RFC8470" format="default"/> and are allowed for in the
      design of HTTP/2.</t>
      <t>Unless the use of a new type of TLS message depends on an interaction
      with the application-layer protocol, that TLS message can be sent after
      the handshake completes.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document resolves a compatibility concern between HTTP/2 and TLS 1.3 when
supporting post-handshake authentication with HTTP/1.1. This lowers the barrier
for deploying TLS 1.3, a major security improvement over TLS 1.2.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5246.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7230.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7301.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7540.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8470.xml"/>
      </references>
    </references>
  </back>

</rfc>
