<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" submissionType="IETF" category="std" docName="draft-ietf-acme-onion-07" number="9799" consensus="true" updates="" obsoletes="" xml:lang="en" tocInclude="true" symRefs="true" sortRefs="false" prepTime="2025-06-26T22:31:08" indexInclude="true" scripts="Common,Latin" tocDepth="3">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-acme-onion-07" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9799" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="ACME for &quot;.onion&quot;">Automated Certificate Management Environment (ACME) Extensions for ".onion" Special-Use Domain Names</title>
    <seriesInfo name="RFC" value="9799" stream="IETF"/>
    <author fullname="Q Misell" role="editor" surname="Misell">
      <organization abbrev="AS207960" showOnFrontPage="true">AS207960 Cyfyngedig</organization>
      <address>
        <postal>
          <street>13 Pen-y-lan Terrace</street>
          <city>Caerdydd</city>
          <code>CF23 9EU</code>
          <country>United Kingdom</country>
        </postal>
        <email>q@as207960.net</email>
        <email>q@magicalcodewit.ch</email>
        <uri>https://magicalcodewit.ch</uri>
      </address>
    </author>
    <date month="06" year="2025"/>
    <area>SEC</area>
    <workgroup>acme</workgroup>
    <keyword>tor</keyword>
    <keyword>hidden service</keyword>
    <keyword>onion service</keyword>
    <keyword>caa</keyword>
    <keyword>dns</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">This document defines extensions to the Automated Certificate Management Environment (ACME) to allow for the
        automatic issuance of certificates to Tor Hidden Services (".onion" Special-Use Domain Names).</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9799" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2025 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-identifier">Identifier</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-identifier-validation-chall">Identifier Validation Challenges</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-existing-challenges">Existing Challenges</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.1.2">
                  <li pn="section-toc.1-1.3.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.1.1"><xref derivedContent="3.1.1" format="counter" sectionFormat="of" target="section-3.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-existing-dns-01-challenge">Existing: "dns-01" Challenge</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.2.1"><xref derivedContent="3.1.2" format="counter" sectionFormat="of" target="section-3.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-existing-http-01-challenge">Existing: <tt>http-01</tt> Challenge</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.1.2.3">
                    <t indent="0" pn="section-toc.1-1.3.2.1.2.3.1"><xref derivedContent="3.1.3" format="counter" sectionFormat="of" target="section-3.1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-existing-tls-alpn-01-challe">Existing <tt>tls-alpn-01</tt> Challenge</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-new-onion-csr-01-challenge">New <tt>onion-csr-01</tt> Challenge</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-client-authentication-to-hi">Client Authentication to Hidden Services</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-acme-over-hidden-services">ACME over Hidden Services</xref></t>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certification-authority-aut">Certification Authority Authorization (CAA)</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-relevant-resource-record-se">Relevant Resource Record Set</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-when-to-check-caa">When to Check CAA</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-preventing-mis-issuance-by-">Preventing Mis-Issuance by Unknown CAs</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.4">
                <t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" format="counter" sectionFormat="of" target="section-6.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-alternative-in-band-present">Alternative In-Band Presentation of CAA</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2.4.2">
                  <li pn="section-toc.1-1.6.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.6.2.4.2.1.1"><xref derivedContent="6.4.1" format="counter" sectionFormat="of" target="section-6.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-acme-servers-requiring-in-b">ACME Servers Requiring In-Band CAA</xref></t>
                  </li>
                  <li pn="section-toc.1-1.6.2.4.2.2">
                    <t indent="0" pn="section-toc.1-1.6.2.4.2.2.1"><xref derivedContent="6.4.2" format="counter" sectionFormat="of" target="section-6.4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-example-in-band-caa">Example In-Band CAA</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-validation-methods">Validation Methods</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-error-types">Error Types</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.3">
                <t indent="0" pn="section-toc.1-1.7.2.3.1"><xref derivedContent="7.3" format="counter" sectionFormat="of" target="section-7.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-directory-metadata-fields">Directory Metadata Fields</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-of-the-onion-csr-0">Security of the <tt>onion-csr-01</tt> Challenge</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-the-dns-identifier-t">Use of the "dns" Identifier Type</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2.2.2">
                  <li pn="section-toc.1-1.8.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.1.1"><xref derivedContent="8.2.1" format="counter" sectionFormat="of" target="section-8.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-http-01-challenge"><tt>http-01</tt> Challenge</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.2.1"><xref derivedContent="8.2.2" format="counter" sectionFormat="of" target="section-8.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-tls-alpn-01-challenge"><tt>tls-alpn-01</tt> Challenge</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.2.2.3">
                    <t indent="0" pn="section-toc.1-1.8.2.2.2.3.1"><xref derivedContent="8.2.3" format="counter" sectionFormat="of" target="section-8.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-dns-01-challenge"><tt>dns-01</tt> Challenge</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.8.2.3">
                <t indent="0" pn="section-toc.1-1.8.2.3.1"><xref derivedContent="8.3" format="counter" sectionFormat="of" target="section-8.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-key-authorization-with-onio">Key Authorization with <tt>onion-csr-01</tt></xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.4">
                <t indent="0" pn="section-toc.1-1.8.2.4.1"><xref derivedContent="8.4" format="counter" sectionFormat="of" target="section-8.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-tor-for-domains-that">Use of Tor for Domains That Are Not ".onion"</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.5">
                <t indent="0" pn="section-toc.1-1.8.2.5.1"><xref derivedContent="8.5" format="counter" sectionFormat="of" target="section-8.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-redirects-with-http-01">Redirects with <tt>http-01</tt></xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.6">
                <t indent="0" pn="section-toc.1-1.8.2.6.1"><xref derivedContent="8.6" format="counter" sectionFormat="of" target="section-8.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-of-caa-records">Security of CAA Records</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.7">
                <t indent="0" pn="section-toc.1-1.8.2.7.1"><xref derivedContent="8.7" format="counter" sectionFormat="of" target="section-8.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-in-band-caa">In-Band CAA</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.8">
                <t indent="0" pn="section-toc.1-1.8.2.8.1"><xref derivedContent="8.8" format="counter" sectionFormat="of" target="section-8.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-access-of-the-tor-network">Access of the Tor Network</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.9">
                <t indent="0" pn="section-toc.1-1.8.2.9.1"><xref derivedContent="8.9" format="counter" sectionFormat="of" target="section-8.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-anonymity-of-the-acme-clien">Anonymity of the ACME Client</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2.9.2">
                  <li pn="section-toc.1-1.8.2.9.2.1">
                    <t indent="0" pn="section-toc.1-1.8.2.9.2.1.1"><xref derivedContent="8.9.1" format="counter" sectionFormat="of" target="section-8.9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-avoid-unnecessary-certifica">Avoid Unnecessary Certificates</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.9.2.2">
                    <t indent="0" pn="section-toc.1-1.8.2.9.2.2.1"><xref derivedContent="8.9.2" format="counter" sectionFormat="of" target="section-8.9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-obfuscate-subscriber-inform">Obfuscate Subscriber Information</xref></t>
                  </li>
                  <li pn="section-toc.1-1.8.2.9.2.3">
                    <t indent="0" pn="section-toc.1-1.8.2.9.2.3.1"><xref derivedContent="8.9.3" format="counter" sectionFormat="of" target="section-8.9.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-separate-acme-account-keys">Separate ACME Account Keys</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="9" format="counter" sectionFormat="of" target="section-9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="9.1" format="counter" sectionFormat="of" target="section-9.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="9.2" format="counter" sectionFormat="of" target="section-9.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-discussion-on-the-use-of-th">Discussion on the Use of the "dns" Identifier Type</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">The Tor network has the ability to host "Onion Services" <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/> only accessible via the
        Tor network. These services use the ".onion"
        Special-Use Domain Name <xref target="RFC7686" format="default" sectionFormat="of" derivedContent="RFC7686"/> to identify these services. These can be used as any other domain
        name could, but they do not form part of the DNS infrastructure.</t>
      <t indent="0" pn="section-1-2">The Automated Certificate Management Environment (ACME) <xref target="RFC8555" format="default" sectionFormat="of" derivedContent="RFC8555"/> defines challenges for
        validating control of DNS identifiers, and whilst a ".onion" Special-Use Domain Name may appear as a DNS name,
        it requires special consideration to validate control of one such that ACME could be used on ".onion"
        Special-Use Domain Names.</t>
      <t indent="0" pn="section-1-3">In order to allow ACME to be utilized to issue certificates to ".onion" Special-Use Domain Names, this document
        specifies challenges suitable to validate control of these Special-Use Domain Names. Additionally, this document
        defines an alternative to the DNS Certification Authority Authorization (CAA) Resource Record
        <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/> that can be used with ".onion" Special-Use Domain Names.</t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-1.1">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.1-1">
    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 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/>
    when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-2">
      <name slugifiedName="name-identifier">Identifier</name>
      <t indent="0" pn="section-2-1"><xref target="RFC8555" format="default" sectionFormat="of" derivedContent="RFC8555"/> defines the "dns" identifier type. This identifier type <bcp14>MUST</bcp14> be used
        when requesting a certificate for a ".onion" Special-Use Domain Name. The value of the identifier
        <bcp14>MUST</bcp14> be the textual representation as defined in the "Special Hostnames in Tor - .onion" section of <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>.
        The value <bcp14>MAY</bcp14> include subdomain labels. Version 2 addresses <xref target="tor-rend-spec-v2" format="default" sectionFormat="of" derivedContent="tor-rend-spec-v2"/>
        <bcp14>MUST NOT</bcp14> be used as these are now considered insecure.</t>
      <t indent="0" pn="section-2-2">Example identifiers (line breaks have been added for readability only):</t>
      <sourcecode type="json" markers="false" pn="section-2-3">
{
  "type": "dns",
  "value": "bbcweb3hytmzhn5d532owbu6oqadra5z3ar726v
        q5kgwwn6aucdccrad.onion"
}
</sourcecode>
      <sourcecode type="json" markers="false" pn="section-2-4">
{
  "type": "dns",
  "value": "www.bbcweb3hytmzhn5d532owbu6oqadra5z3ar726v
        q5kgwwn6aucdccrad.onion"
}
</sourcecode>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-3">
      <name slugifiedName="name-identifier-validation-chall">Identifier Validation Challenges</name>
      <t indent="0" pn="section-3-1">The CA/Browser Forum Baseline Requirements define methods accepted by the CA industry for validation of ".onion" Special-Use Domain Names (see <xref target="cabf-br" section="B.2" relative="#page=124" format="default" sectionFormat="of" derivedLink="https://cabforum.org/working-groups/server/baseline-requirements/documents/CA-Browser-Forum-TLS-BR-2.0.6.pdf#page=124" derivedContent="cabf-br"/>).
        This document incorporates these methods into ACME challenges.</t>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-3.1">
        <name slugifiedName="name-existing-challenges">Existing Challenges</name>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-3.1.1">
          <name slugifiedName="name-existing-dns-01-challenge">Existing: "dns-01" Challenge</name>
          <t indent="0" pn="section-3.1.1-1">The existing "dns-01" challenge <bcp14>MUST NOT</bcp14> be used to validate ".onion" Special-Use Domain
            Names as these domains are not part of the DNS.</t>
        </section>
        <section anchor="http01" numbered="true" removeInRFC="false" toc="include" pn="section-3.1.2">
          <name slugifiedName="name-existing-http-01-challenge">Existing: <tt>http-01</tt> Challenge</name>
          <t indent="0" pn="section-3.1.2-1">The <tt>http-01</tt> challenge, as defined in <xref target="RFC8555" section="8.3" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-8.3" derivedContent="RFC8555"/>, <bcp14>MAY</bcp14>
            be used to validate a ".onion" Special-Use Domain Name with the modifications defined in this document,
            namely those described in Sections
          <xref target="client-auth" format="counter" sectionFormat="of" derivedContent="4"/> and <xref target="caa" format="counter" sectionFormat="of" derivedContent="6"/>.</t>
          <t indent="0" pn="section-3.1.2-2">The ACME server <bcp14>SHOULD</bcp14> follow redirects. Note that these <bcp14>MAY</bcp14> be redirects to services that are not ".onion" and that the server <bcp14>SHOULD</bcp14> honor these. For example, clients might use redirects so that the response can be provided by a centralized certificate management server. See
            <xref target="RFC8555" section="10.2" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-10.2" derivedContent="RFC8555"/> for security considerations on why a server might not want to
            follow redirects.</t>
        </section>
        <section anchor="tlsalpn" numbered="true" removeInRFC="false" toc="include" pn="section-3.1.3">
          <name slugifiedName="name-existing-tls-alpn-01-challe">Existing <tt>tls-alpn-01</tt> Challenge</name>
          <t indent="0" pn="section-3.1.3-1">The <tt>tls-alpn-01</tt> challenge, as defined in <xref target="RFC8737" format="default" sectionFormat="of" derivedContent="RFC8737"/>, <bcp14>MAY</bcp14> be used to
            validate a ".onion" Special-Use Domain Name with the modifications defined in this document, namely those
            described in Sections <xref target="client-auth" format="counter" sectionFormat="of" derivedContent="4"/> and <xref target="caa" format="counter" sectionFormat="of" derivedContent="6"/>.</t>
        </section>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-3.2">
        <name slugifiedName="name-new-onion-csr-01-challenge">New <tt>onion-csr-01</tt> Challenge</name>
        <t indent="0" pn="section-3.2-1">The two ACME-defined methods allowed by CA/BF described in Sections <xref target="http01" format="counter" sectionFormat="of" derivedContent="3.1.2"/> and <xref target="tlsalpn" format="counter" sectionFormat="of" derivedContent="3.1.3"/>
          (<tt>http-01</tt> and <tt>tls-alpn-01</tt>) do not allow issuance of wildcard certificates.
          A ".onion" Special-Use Domain Name can have subdomains (just like any other domain in the DNS), and a site
          operator may find it useful to have one certificate for all virtual hosts on their site. This new validation
          method incorporates the specially signed Certificate Signing Request (CSR) (as defined by
          <xref target="cabf-br" section="B.2.b" relative="#page=124" format="default" sectionFormat="of" derivedLink="https://cabforum.org/working-groups/server/baseline-requirements/documents/CA-Browser-Forum-TLS-BR-2.0.6.pdf#page=124" derivedContent="cabf-br"/>) into ACME to allow for the issuance of
          wildcard certificates.</t>
        <t indent="0" pn="section-3.2-2">To this end, a new challenge called <tt>onion-csr-01</tt> is defined, with the following fields:</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-3.2-3">
          <dt pn="section-3.2-3.1">type (required, string):</dt>
          <dd pn="section-3.2-3.2">The string <tt>onion-csr-01</tt>.</dd>
          <dt pn="section-3.2-3.3">nonce (required, string):</dt>
          <dd pn="section-3.2-3.4">A Base64-encoded nonce <xref target="RFC4648" format="default" sectionFormat="of" derivedContent="RFC4648"/> including padding characters.
            It <bcp14>MUST</bcp14> contain at least 64 bits of entropy. A response generated  using this nonce
            <bcp14>MUST NOT</bcp14> be accepted by the ACME server if the nonce used was generated by the server more
            than 30 days prior (as per <xref target="cabf-br" section="B.2.b" relative="#page=124" format="default" sectionFormat="of" derivedLink="https://cabforum.org/working-groups/server/baseline-requirements/documents/CA-Browser-Forum-TLS-BR-2.0.6.pdf#page=124" derivedContent="cabf-br"/>).</dd>
          <dt pn="section-3.2-3.5">authKey (optional, object):</dt>
          <dd pn="section-3.2-3.6">The ACME server's Ed25519 public key encoded as per <xref target="RFC8037" format="default" sectionFormat="of" derivedContent="RFC8037"/>. This is further defined in
            <xref target="client-auth" format="default" sectionFormat="of" derivedContent="Section 4"/>.</dd>
        </dl>
        <sourcecode type="json" markers="false" pn="section-3.2-4">
{
  "type": "onion-csr-01",
  "url": "https://acme-server.example.onion/acme/chall/bbc625c5",
  "status": "pending",
  "nonce": "bI6/MRqV4gw=",
  "authKey": { ... }
}
</sourcecode>
        <t indent="0" pn="section-3.2-5">An <tt>onion-csr-01</tt> challenge <bcp14>MUST NOT</bcp14> be used to issue certificates for
          Special-Use Domain Names that are not ".onion".</t>
        <t indent="0" pn="section-3.2-6">Clients prove control over the key associated with the ".onion" service by generating a
          Certificate Request (CSR) <xref target="RFC2986" format="default" sectionFormat="of" derivedContent="RFC2986"/> with the following additional extension attributes and
          signing it with the private key of the ".onion" Special-Use Domain Name:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-3.2-7">
          <li pn="section-3.2-7.1">A <tt>caSigningNonce</tt> attribute containing the nonce provided in the challenge. This
            <bcp14>MUST</bcp14> be raw bytes and not the base64 encoded value provided in the challenge object.</li>
          <li pn="section-3.2-7.2">An <tt>applicantSigningNonce</tt> attribute containing a nonce generated by the client. This <bcp14>MUST</bcp14>
            have at least 64 bits of entropy. This <bcp14>MUST</bcp14> be raw bytes.</li>
        </ul>
        <t indent="0" pn="section-3.2-8">These additional attributes have the following format</t>
        <sourcecode type="asn.1" markers="false" pn="section-3.2-9">
