<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.5) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc tocompact="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>

<rfc ipr="trust200902" docName="draft-gudzenko-httpbis-h2-cipher-selection-00" category="std" consensus="true" submissionType="IETF" updates="9113" tocDepth="4" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="h2-cipher-selection">Cipher Suite Selection for HTTP/2 Negotiation over TLS 1.2</title>

    <author initials="E." surname="Gudzenko" fullname="Egor Gudzenko">
      <organization>Individual Contributor</organization>
      <address>
        <postal>
          <city>Moscow</city>
          <country>RU</country>
        </postal>
        <email>egor@egl.sh</email>
      </address>
    </author>

    <date year="2026" month="May" day="23"/>

    <area>ART</area>
    <workgroup>HTTPBIS Working Group</workgroup>
    <keyword>HTTP/2</keyword> <keyword>ALPN</keyword> <keyword>TLS 1.2</keyword> <keyword>cipher suite</keyword> <keyword>protocol negotiation</keyword>

    <abstract>


<?line 59?>

<t>Section 9.2.2 of RFC 9113 identifies, but does not normatively resolve,
a failure mode in which the application protocol and the cipher suite
are selected independently, resulting in a successfully completed TLS
handshake whose negotiated parameters may be rejected at the HTTP/2
layer with an INADEQUATE_SECURITY connection error. This document
addresses that gap by adding a SHOULD-level procedure that coordinates
cipher suite selection with ALPN negotiation, and updates RFC9113.</t>



    </abstract>



  </front>

  <middle>


<?line 69?>

<section anchor="introduction"><name>Introduction</name>

<t>An interoperability hazard between TLS cipher suite selection and
Application-Layer Protocol Negotiation (ALPN) <xref target="RFC7301"/> for HTTP/2
<xref target="RFC9113"/> over TLS 1.2 <xref target="RFC5246"/> was raised in <xref target="ISSUE-612"/>
during the drafting of <xref target="RFC7540"/>, the predecessor of <xref target="RFC9113"/>. The
HTTP Working Group's resolution, merged via <xref target="PR-644"/>, introduced the
list of prohibited cipher suites now codified in Appendix A of
<xref target="RFC9113"/>, together with the mandatory cipher suite
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 as a guaranteed-available
alternative.</t>

<t>This resolution ensures a guaranteed-available h2-compatible cipher
suite, but leaves server behavior unspecified when both prohibited and
h2-compatible cipher suites are available for negotiation. Section 9.2.2
of <xref target="RFC9113"/> notes the resulting failure mode:</t>

<ul empty="true"><li>
  <t>Note that clients might advertise support of cipher suites that are
prohibited in order to allow for connection to servers that do not
support HTTP/2. This allows servers to select HTTP/1.1 with a cipher
suite that is prohibited in HTTP/2. However, this can result in HTTP/2
being negotiated with a prohibited cipher suite if the application
protocol and cipher suite are independently selected.</t>
</li></ul>

<t>When a client chooses to enforce the cipher suite requirements of
Section 9.2.2 of <xref target="RFC9113"/>, it may signal this by tearing down the
HTTP/2 connection via GOAWAY with error code INADEQUATE_SECURITY
(Section 7 of <xref target="RFC9113"/>). However, Section 9.2.2 of <xref target="RFC9113"/> only
acknowledges this failure without prescribing a solution, leaving a
preventable failure mode unaddressed.</t>

<t>TLS 1.2 remains widely deployed, and this failure mode affects any TLS
1.2 server where prohibited cipher suites are available alongside
h2-compatible cipher suites.</t>

<t>This document adds a SHOULD-level procedure for coordinating cipher
suite selection with ALPN negotiation. It does not modify the
prohibited cipher suite list in Appendix A of <xref target="RFC9113"/> or the
mandatory cipher suite requirement of Section 9.2.2 of <xref target="RFC9113"/>.
Instead, it closes the normative gap left open by Section 9.2.2 of
<xref target="RFC9113"/>, which identifies independent selection as a failure mode
but does not prescribe how to prevent it when prevention is possible.</t>

