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

<!DOCTYPE rfc>

<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" consensus="true" docName="draft-ietf-dance-tls-clientid-07" ipr="trust200902" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3">
  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title abbrev="TLS DANE ClientID Extension">TLS Extension for DANE Client Identity</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-dance-tls-clientid-07"/>
    <author fullname="Shumon Huque" initials="S." surname="Huque">
      <organization>Salesforce</organization>
      <address>
        <email>shuque@gmail.com</email>
      </address>
    </author>
    <author fullname="Viktor Dukhovni" initials="V." surname="Dukhovni">
      <organization>OpenSSL Corporation</organization>
      <address>
        <email>ietf-dane@dukhovni.org</email>
      </address>
    </author>

    <date day="17" month="09" year="2025"/>
    <!-- Meta-data Declarations -->

    <area>General</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>Internet-Draft</keyword>
    <keyword>TLS</keyword>
    <keyword>Extension</keyword>
    <keyword>DANE</keyword>
    <keyword>Client</keyword>
    <keyword>Identity</keyword>
    <abstract>
      <t>
	This document specifies a TLS and DTLS extension to convey a
	DNS-Based Authentication of Named Entities (DANE) Client Identity
	to a TLS or DTLS server. This is useful for applications that
	perform TLS client authentication via DANE TLSA records.
      </t>
    </abstract>
  </front>
  <middle>
    <section numbered="true" toc="default">
      <name>Introduction</name>
      <t>
	This document specifies a <xref target="RFC6066" format="default">
	Transport Layer Security (TLS) extension</xref> to convey a
	<xref target="RFC6698" format="default">DANE</xref>
	Client Identity to the TLS server. This is useful for
	applications that perform TLS client authentication
	via DANE TLSA records, as described in
	<xref target="DANECLIENT" format="default"/>. The extension could be
        empty to indicate to the server that the client has a DANE record and
        that the server can perform DANE authentication of the client with
        the identity extracted from the client certificate. Or the extension
        can contain the full client identity, in the form of the DNS domain
        name that is expected to have a DANE TLSA record published for it.
      </t>
      <t>
	This extension supports both TLS <xref target="RFC5246" format="default"/>
        <xref target="RFC8446" format="default"/> and <xref target="RFC6347" format="default">DTLS
        </xref>, and the term TLS in this document is used generically
	to describe both protocols. It is presently defined to work for
        both TLS 1.2 and 1.3 versions, and is expected to work with newer
        versions going forward.
      </t>
      <section anchor="reserved-words"><name>Requirements Language</name>
      <t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL NOT&quot;,
   &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;NOT RECOMMENDED&quot;, &quot;MAY&quot;,
   and &quot;OPTIONAL&quot; in this document are to be interpreted as described
   in BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref> when, and only when, they
   appear in all capitals, as shown here.</t>
    </section>
    </section>

    <section anchor="Overview" numbered="true" toc="default">
      <name>Overview</name>
      <t>
	When TLS clients use X.509 client certificates or raw public
	keys that are authenticated via DANE TLSA records, it is useful
        for them to convey their intent to be authenticated via DANE, or
        even to convey their complete DANE identity to the server. The TLS
	extension defined in this document is used to accomplish this.
      </t>
      <t>
	In the case of X.509 client certificates, a TLS server can
	learn the client's identity by examining subject alternative
	names included in the certificate itself. However, without a
	mechanism such as the one defined in this extension, the TLS
	server cannot know before hand that the client has a published
	TLSA record, and thus may unnecessarily issue DNS queries for
	DANE TLSA records in-band with the TLS handshake even in cases
	where the client has no TLSA record associated with it. When
	multiple identities are present in the certificate, a client
	MUST use this extension to specify exactly which one the server
	should use. An additional situation in which this extension
	helps is where some TLS servers may need to selectively prompt
	for client certificate credentials only for clients that are
	equipped to provide certificates.
      </t>
      <t>
	When <xref target="RFC7250" format="default">TLS raw public
	keys</xref> are being used to authenticate the client, the
	client MUST use this extension to explicitly indicate to the
	server what its domain name identity is (since there is no
        X.509 certificate from which the identity can be extracted).
      </t>
      <t>
	Detailed protocol behavior of TLS clients and servers is
	described in <xref target="DANECLIENT" format="default"/>.
      </t>
    </section>
    <section numbered="true" toc="default">
      <name>DANE Client Identity Extension</name>
      <t>
	The DANE Client Identity Extension type, "dane_clientid",
	will have a value assigned and registered in the IANA
	TLS Extensions registry. Its extension data (if not
        empty) has the following format:
      </t>
      <artwork name="" type="" align="left" alt=""><![CDATA[

opaque ClientName<1..2^8-1>;
        ]]></artwork>
      <t>
	The ClientName field contains the single domain name of
	the client in textual presentation format, as described in
	<xref target="RFC1035" format="default">RFC 1035</xref>,
        omitting the trailing dot.
      </t>
      <t>
        The wire format of a domain name is limited to 255 octets.
        In keeping with the practice of most TLS extensions, this
        extension specifies the use of the textual presentation
        format of domain names instead. In theory, the presentation
        format can exceed 255 characters because it allows the
        expression of any arbitrary octet with the "\DDD" sequence
        of characters (where DDD is the decimal value). Applications
        using this extension (and the DANE TLSA Client Authentication
        protocol more generally) should ensure that client domain names
        being used do not need to resort to the \DDD syntax by limiting
        the alphabet suitably, such as only allowing letters, digits,
        hyphens, and underscores. This ensures that the presentation
        format client domain name will comfortably fit within the 255
        octet limit.
      </t>
      <t>
	A TLS server implementing this specification MUST send
	an empty extension of type "dane_clientid" to indicate that
        it understands the extension and is capable of performing
        DANE client authentication. In TLS 1.2, the empty extension
        is sent in the ServerHello message. In TLS 1.3, it is sent
        in the CertificateRequest message.
      </t>
      <t>
	A TLS client implementing this specification and intending to
        use DANE client authentication the TLS server, MUST send
	an extension of type "dane_clientid". If the client only needs
        to indicate that it has a DANE record and that the client's
        domain name identity can be obtained from its certificate, then
        the extension sent can be empty. If the client needs to send
        its domain name identity, then the "extension_data" field
        of the extension MUST contain a "ClientName" data structure
        populated with the domain name.
      </t>
      <t>
        In TLS 1.2, the client extension is sent in the ClientHello message.
        In TLS 1.3, it is sent in the Certificate message. Additionally, in
        TLS 1.3, the client is only permitted to send the extension if it
        sees the corresponding empty extension in the server's
        CertificateRequest message.
      </t>
    </section>
    <section anchor="Security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
        In TLS 1.3, this extension is sent in the CertificateRequest
        and Certificate messages, which are encrypted.
      </t>
      <t>
        In TLS 1.2, this extension cannot be encrypted. When used
        with TLS 1.2, to prevent unnecessary privacy leakage of the
        client's name in cleartext, a TLS client implementing this
        specification should be configured to only send this extension
        to TLS servers it intends to perform client authentication with.
      </t>
    </section>
    <section anchor="IANA" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>
        IANA is requested to create the following entry in the "TLS ExtensionTypes Values" registry:
      </t>
      <t>
        Extension Name "dane_clientid" with value TBD, "TLS 1.3" column values set to "CR, CT", "DTLS-Only" column set to "N", and "Recommended" column set to "N".
      </t>
      <t>
        The 'N' designation in the "Recommended" column is because this
        extension has very specific use cases.
      </t>
    </section>
  </middle>
  <!--  *****BACK MATTER ***** -->

  <back>
    <references>
      <name>Normative References</name>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5246.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6066.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6347.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6698.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7250.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
      <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8446.xml"/>
      <reference anchor="DANECLIENT" target="https://tools.ietf.org/html/draft-huque-dane-client-cert">
        <front>
          <title>TLS Client Authentication via DANE TLSA Records</title>
          <author fullname="Shumon Huque" initials="S" surname="Huque"/>
          <author fullname="Viktor Dukhovni" initials="V" surname="Dukhovni"/>
          <author fullname="Ash Wilson" initials="A" surname="Wilson"/>
          <date day="2" month="5" year="2021"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