cabf OBJECT IDENTIFIER ::=
  { joint-iso-itu-t(2) international-organizations(23)
    ca-browser-forum(140) }

cabf-caSigningNonce OBJECT IDENTIFIER ::= { cabf 41 }

caSigningNonce ATTRIBUTE ::= {
  WITH SYNTAX             OCTET STRING
  EQUALITY MATCHING RULE  octetStringMatch
  SINGLE VALUE            TRUE
  ID                      { cabf-caSigningNonce }
}

cabf-applicantSigningNonce OBJECT IDENTIFIER ::= { cabf 42 }

applicantSigningNonce ATTRIBUTE ::= {
  WITH SYNTAX             OCTET STRING
  EQUALITY MATCHING RULE  octetStringMatch
  SINGLE VALUE            TRUE
  ID                      { cabf-applicantSigningNonce }
}
</sourcecode>
        <t indent="0" pn="section-3.2-10">The subject of the CSR need not be meaningful and CAs <bcp14>MUST NOT</bcp14> validate its contents.
          The public key presented in this CSR <bcp14>MUST</bcp14> be the public key corresponding to the ".onion"
          Special-Use Domain Name being validated. It <bcp14>MUST NOT</bcp14> be the same public key presented in the
          CSR to finalize the order.</t>
        <t indent="0" pn="section-3.2-11">Clients respond with the following object to validate the challenge:</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-3.2-12">
          <dt pn="section-3.2-12.1">csr (required, string):</dt>
          <dd pn="section-3.2-12.2">
            The CSR in the base64url-encoded version of the DER format.
            (Note: Because this field uses base64url, and does not include headers, it is different from Privacy Enhanced Mail (PEM).)
          </dd>
        </dl>
        <sourcecode type="http" markers="false" pn="section-3.2-13">
