<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.21 -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-cross-sni-resumption-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" obsoletes="" updates="" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="TLS Cross-SNI Resumption">Transport Layer Security (TLS) Resumption across Server Names</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-cross-sni-resumption-02"/>
    <author initials="V." surname="Vasiliev" fullname="Victor Vasiliev">
      <organization>Google</organization>
      <address>
        <email>vasilvv@google.com</email>
      </address>
    </author>
    <date year="2021" month="December" day="06"/>
    <area>Security</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a way for the parties in the Transport Layer Security
(TLS) protocol to indicate that an individual session ticket can be used to
perform resumption even if the Server Name of the new connection does not match
the Server Name of the original.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  TLS Working Group mailing list (tls@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/">https://mailarchive.ietf.org/arch/browse/tls/</eref>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/vasilvv/tls-cross-sni-resumption">https://github.com/vasilvv/tls-cross-sni-resumption</eref>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Transport Layer Security protocol <xref target="RFC8446" format="default"/> allows the clients to use
an abbreviated handshake in cases where the client has previously established a
secure session with the same server.  This mechanism is known as "session
resumption", and its positive impact on performance makes it desirable to be
able to use it as frequently as possible.</t>
      <t>Modern application-level protocols, HTTP in particular, often require accessing
multiple servers within a single workflow.  Since the identity of the server is
established through its certificate, in the ideal case, the resumption would be
possible to all of the domains for which the certificate is valid (see <xref target="PERF" format="default"/>
for a survey of potential practical impact of such approach).  TLS, starting
with version 1.3, defines the SNI value to be a property of an individual
connection that is not retained across sessions (<xref target="RFC8446" format="default"/>, Section 4.2.11).
However, in the absence of additional signals, it discourages using a session
ticket when the SNI value does not match (<xref target="RFC8446" format="default"/>, Section 4.6.1), as there
is normally no reason to assume that all servers sharing the same certificate
would also share the same session keys.  The extension defined in this document
allows the server to provide such a signal in-band.</t>
    </section>
    <section anchor="conventions-and-definitions" numbered="true" toc="default">
      <name>Conventions and Definitions</name>
      <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" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
    </section>
    <section anchor="the-flag" numbered="true" toc="default">
      <name>The Flag</name>
      <t>Resumption across server names is negotiated using the TLS flags extension
<xref target="I-D.draft-ietf-tls-tlsflags" format="default"/>.  The server MAY send a
resumption_across_names(8) flag in a NewSessionTicket message; the flag is an
assertion by the server that any server for any identity presented in its
certificate would be capable of accepting that ticket.  A client receiving a
ticket with this flag MAY attempt resumption for any server name corresponding
to an identity in the server certificate even if the new server name value does
not match the one used in the original session; note that this requires the
client to retain the list of the names specified in the original server
certificate.  The flag cannot be used in TLS versions before 1.3, as the
NewSessionTicket message does not exist in those versions.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>This document does not alter any of the security requirements of <xref target="RFC8446" format="default"/>, but
merely lifts a performance-motivated "SHOULD NOT" recommendation from Section
4.6.1.  Notably, it still relies on the client ensuring that the server
certificate is valid for the new SNI at the time of session resumption.</t>
      <t>If the original server's assertion regarding supporting cross-name resumption
turns out to be incorrect, a different server that receives a misdirected ticket
will not be able to decrypt it and will therefore be unable to resume.  The
protocol will gracefully recover from such situations, as session resumption
may be safely rejected for any reason.  However, such misconfiguration will
waste tickets stored in the client's cache, as TLS tickets may be single-use,
leading to a potential performance regression.</t>
      <t>When providing the SNI value to the application, TLS 1.3 requires the value
from the most recent ClientHello to be used (<xref section="4.6.1" sectionFormat="comma" target="RFC8446" format="default"/>).  If the
server TLS implementation violates that requirement and instead reports the SNI
value of the original session, this can lead to a confusion attack where the
client and the server disagree on the server name being used (similar to the
attacks described in <xref target="DB15" format="default"/>).  The implementers MUST ensure that this aspect
of SNI processing is handled correctly before enabling cross-name resumption.</t>
      <t>Cross-domain resumption implies that any certificate the client provides for
one host would become available to the other hosts using the same server
certificate.  Because of that, when performing cross-domain resumption, the
client MUST use the same policy on whether to present said certificate to the
server as if it were a new TLS session.  For instance, if the client would show
a certificate choice prompt for every individual domain it connects to, it MUST
show that prompt for the new host when performing cross-domain resumption.</t>
      <t>Cross-domain resumption, like other similar mechanisms (e.g. cross-domain HTTP
connection reuse), can incentivize the server deployments to create server
certificates valid for a wider range of domains than they would otherwise.
However, any increase in the scope of a certificate comes at a cost: the wider
is the scope of the certificate, the wider is the impact of the key compromise
for that certificate.  In addition, creating a certificate that is valid for
multiple hostnames can lead to complications if some of those hostnames change
ownership, or otherwise require a different operational domain.</t>
      <t>Session tickets can contain arbitrary information, and thus could be
potentially used to re-identify a user from a previous connection.
Cross-domain resumption expands the potential list of servers to which an
individual ticket could be presented.  Client applications should partition the
session cache between connections that are meant to be uncorrelated.  For
example, the Web use case uses network partition keys to separate cache lookups
<xref target="FETCH" format="default"/>.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>IANA (will add/has added) the following entry to the "TLS Flags"
table of the "Transport Layer Security (TLS) Extensions" registry:</t>
      <dl>
        <dt>
Value  </dt>
        <dd>
          <t>0x8</t>
        </dd>
        <dt>
Flag Name  </dt>
        <dd>
          <t>resumption_across_names</t>
        </dd>
        <dt>
Message  </dt>
        <dd>
          <t>NST</t>
        </dd>
        <dt>
Recommended  </dt>
        <dd>
          <t>N</t>
        </dd>
        <dt>
Reference  </dt>
        <dd>
          <t>This document</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <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="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <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="I-D.draft-ietf-tls-tlsflags">
          <front>
            <title>A Flags Extension for TLS 1.3</title>
            <author fullname="Yoav Nir">
              <organization>Dell Technologies</organization>
            </author>
            <date day="25" month="October" year="2021"/>
            <abstract>
              <t>   A number of extensions are proposed in the TLS working group that
   carry no interesting information except the 1-bit indication that a
   certain optional feature is supported.  Such extensions take 4 octets
   each.  This document defines a flags extension that can provide such
   indications at an average marginal cost of 1 bit each.  More
   precisely, it provides as many flag extensions as needed at 4 + the
   order of the last set bit divided by 8.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-tlsflags-07"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="DB15">
          <front>
            <title>Network-based Origin Confusion Attacks against HTTPS Virtual Hosting</title>
            <author initials="A." surname="Delignat-Lavaud" fullname="Antoine Delignat-Lavaud">
              <organization/>
            </author>
            <author initials="K." surname="Bhargavan" fullname="Karthikeyan Bhargavan">
              <organization/>
            </author>
            <date year="2015" month="March" day="15"/>
          </front>
        </reference>
        <reference anchor="PERF" target="https://arxiv.org/pdf/1902.02531.pdf">
          <front>
            <title>Enhanced Performance for the encrypted Web through TLS Resumption across Hostnames</title>
            <author initials="E." surname="Sy" fullname="Erik Sy">
              <organization/>
            </author>
            <author initials="M." surname="Moennich" fullname="Moritz Moennich">
              <organization/>
            </author>
            <author initials="T." surname="Mueller" fullname="Tobias Mueller">
              <organization/>
            </author>
            <author initials="H." surname="Federrath" fullname="Hannes Federrath">
              <organization/>
            </author>
            <author initials="M." surname="Fischer" fullname="Mathias Fischer">
              <organization/>
            </author>
            <date year="2019" month="February" day="07"/>
          </front>
        </reference>
        <reference anchor="FETCH" target="https://fetch.spec.whatwg.org/">
          <front>
            <title>Fetch Standard</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date year="2021" month="December"/>
          </front>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>Cross-name resumption has been previously implemented in the QUIC Crypto
protocol as a preloaded list of hostnames.</t>
      <t>Erik Sy has previously proposed a similar mechanism for TLS,
<eref target="https://datatracker.ietf.org/doc/draft-sy-tls-resumption-group/">draft-sy-tls-resumption-group</eref>.
This document incorporates ideas from that draft.</t>
      <t>This document has benefited from contributions and suggestions from
Carrick Bartle,
David Benjamin,
Nick Harper,
Eric Rescorla,
David Schinazi,
Ryan Sleevi,
Ian Swett,
Martin Thomson,
Christopher Wood,
and many others.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