</section>
<section anchor="conventions-and-definitions"><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"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>

<t>The term "ClientHello" is used as defined in Section 7.4.1.2 of
<xref target="RFC5246"/>.</t>

<t>The term "h2-compatible cipher suite" refers to any TLS 1.2 cipher suite
that is not listed in Appendix A of <xref target="RFC9113"/>.</t>

</section>
<section anchor="applicability"><name>Applicability</name>

<t>This document applies to TLS 1.2 <xref target="RFC5246"/> servers that negotiate ALPN
<xref target="RFC7301"/> and support HTTP/2 <xref target="RFC9113"/>.</t>

<t>This document does not apply to TLS 1.3 <xref target="RFC8446"/>. HTTP/2 over TLS 1.3
is addressed by Section 9.2.3 of <xref target="RFC9113"/>.</t>

<t>The procedure specified in <xref target="procedure"/> is most directly relevant to
deployments where prohibited cipher suites are present in the
negotiation alongside h2-compatible cipher suites.</t>

</section>
<section anchor="procedure"><name>Cipher Suite Selection Procedure</name>

<t>When a TLS 1.2 server receives a ClientHello that includes "h2" in the
ALPN extension <xref target="RFC7301"/>, and the intersection of cipher suites
offered in the ClientHello and supported by the server includes at least
one h2-compatible cipher suite, the server SHOULD select an
h2-compatible cipher suite.</t>

</section>
<section anchor="security"><name>Security Considerations</name>

<t>This document does not modify the cipher suite requirements of Section
9.2.2 of <xref target="RFC9113"/> or the list of prohibited cipher suites in Appendix
A of <xref target="RFC9113"/>. The TLS threat model is unchanged. This procedure
addresses an availability concern: it prevents connection failures that
occur when a prohibited cipher suite is selected despite an
h2-compatible one being available for negotiation.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document has no IANA actions.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <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="RFC5246">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
    <author fullname="T. Dierks" initials="T." surname="Dierks"/>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <date month="August" year="2008"/>
    <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="RFC7301">
  <front>
    <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
    <author fullname="S. Friedl" initials="S." surname="Friedl"/>
    <author fullname="A. Popov" initials="A." surname="Popov"/>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="E. Stephan" initials="E." surname="Stephan"/>
    <date month="July" year="2014"/>
    <abstract>
      <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7301"/>
  <seriesInfo name="DOI" value="10.17487/RFC7301"/>
</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"/>
    <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="RFC9113">
  <front>
    <title>HTTP/2</title>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
    <date month="June" year="2022"/>
    <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 latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
      <t>This document obsoletes RFCs 7540 and 8740.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9113"/>
  <seriesInfo name="DOI" value="10.17487/RFC9113"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
    <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="RFC7540">
  <front>
    <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
    <author fullname="M. Belshe" initials="M." surname="Belshe"/>
    <author fullname="R. Peon" initials="R." surname="Peon"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2015"/>
    <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="ISSUE-612" target="https://github.com/httpwg/http2-spec/issues/612">
  <front>
    <title>TLS Requirements (Issue #612)</title>
    <author >
      <organization>HTTP Working Group</organization>
    </author>
    <date year="2014"/>
  </front>
</reference>
<reference anchor="PR-644" target="https://github.com/httpwg/http2-spec/pull/644">
  <front>
    <title>Resolve issue #612 by adding cipher block list</title>
    <author >
      <organization>HTTP Working Group</organization>
    </author>
    <date year="2014"/>
  </front>
</reference>


    </references>

</references>


<?line 161?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>This document was informed by the discussion in
<xref target="ISSUE-612"/> and <xref target="PR-644"/> of the httpwg/http2-spec repository,
in particular the observation by Sam Hartman at IETF 91 that led to the
cipher block list now codified in Appendix A of <xref target="RFC9113"/>.</t>

</section>


  </back>

<!-- ##markdown-source:
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
Zz+JvX2V7krlfwCeq0AbVRcAAA==

-->

</rfc>