POST /acme/chall/bbc625c5
Host: acme-server.example.onion
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid":
        "https://acme-server.example.onion/acme/acct/evOfKhNU60wg",
    "nonce": "UQI1PoRi5OuXzxuX7V7wL0",
    "url": "https://acme-server.example.onion/acme/chall/bbc625c5"
  }),
  "payload": base64url({
    "csr": "MIIBPTCBxAIBADBFMQ...FS6aKdZeGsysoCo4H9P"
  }),
  "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4"
}
</sourcecode>
        <t indent="0" pn="section-3.2-14">When presented with the CSR, the server verifies it in the following manner:</t>
        <ol indent="adaptive" spacing="normal" start="1" type="1" pn="section-3.2-15">
          <li pn="section-3.2-15.1" derivedCounter="1.">The CSR is a well formatted PKCS#10 request.</li>
          <li pn="section-3.2-15.2" derivedCounter="2.">The public key in the CSR corresponds to the ".onion" Special-Use Domain Name being validated.</li>
          <li pn="section-3.2-15.3" derivedCounter="3.">The signature over the CSR validates with the ".onion" Special-Use Domain Name public key.</li>
          <li pn="section-3.2-15.4" derivedCounter="4.">The <tt>caSigningNonce</tt> attribute is present and its contents match the nonce provided to the client.</li>
          <li pn="section-3.2-15.5" derivedCounter="5.">The <tt>applicantSigningNonce</tt> attribute is present and contains at least 64 bits of entropy.</li>
        </ol>
        <t indent="0" pn="section-3.2-16">If all of the above are successful then validation succeeds, otherwise it has failed.</t>
      </section>
    </section>
    <section anchor="client-auth" numbered="true" removeInRFC="false" toc="include" pn="section-4">
      <name slugifiedName="name-client-authentication-to-hi">Client Authentication to Hidden Services</name>
      <t indent="0" pn="section-4-1">Some Hidden Services do not wish to be accessible to the entire Tor network, and so they encrypt their Hidden
        Service Descriptor with the keys of clients authorized to connect. Without a way for the CA to signal what key
        it will use to connect, these services will not be able to obtain a certificate using <tt>http-01</tt> or
        <tt>tls-alpn-01</tt>, nor enforce CAA with any validation method.</t>
      <t indent="0" pn="section-4-2">To this end, an additional field in the challenge object is defined to allow the ACME server to advertise the
        Ed25519 public key it will use (as per the "Authentication during the introduction phase" section of
        <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>) to
        authenticate itself when retrieving the Hidden Service Descriptor.</t>
      <dl indent="3" newline="false" spacing="normal" pn="section-4-3">
        <dt pn="section-4-3.1">authKey (optional, object):</dt>
        <dd pn="section-4-3.2">The ACME server's Ed25519 public key encoded as per <xref target="RFC8037" format="default" sectionFormat="of" derivedContent="RFC8037"/>.</dd>
      </dl>
      <t indent="0" pn="section-4-4">ACME servers <bcp14>MUST NOT</bcp14> use the same public key with multiple Hidden Services.
        ACME servers <bcp14>MAY</bcp14> reuse public keys for re-validation of the same Hidden Service.</t>
      <t indent="0" pn="section-4-5">There is no method to communicate to the CA that client authentication is necessary; instead, the ACME server
        <bcp14>MUST</bcp14> attempt to calculate its CLIENT-ID as per the "Client behavior" section of
        <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>.
        If no <tt>auth-client</tt> line in the First Layer Hidden Service Descriptor matches the computed client-id,
        then the server <bcp14>MUST</bcp14> assume that the Hidden Service does not require client authentication and
        proceed accordingly.</t>
      <t indent="0" pn="section-4-6">In the case in which the Ed25519 public key is novel to the client, it will have to resign and republish its Hidden Service
        Descriptor. It <bcp14>MUST</bcp14> wait some (indeterminate) amount of time for the new descriptor to
        propagate the Tor Hidden Service directory servers before proceeding with responding to the challenge.
        This should take no more than a few minutes. This specification does not set a fixed time as changes in the
        operation of the Tor network can affect this propagation time in the future. ACME servers
        <bcp14>MUST NOT</bcp14> expire challenges before a reasonable time to allow publication of the new descriptor. It is <bcp14>RECOMMENDED</bcp14> the server allow at least 30 minutes; however, it is entirely up to operator preference.</t>
    </section>
    <section numbered="true" removeInRFC="false" toc="include" pn="section-5">
      <name slugifiedName="name-acme-over-hidden-services">ACME over Hidden Services</name>
      <t indent="0" pn="section-5-1">A CA offering certificates to ".onion" Special-Use Domain Names <bcp14>SHOULD</bcp14> make their
        ACME server available as a Tor Hidden Service. ACME clients <bcp14>SHOULD</bcp14> also support connecting to
        ACME servers over Tor, regardless of their support of <tt>onion-csr-01</tt>, as their existing <tt>http-01</tt>
        and <tt>tls-alpn-01</tt> implementations could be used to obtain certificates for ".onion" Special-Use Domain Names.</t>
    </section>
    <section anchor="caa" numbered="true" removeInRFC="false" toc="include" pn="section-6">
      <name slugifiedName="name-certification-authority-aut">Certification Authority Authorization (CAA)</name>
      <t indent="0" pn="section-6-1">".onion" Special-Use Domain Names are not part of the DNS; as such, a variation on CAA <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/>
        is necessary to allow restrictions to be placed on certificate issuance.</t>
      <t indent="0" pn="section-6-2">To this end, a new field is added to the Second Layer Hidden Service Descriptor, as defined in the "Second layer plaintext format" section of
        <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>
        with the following format (defined using the notation from the "netdoc document meta-format" section of
        <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>):</t>
      <sourcecode markers="false" pn="section-6-3">
"caa" SP flags SP tag SP value NL
[Any number of times]
</sourcecode>
      <t indent="0" pn="section-6-4">The presentation format is provided above purely for the convenience of the reader and implementors:
        the canonical version remains that defined in <xref target="RFC8659" section="4.1.1" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8659#section-4.1.1" derivedContent="RFC8659"/>,
        or future updates to the same.</t>
      <t indent="0" pn="section-6-5">The contents of "flags", "tag", and "value" are as per <xref target="RFC8659" section="4.1.1" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8659#section-4.1.1" derivedContent="RFC8659"/>.
        Multiple CAA records <bcp14>MAY</bcp14> be present, as is the case in the DNS. CAA records in a Hidden Service
        Descriptor are to be treated the same by CAs as if they had been in the DNS for the ".onion" Special-Use
        Domain Name.</t>
      <t indent="0" pn="section-6-6">A Hidden Service's Second Layer Descriptor using CAA could look something like the following
        (additional line breaks have been added for readability):</t>
      <sourcecode markers="false" pn="section-6-7">
create2-formats 2
single-onion-service
caa 128 issue "acmeforonions.example;validationmethods=onion-csr-01"
caa 0 iodef "mailto:security@example.com"
introduction-point AwAGsAk5nSMpAhRqhMHbTFCTSlfhP8f5PqUhe6DatgMgk7kSL3
        KHCZUZ3C6tXDeRfM9SyNY0DlgbF8q+QSaGKCs=
...
</sourcecode>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.1">
        <name slugifiedName="name-relevant-resource-record-se">Relevant Resource Record Set</name>
        <t indent="0" pn="section-6.1-1">In the absence of the possibility for delegation of subdomains from a ".onion" Special-Use Domain Name, as
          there is in the DNS, there is no need, nor indeed any method available, to search up the DNS tree for a
          relevant CAA record set. Similarly, it is also impossible to check CAA records on the "onion" Special-Use Top-Level Domain (TLD),
          as it does not exist in any form except as described in <xref target="RFC7686" format="default" sectionFormat="of" derivedContent="RFC7686"/>; therefore, implementors
          <bcp14>MUST NOT</bcp14> look there either.</t>
        <t indent="0" pn="section-6.1-2">Instead, all subdomains under a ".onion" Special-Use Domain Name share the same CAA record set. That is,
          all of these share a CAA record set with "a.onion":</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.1-3">
          <li pn="section-6.1-3.1">b.a.onion</li>
          <li pn="section-6.1-3.2">c.a.onion</li>
          <li pn="section-6.1-3.3">e.d.a.onion</li>
        </ul>
        <t indent="0" pn="section-6.1-4">but these do not:</t>
        <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6.1-5">
          <li pn="section-6.1-5.1">b.c.onion</li>
          <li pn="section-6.1-5.2">c.d.onion</li>
          <li pn="section-6.1-5.3">e.c.d.onion</li>
          <li pn="section-6.1-5.4">a.b.onion</li>
        </ul>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.2">
        <name slugifiedName="name-when-to-check-caa">When to Check CAA</name>
        <t indent="0" pn="section-6.2-1">If the Hidden Service has client authentication enabled, then it will be impossible for the ACME server to
          decrypt the Second Layer Hidden Service Descriptor to read the CAA records until the ACME server's public key has been added
          to the First Layer Hidden Service Descriptor. To this end, an ACME server <bcp14>MUST</bcp14> wait until the
          client responds to an authorization before checking the CAA and treat this response as an indication that
          their public key has been added and that the ACME server will be able to decrypt the Second Layer Hidden
          Service Descriptor.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.3">
        <name slugifiedName="name-preventing-mis-issuance-by-">Preventing Mis-Issuance by Unknown CAs</name>
        <t indent="0" pn="section-6.3-1">In the case of a Hidden Service requiring client authentication, the CA will be unable to read the hidden
          service's CAA records without the Hidden Service trusting an ACME server's public key -- as the CAA records are
          in the Second Layer Hidden Service Descriptor. A method is necessary to signal that there are CAA records
          present (but not reveal their contents, which, in certain circumstances, would unwantedly disclose information
          about the Hidden Service operator).</t>
        <t indent="0" pn="section-6.3-2">To this end, a new field is added to the First Layer Hidden Service Descriptor in the "First layer plaintext format" section of
          <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>
          with the following format (defined using the notation from the "netdoc document meta-format" section of
        <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>):</t>
        <sourcecode markers="false" pn="section-6.3-3">
"caa-critical" NL
[At most once]
</sourcecode>
        <t indent="0" pn="section-6.3-4">If an ACME server encounters this flag, it <bcp14>MUST NOT</bcp14> proceed with issuance until it can decrypt
          and parse the CAA records from the Second Layer Hidden Service Descriptor.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-6.4">
        <name slugifiedName="name-alternative-in-band-present">Alternative In-Band Presentation of CAA</name>
        <t indent="0" pn="section-6.4-1">An ACME server might be unwilling to operate the infrastructure required to fetch, decode, and verify Tor
          Hidden Service Descriptors in order to check CAA records. To this end a method to signal CAA policies in-band
          of ACME is defined.</t>
        <t indent="0" pn="section-6.4-2">If a Hidden Service does use this method to provide CAA records to an ACME server, it <bcp14>SHOULD</bcp14>
          still publish CAA records if its CAA record set includes "iodef", "contactemail", or "contactphone" so that
          this information is still publicly accessible. Additionally, a Hidden Service operator <bcp14>MAY</bcp14>
          not wish to publish a CAA record set in its Hidden Service Descriptor to avoid revealing information about the
          service operator.</t>
        <t indent="0" pn="section-6.4-3">If an ACME server receives a validly signed CAA record set in the finalize request, it <bcp14>MAY</bcp14>
          proceed with issuance on the basis of the client-provided CAA record set only, without checking the CAA set in
          the Hidden Service. Alternatively, an ACME server <bcp14>MAY</bcp14> ignore the client provided record set and
          fetch the record set from the Hidden Service Descriptor. In any case, the server <bcp14>MAY</bcp14> fetch the
          record set from the Hidden Service Descriptor. If an ACME server receives a validly signed CAA record set in
          the finalize request, it need not check the CAA set in the Hidden Service Descriptor and can proceed with
          issuance on the basis of the client-provided CAA record set only. An ACME server <bcp14>MAY</bcp14> ignore the
          client-provided record set and is free to always fetch the record set from the Hidden Service Descriptor.</t>
        <t indent="0" pn="section-6.4-4">A new field is defined in the ACME finalize endpoint to contain the Hidden Service's CAA record set for each
          ".onion" Special-Use Domain Name in the order.</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-6.4-5">
          <dt pn="section-6.4-5.1">onionCAA (optional, dictionary of objects):</dt>
          <dd pn="section-6.4-5.2">
            The CAA record set for each ".onion" Special-Use Domain Name in the order. The key is the ".onion"
            Special-Use Domain Name, and the value is an object with the fields described below.
          </dd>
        </dl>
        <t indent="0" pn="section-6.4-6">The contents of the values of the "onionCAA" object are as follows:</t>
        <dl indent="3" newline="false" spacing="normal" pn="section-6.4-7">
          <dt pn="section-6.4-7.1">caa (required, string or null):</dt>
          <dd pn="section-6.4-7.2">
            The CAA record set as a string, encoded in the same way as if was included in the Hidden Service Descriptor.
            If the Hidden Service does not have a CAA record set, then this <bcp14>MUST</bcp14> be null.
          </dd>
          <dt pn="section-6.4-7.3">expiry (required, integer):</dt>
          <dd pn="section-6.4-7.4">
            The Unix timestamp at which this CAA record set will expire. This <bcp14>SHOULD NOT</bcp14> be more than
            8 hours in the future. ACME servers <bcp14>MUST</bcp14> process this as at least a 64-bit integer to ensure
            functionality beyond 2038.
          </dd>
          <dt pn="section-6.4-7.5">signature (required, string):</dt>
          <dd pn="section-6.4-7.6">
            The Ed25519 signature of the CAA record set using the private key corresponding to the ".onion"
            Special-Use Domain Name, encoded using base64url. The signature is defined below.
          </dd>
        </dl>
        <t indent="0" pn="section-6.4-8">The data that the signature is calculated over is the concatenation of the following,
          encoded in UTF-8 <xref target="RFC3629" format="default" sectionFormat="of" derivedContent="RFC3629"/>:</t>
        <sourcecode markers="false" pn="section-6.4-9">"onion-caa|" || expiry || "|" || caa</sourcecode>
        <t indent="0" pn="section-6.4-10">Where "|" is the ASCII character 0x7C, and expiry is the expiry field as a decimal string with no
          leading zeros. If the caa field is null, it is represented as an empty string in the signature calculation.</t>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-6.4.1">
          <name slugifiedName="name-acme-servers-requiring-in-b">ACME Servers Requiring In-Band CAA</name>
          <t indent="0" pn="section-6.4.1-1">If an ACME server does not support fetching a service's CAA record set from its Hidden Service Descriptor,
            and the ACME client does not provide an "onionCAA" object in its finalize request, the ACME server
            <bcp14>MUST</bcp14> respond with an "onionCAARequired" error to indicate this.</t>
          <t indent="0" pn="section-6.4.1-2">To support signaling the server's support for fetching CAA record sets over Tor,
            a new field is defined in the directory "meta" object to signal this.</t>
          <dl indent="3" newline="false" spacing="normal" pn="section-6.4.1-3">
            <dt pn="section-6.4.1-3.1">inBandOnionCAARequired (optional, boolean):</dt>
            <dd pn="section-6.4.1-3.2">
              If true, the ACME server requires the client to provide the CAA record set in the finalize request.
              If false or absent, the ACME server does not require the client to provide the CAA record set is this
              manner.</dd>
          </dl>
          <t indent="0" pn="section-6.4.1-4">A directory of such a CA could look like the following:</t>
          <sourcecode type="http" markers="false" pn="section-6.4.1-5">
HTTP/1.1 200 OK
Content-Type: application/json

{
  "newNonce": "https://acme-server.example.onion/acme/new-nonce",
  "newAccount": "https://acme-server.example.onion/acme/new-account",
  "newOrder": "https://acme-server.example.onion/acme/new-order",
  "revokeCert": "https://acme-server.example.onion/acme/revoke-cert",
  "keyChange": "https://acme-server.example.onion/acme/key-change",
  "meta": {
    "termsOfService":
        "https://acme-server.example.onion/acme/terms/2023-10-13",
    "website": "https://acmeforonions.example/",
    "caaIdentities": ["acmeforonions.example"],
    "inBandOnionCAARequired": true
  }
}
</sourcecode>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-6.4.2">
          <name slugifiedName="name-example-in-band-caa">Example In-Band CAA</name>
          <t indent="0" pn="section-6.4.2-1">Given the following example CAA record set for 5anebu2glyc235wbbop3m2ukzlaptpkq333vdtdvcjpigyb7x2i2m2qd.onion
            (additional line breaks have been added for readability):</t>
          <sourcecode markers="false" pn="section-6.4.2-2">
caa 128 issue "acmeforonions.example;
            validationmethods=onion-csr-01"
caa 0 iodef "mailto:example@example.com"
</sourcecode>
          <t indent="0" pn="section-6.4.2-3">The following would be submitted to the ACME server's finalize endpoint
            (additional line breaks have been added for readability):</t>
          <sourcecode type="http" markers="false" pn="section-6.4.2-4">
POST /acme/order/TOlocE8rfgo/finalize
Host: acme-server.example.onion
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid":
        "https://acme-server.example.onion/acme/acct/evOfKhNU60wg",
    "nonce": "MSF2j2nawWHPxxkE3ZJtKQ",
    "url": "https://acme-server.example.onion/acme/order/
        TOlocE8rfgo/finalize"
  }),
  "payload": base64url({
    "csr": "MIIBPTCBxAIBADBFMQ...FS6aKdZeGsysoCo4H9P",
    "onionCAA": {
      "5anebu2glyc235wbbop3m2ukzlaptpkq333vdtdvcjpi
            gyb7x2i2m2qd.onion": {
        "caa": "caa 128 issue \"acmeforonions.example;
            validationmethods=onion-csr-01\"\n
            caa 0 iodef \"mailto:example@example.com\"",
        "expiry": 1697210719,
        "signature": "u_iP6JZ4JZBrzQUKH6lSrWejjRfeQmkTuehc0_FaaTNP
            AV0RVxpUz9r44DRdy6kgy0ofnx18KIhMrP7N1wpxAA=="
      }
    }
  }),
  "signature": "uOrUfIIk5RyQ...nw62Ay1cl6AB"
}
</sourcecode>
        </section>
      </section>
    </section>
    <section anchor="IANA" numbered="true" removeInRFC="false" toc="include" pn="section-7">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-7.1">
        <name slugifiedName="name-validation-methods">Validation Methods</name>
        <t indent="0" pn="section-7.1-1">One new entry has been added to the "ACME Validation Methods" registry that was defined in
          <xref target="RFC8555" section="9.7.8" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-9.7.8" derivedContent="RFC8555"/>
          (<eref brackets="angle" target="https://www.iana.org/assignments/acme"/>).</t>
        <table align="center" pn="table-1">
          <name slugifiedName="name-onion-csr-01-validation-met">onion-csr-01 Validation Method</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Label</th>
              <th align="left" colspan="1" rowspan="1">Identifier Type</th>
              <th align="left" colspan="1" rowspan="1">ACME</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">onion-csr-01</td>
              <td align="left" colspan="1" rowspan="1">dns</td>
              <td align="left" colspan="1" rowspan="1">Y</td>
              <td align="left" colspan="1" rowspan="1">RFC 9799</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-7.2">
        <name slugifiedName="name-error-types">Error Types</name>
        <t indent="0" pn="section-7.2-1">One new entry has been added to the "ACME Error Types" registry that was defined in
          <xref target="RFC8555" section="9.7.4" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-9.7.4" derivedContent="RFC8555"/>
          (<eref brackets="angle" target="https://www.iana.org/assignments/acme"/>).</t>
        <table align="center" pn="table-2">
          <name slugifiedName="name-onioncaarequired-error-type">onionCAARequired Error Type</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Type</th>
              <th align="left" colspan="1" rowspan="1">Description</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">onionCAARequired</td>
              <td align="left" colspan="1" rowspan="1">The CA only supports checking the CAA for Hidden Services in-band, but the client has not provided an
                in-band CAA</td>
              <td align="left" colspan="1" rowspan="1">RFC 9799</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-7.3">
        <name slugifiedName="name-directory-metadata-fields">Directory Metadata Fields</name>
        <t indent="0" pn="section-7.3-1">One new entry has been added to the "ACME Directory Metadata Fields" registry that was defined in
          <xref target="RFC8555" section="9.7.6" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-9.7.6" derivedContent="RFC8555"/>
          (<eref brackets="angle" target="https://www.iana.org/assignments/acme"/>).</t>
        <table align="center" pn="table-3">
          <name slugifiedName="name-onioncaarequired-metadata-f">onionCAARequired Metadata Field</name>
          <thead>
            <tr>
              <th align="left" colspan="1" rowspan="1">Field name</th>
              <th align="left" colspan="1" rowspan="1">Field type</th>
              <th align="left" colspan="1" rowspan="1">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left" colspan="1" rowspan="1">onionCAARequired</td>
              <td align="left" colspan="1" rowspan="1">boolean</td>
              <td align="left" colspan="1" rowspan="1">RFC 9799</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="Security" numbered="true" removeInRFC="false" toc="include" pn="section-8">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.1">
        <name slugifiedName="name-security-of-the-onion-csr-0">Security of the <tt>onion-csr-01</tt> Challenge</name>
        <t indent="0" pn="section-8.1-1">The security considerations of <xref target="cabf-br" format="default" sectionFormat="of" derivedContent="cabf-br"/> apply to issuance using the Certificate Request method.</t>
      </section>
      <section anchor="security-id-dns" numbered="true" removeInRFC="false" toc="include" pn="section-8.2">
        <name slugifiedName="name-use-of-the-dns-identifier-t">Use of the "dns" Identifier Type</name>
        <t indent="0" pn="section-8.2-1">The reuse of the "dns" identifier type for a Special-Use Domain Name not actually in the DNS infrastructure
          raises questions regarding its suitability. The reasons to pursue this path in the first place are detailed in
          <xref target="use-of-id-dns" format="default" sectionFormat="of" derivedContent="Appendix A"/>. It is felt that there is little security concern in reuse of the "dns"
          identifier type with regard to the mis-issuance by CAs that are not aware of ".onion"
          Special-Use Domain Names as CAs would not be able to resolve the identifier in the DNS.</t>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-8.2.1">
          <name slugifiedName="name-http-01-challenge"><tt>http-01</tt> Challenge</name>
          <t indent="0" pn="section-8.2.1-1">In the absence of knowledge of this document, a CA would follow the procedure set out in
            <xref target="RFC8555" section="8.3" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-8.3" derivedContent="RFC8555"/>, which specifies that the CA should "Dereference the URL using an
            HTTP GET request". Given that ".onion" Special-Use Domain Names require special handling to dereference,
            this dereferencing will fail, disallowing issuance.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-8.2.2">
          <name slugifiedName="name-tls-alpn-01-challenge"><tt>tls-alpn-01</tt> Challenge</name>
          <t indent="0" pn="section-8.2.2-1">In the absence of knowledge of this document, a CA would follow the procedure set out in
            <xref target="RFC8737" section="3" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8737#section-3" derivedContent="RFC8737"/>, which specifies that the CA "resolves the domain name being validated
            and chooses one of the IP addresses returned for validation". Given that ".onion" Special-Use Domain Names
            are not resolvable to IP addresses, this dereferencing will fail, disallowing issuance.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-8.2.3">
          <name slugifiedName="name-dns-01-challenge"><tt>dns-01</tt> Challenge</name>
          <t indent="0" pn="section-8.2.3-1">In the absence of knowledge of this document, a CA would follow the procedure set out in
            <xref target="RFC8555" section="8.4" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-8.4" derivedContent="RFC8555"/>, which specifies that the CA should "query for TXT records for the
            validation domain name". Given that ".onion" Special-Use Domain Names are not present in the DNS
            infrastructure, this query will fail, disallowing issuance.</t>
        </section>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.3">
        <name slugifiedName="name-key-authorization-with-onio">Key Authorization with <tt>onion-csr-01</tt></name>
        <t indent="0" pn="section-8.3-1">The <tt>onion-csr-01</tt> challenge does not make use of the key authorization string defined in
          <xref target="RFC8555" section="8.1" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc8555#section-8.1" derivedContent="RFC8555"/>. This does not weaken the integrity of authorizations.</t>
        <t indent="0" pn="section-8.3-2">The key authorization exists to ensure that, whilst an attacker observing the validation channel can observe
          the correct validation response, they cannot compromise the integrity of authorizations as the response
          can only be used with the account key for which it was generated. As the validation channel for this challenge
          is ACME itself, and ACME already requires that the request be signed by the account, the key authorization is
          not necessary.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.4">
        <name slugifiedName="name-use-of-tor-for-domains-that">Use of Tor for Domains That Are Not ".onion"</name>
        <t indent="0" pn="section-8.4-1">An ACME server <bcp14>MUST NOT</bcp14> utilize Tor for the validation of domains that are not ".onion", due to the
          risk of exit hijacking <xref target="spoiled-onions" format="default" sectionFormat="of" derivedContent="spoiled-onions"/>.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.5">
        <name slugifiedName="name-redirects-with-http-01">Redirects with <tt>http-01</tt></name>
        <t indent="0" pn="section-8.5-1">A site <bcp14>MAY</bcp14> redirect to another site when completing validation using the <tt>http-01</tt>
          challenge. This redirect <bcp14>MAY</bcp14> be to either another ".onion" Special-Use Domain Name or a domain
          in the public DNS. A site operator <bcp14>MUST</bcp14> consider the privacy implications of redirecting to a
          site that is not ".onion" -- namely that the ACME server operator will then be able to learn information about
          the site they were redirected to that they would not have if accessed via a ".onion" Special-Use Domain Name,
          such as its IP address. If the site redirected to is on the same or an adjacent host to the ".onion"
          Special-Use Domain Name, this reveals information that the "Tor Rendezvous Specification - Version 3" section of <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/> was otherwise designed to protect.</t>
        <t indent="0" pn="section-8.5-2">If an ACME server receives a redirect to a domain in the public DNS, it <bcp14>MUST NOT</bcp14> utilize Tor
          to make a connection to it due to the risk of exit hijacking.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.6">
        <name slugifiedName="name-security-of-caa-records">Security of CAA Records</name>
        <t indent="0" pn="section-8.6-1">The Second Layer Hidden Service Descriptor is signed, encrypted, and encoded using a Message Authentication
          Code (MAC) in a way that only a party with access to the secret key of the Hidden Service could manipulate
          what is published there. For more information about this process, see the
          "Hidden service descriptors: encryption format" section of <xref target="tor-spec" format="default" sectionFormat="of" derivedContent="tor-spec"/>.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.7">
        <name slugifiedName="name-in-band-caa">In-Band CAA</name>
        <t indent="0" pn="section-8.7-1">Tor directory servers are inherently untrusted entities. As such, there is no difference in the security model for accepting CAA records directly from the ACME client or fetching them over Tor: the CAA records are verified using the same hidden service key in either case.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.8">
        <name slugifiedName="name-access-of-the-tor-network">Access of the Tor Network</name>
        <t indent="0" pn="section-8.8-1">The ACME server <bcp14>MUST</bcp14> make its own connection to the Hidden Service via the Tor network
          and <bcp14>MUST NOT</bcp14> outsource this to a third-party service, such as Tor2Web.</t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-8.9">
        <name slugifiedName="name-anonymity-of-the-acme-clien">Anonymity of the ACME Client</name>
        <t indent="0" pn="section-8.9-1">ACME clients requesting certificates for ".onion" Special-Use Domain Names not over the Tor network can
          inadvertently expose the existence of a Hidden Service on the host requesting
          certificates to unintended parties; this is true even when features such as Encrypted ClientHello (ECH) <xref target="I-D.ietf-tls-esni" format="default" sectionFormat="of" derivedContent="tls-esni"/> are
          utilized, as the IP addresses of ACME servers are generally well-known, static, and not used for any other
          purpose.</t>
        <t indent="0" pn="section-8.9-2">ACME clients <bcp14>SHOULD</bcp14> connect to ACME servers over the Tor network to alleviate this, preferring
        a Hidden Service endpoint if the CA provides such a service.</t>
        <t indent="0" pn="section-8.9-3">If an ACME client requests a publicly trusted WebPKI certificate, it will expose the existence of the Hidden
          Service publicly due to its inclusion in Certificate Transparency logs <xref target="RFC9162" format="default" sectionFormat="of" derivedContent="RFC9162"/>. Hidden Service
          operators <bcp14>MUST</bcp14> consider the privacy implications of this before requesting WebPKI
          certificates. ACME client developers <bcp14>SHOULD</bcp14> warn users about the risks of CT-logged
          certificates for Hidden Services.</t>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-8.9.1">
          <name slugifiedName="name-avoid-unnecessary-certifica">Avoid Unnecessary Certificates</name>
          <t indent="0" pn="section-8.9.1-1">Not all services will need a publicly trusted WebPKI certificate; for internal or non-public services,
            operators <bcp14>SHOULD</bcp14> consider using self-signed or privately trusted certificates that aren't
            logged to certificate transparency.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-8.9.2">
          <name slugifiedName="name-obfuscate-subscriber-inform">Obfuscate Subscriber Information</name>
          <t indent="0" pn="section-8.9.2-1">When an ACME client is registering with an ACME server, it <bcp14>SHOULD</bcp14> provide minimal or obfuscated
            subscriber details to the CA, such as a pseudonymous email address, if at all possible.</t>
        </section>
        <section numbered="true" removeInRFC="false" toc="include" pn="section-8.9.3">
          <name slugifiedName="name-separate-acme-account-keys">Separate ACME Account Keys</name>
          <t indent="0" pn="section-8.9.3-1">If a Hidden Service operator does not want their different Hidden Services to be correlated by a CA, they
            <bcp14>MUST</bcp14> use separate ACME account keys for each Hidden Service.</t>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-tls-esni" to="tls-esni"/>
    <references pn="section-9">
      <name slugifiedName="name-references">References</name>
      <references pn="section-9.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC2986" target="https://www.rfc-editor.org/info/rfc2986" quoteTitle="true" derivedAnchor="RFC2986">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t indent="0">This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </reference>
        <reference anchor="RFC4648" target="https://www.rfc-editor.org/info/rfc4648" quoteTitle="true" derivedAnchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t indent="0">This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC7686" target="https://www.rfc-editor.org/info/rfc7686" quoteTitle="true" derivedAnchor="RFC7686">
          <front>
            <title>The ".onion" Special-Use Domain Name</title>
            <author fullname="J. Appelbaum" initials="J." surname="Appelbaum"/>
            <author fullname="A. Muffett" initials="A." surname="Muffett"/>
            <date month="October" year="2015"/>
            <abstract>
              <t indent="0">This document registers the ".onion" Special-Use Domain Name.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7686"/>
          <seriesInfo name="DOI" value="10.17487/RFC7686"/>
        </reference>
        <reference anchor="RFC8037" target="https://www.rfc-editor.org/info/rfc8037" quoteTitle="true" derivedAnchor="RFC8037">
          <front>
            <title>CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)</title>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t indent="0">This document defines how to use the Diffie-Hellman algorithms "X25519" and "X448" as well as the signature algorithms "Ed25519" and "Ed448" from the IRTF CFRG elliptic curves work in JSON Object Signing and Encryption (JOSE).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8037"/>
          <seriesInfo name="DOI" value="10.17487/RFC8037"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="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 indent="0">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="RFC8555" target="https://www.rfc-editor.org/info/rfc8555" quoteTitle="true" derivedAnchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t indent="0">Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC8659" target="https://www.rfc-editor.org/info/rfc8659" quoteTitle="true" derivedAnchor="RFC8659">
          <front>
            <title>DNS Certification Authority Authorization (CAA) Resource Record</title>
            <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <date month="November" year="2019"/>
            <abstract>
              <t indent="0">The Certification Authority Authorization (CAA) DNS Resource Record allows a DNS domain name holder to specify one or more Certification Authorities (CAs) authorized to issue certificates for that domain name. CAA Resource Records allow a public CA to implement additional controls to reduce the risk of unintended certificate mis-issue. This document defines the syntax of the CAA record and rules for processing CAA records by CAs.</t>
              <t indent="0">This document obsoletes RFC 6844.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8659"/>
          <seriesInfo name="DOI" value="10.17487/RFC8659"/>
        </reference>
        <reference anchor="RFC8737" target="https://www.rfc-editor.org/info/rfc8737" quoteTitle="true" derivedAnchor="RFC8737">
          <front>
            <title>Automated Certificate Management Environment (ACME) TLS Application-Layer Protocol Negotiation (ALPN) Challenge Extension</title>
            <author fullname="R.B. Shoemaker" initials="R.B." surname="Shoemaker"/>
            <date month="February" year="2020"/>
            <abstract>
              <t indent="0">This document specifies a new challenge for the Automated Certificate Management Environment (ACME) protocol that allows for domain control validation using TLS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8737"/>
          <seriesInfo name="DOI" value="10.17487/RFC8737"/>
        </reference>
        <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629" quoteTitle="true" derivedAnchor="RFC3629">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t indent="0">ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="tor-spec" target="https://spec.torproject.org" quoteTitle="true" derivedAnchor="tor-spec">
          <front>
            <title>Tor Specifications</title>
            <author>
              <organization showOnFrontPage="true">The Tor Project</organization>
            </author>
          </front>
        </reference>
        <reference anchor="tor-rend-spec-v2" target="https://spec.torproject.org/rend-spec-v2" quoteTitle="true" derivedAnchor="tor-rend-spec-v2">
          <front>
            <title>Tor Rendezvous Specification - Version 2</title>
            <author>
              <organization showOnFrontPage="true">The Tor Project</organization>
            </author>
          </front>
          <refcontent>commit 2437d19c</refcontent>
        </reference>
        <reference anchor="cabf-br" target="https://cabforum.org/working-groups/server/baseline-requirements/documents/CA-Browser-Forum-TLS-BR-2.0.6.pdf" quoteTitle="true" derivedAnchor="cabf-br">
          <front>
            <title>Baseline Requirements for the Issuance and Management of Publicly-Trusted TLS Server Certificates</title>
            <author>
              <organization showOnFrontPage="true">CA/Browser Forum</organization>
            </author>
            <date day="5" month="August" year="2024"/>
          </front>
          <refcontent>Version 2.0.6</refcontent>
        </reference>
      </references>
      <references pn="section-9.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="onion-services-setup" target="https://community.torproject.org/onion-services/setup/" quoteTitle="true" derivedAnchor="onion-services-setup">
          <front>
            <title>Set Up Your Onion Service</title>
            <author>
              <organization showOnFrontPage="true">The Tor Project</organization>
            </author>
          </front>
        </reference>
        <reference anchor="spoiled-onions" quoteTitle="true" target="https://doi.org/10.1007/978-3-319-08506-7_16" derivedAnchor="spoiled-onions">
          <front>
            <title>Spoiled Onions: Exposing Malicious Tor Exit Relays</title>
            <author fullname="Philipp Winter"/>
            <author fullname="Richard Köwer"/>
            <author fullname="Martin Mulazzani"/>
            <author fullname="Markus Huber"/>
            <author fullname="Sebastian Schrittwieser"/>
            <author fullname="Stefan Lindskog"/>
            <author fullname="Edgar Weippl"/>
            <date year="2014"/>
          </front>
          <refcontent>Privacy Enhancing Technologies (PETS 2014), Lecture Notes in Computer Science, vol. 8555, pp. 304-331</refcontent>
          <seriesInfo name="DOI" value="10.1007/978-3-319-08506-7_16"/>
        </reference>
        <reference anchor="I-D.ietf-tls-esni" target="https://datatracker.ietf.org/doc/html/draft-ietf-tls-esni-25" quoteTitle="true" derivedAnchor="tls-esni">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization showOnFrontPage="true">Independent</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization showOnFrontPage="true">Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization showOnFrontPage="true">Cryptography Consulting LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization showOnFrontPage="true">Cloudflare</organization>
            </author>
            <date day="14" month="June" year="2025"/>
            <abstract>
              <t indent="0">This document describes a mechanism in Transport Layer Security (TLS) for encrypting a ClientHello message under a server public key. Discussion Venues This note is to be removed before publishing as an RFC. Source for this draft and an issue tracker can be found at https://github.com/tlswg/draft-ietf-tls-esni (https://github.com/tlswg/draft-ietf-tls-esni).</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-25"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC9162" target="https://www.rfc-editor.org/info/rfc9162" quoteTitle="true" derivedAnchor="RFC9162">
          <front>
            <title>Certificate Transparency Version 2.0</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="E. Messeri" initials="E." surname="Messeri"/>
            <author fullname="R. Stradling" initials="R." surname="Stradling"/>
            <date month="December" year="2021"/>
            <abstract>
              <t indent="0">This document describes version 2.0 of the Certificate Transparency (CT) protocol for publicly logging the existence of Transport Layer Security (TLS) server certificates as they are issued or observed, in a manner that allows anyone to audit certification authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t indent="0">This document obsoletes RFC 6962. It also specifies a new TLS extension that is used to send various CT log artifacts.</t>
              <t indent="0">Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9162"/>
          <seriesInfo name="DOI" value="10.17487/RFC9162"/>
        </reference>
      </references>
    </references>
    <section anchor="use-of-id-dns" numbered="true" removeInRFC="false" toc="include" pn="section-appendix.a">
      <name slugifiedName="name-discussion-on-the-use-of-th">Discussion on the Use of the "dns" Identifier Type</name>
      <t indent="0" pn="section-appendix.a-1">The reasons for utilizing the "dns" identifier type in ACME and not defining a new identifier type for
        ".onion" may not seem obvious at first glance. After all, ".onion" Special-Use Domain
        Names are not part of the DNS infrastructure and, as such, why should they use the "dns" identifier type?</t>
      <t indent="0" pn="section-appendix.a-2"><xref target="cabf-br" section="B.2.a.ii" relative="#page=124" format="default" sectionFormat="of" derivedLink="https://cabforum.org/working-groups/server/baseline-requirements/documents/CA-Browser-Forum-TLS-BR-2.0.6.pdf#page=124" derivedContent="cabf-br"/> defines, and this document allows,
        using the <tt>http-01</tt> or <tt>tls-alpn-01</tt> validation methods already present in ACME (with some
        considerations). Given the situation of a web server placed behind a Tor-terminating proxy (as per the setup
        suggested by the Tor project <xref target="onion-services-setup" format="default" sectionFormat="of" derivedContent="onion-services-setup"/>), existing ACME tooling can be blind to the
        fact that a ".onion" Special-Use Domain Name is being utilized, as they simply receive an incoming TCP
        connection as they would regardless (albeit from the Tor-terminating proxy).</t>
      <t indent="0" pn="section-appendix.a-3">An example of this would be Certbot placing the ACME challenge response file in the webroot of an NGINX web
        server. Neither Certbot nor NGINX would require any modification to be aware of any special handling for
        ".onion" Special-Use Domain Names.</t>
      <t indent="0" pn="section-appendix.a-4">This does raise some questions regarding security within existing implementations; however, the authors believe
        this is of little concern, as per <xref target="security-id-dns" format="default" sectionFormat="of" derivedContent="Section 8.2"/>.</t>
    </section>
    <section anchor="Acknowledgements" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.b-1">With thanks to the Open Technology Fund for funding the work that went into this document.</t>
      <t indent="0" pn="section-appendix.b-2">The authors also wish to thank the following for their input on this document:</t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-appendix.b-3">
        <li pn="section-appendix.b-3.1">
          <t indent="0" pn="section-appendix.b-3.1.1"><contact fullname="Iain Learmonth"/></t>
        </li>
        <li pn="section-appendix.b-3.2">
          <t indent="0" pn="section-appendix.b-3.2.1"><contact fullname="Jan-Frederik Rieckers"/></t>
        </li>
      </ul>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author fullname="Q Misell" role="editor" surname="Misell">
        <organization abbrev="AS207960" showOnFrontPage="true">AS207960 Cyfyngedig</organization>
        <address>
          <postal>
            <street>13 Pen-y-lan Terrace</street>
            <city>Caerdydd</city>
            <code>CF23 9EU</code>
            <country>United Kingdom</country>
          </postal>
          <email>q@as207960.net</email>
          <email>q@magicalcodewit.ch</email>
          <uri>https://magicalcodewit.ch</uri>
        </address>
      </author>
    </section>
  </back>
</rfc>
