<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" ipr="trust200902" docName="draft-tweedale-acme-discovery-01" submissionType="IETF" category="std" xml:lang="en" consensus="true" sortRefs="true">
  <front>
    <title abbrev="ACME-SD">Automated Certificate Management Environment (ACME) Service Discovery</title>
    <seriesInfo value="draft-tweedale-acme-discovery-01" stream="IETF" status="standard" name="Internet-Draft"/>
    <author initials="F." surname="Tweedale" fullname="Fraser Tweedale">
      <organization>Red Hat</organization>
      <address>
        <postal>
          <street/>
        </postal>
        <email>ftweedal@redhat.com</email>
      </address>
    </author>
    <date/>
    <area>Internet</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a DNS-based Service Discovery (DNS-SD)
profile that enables Automated Certificate Management Environment
(ACME) clients to locate ACME servers in their network environment.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Automatic Certificate Management Environment <xref target="RFC8555"/>
specifies a protocol by which a client may, in an automatable way,
prove control of identifiers and obtain a certificate from an
Certificate Authority (the ACME server).  However, it did not
specify a mechanism by which a client can locate a suitable ACME
server.  It is assumed that a client will be configured to use a
particular ACME server, or else default to some well known, publicly
accessible ACME service.</t>
      <t>In some environments, such as corporate networks, it may be
impossible for ACME clients to obtain certificates from a publicly
accessible ACME servers, or an organisation may prefer clients to
use a particular server.  Explicitly configuring ACME clients to use
a particular ACME server presents an administrative burden.
Furthermore, a service discovery mechanism could allow newly
connected systems to opportunistically locate an ACME server and
acquire certificates, without operator (human or otherwise)
intervention.</t>
      <t>This document specifies a mechanism by which ACME clients can locate
an ACME server using DNS-Based Service Discovery <xref target="RFC6763"/>.
Network administrators can advertise one or more ACME servers and
express their endorsed capabilities (identifier types and validation
methods) and priorities.  Capable clients can discover the
advertised services and use the most preferred service that
satisfies its requirements and is reachable.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>
    </section>
    <section anchor="dns-sd-profile">
      <name>DNS-SD Profile</name>
      <section anchor="service-instance-name">
        <name>Service Instance Name</name>
        <t>A DNS-SD Service Instance Name has the form:</t>
        <t>&lt;Instance&gt; . &lt;Service&gt; . &lt;Domain&gt;</t>
        <t>The &lt;Service&gt; portion of the Service Instance Name SHALL be
"_acme-server._tcp".</t>
        <t>The &lt;Instance&gt; portion of the Service Instance Name MAY be arbitrary
<xref target="RFC5198"/> text.  That is, this specification does not
further constrain what is allowed by <xref target="RFC6763"/>.</t>
      </section>
      <section anchor="ptr-records-service-instance-enumeration">
        <name>PTR Records (Service Instance Enumeration)</name>
        <t>ACME clients discover ACME service instances by querying DNS PTR
<xref target="RFC1035"/> records with the name "_acme-server._tcp.&lt;Domain&gt;",
where &lt;Domain&gt; is a "parent domain" <xref target="RFC8552"/> known to or derived
by the client.  Network administrators enable ACME Service Discovery
by creating such PTR records.</t>
        <t>The target of each PTR record MUST be an ACME Service Instance Name,
which MUST have the same &lt;Service&gt; portion.  The Service Instance
Name SHOULD have the same &lt;Domain&gt; portion as the PTR owner name.
Administrators should delegate Service Instance Resolution to other
domains with caution; doing so may remove control of service
priorities and capability endorsement to a third party.  Clients
MUST ignore a Service Instance Name if its &lt;Domain&gt; portion differs
from the &lt;Domain&gt; portion owner of the PTR record, unless explicitly
configured otherwise.</t>
      </section>
      <section anchor="srv-records">
        <name>SRV Records</name>
        <t>Each ACME service, identified by its Service Instance Name, MUST
have an SRV <xref target="RFC2782"/> record giving the domain name and TCP port
where an ACME server may be found.  Each service instance SHOULD
have exactly one SRV record.</t>
        <t>This specification alters the semantics of the SRV priority field
from that given by <xref target="RFC2782"/> and <xref target="RFC6763"/>.  For ACME Service
Discovery, the scope of the SRV priority field is the set of all SRV
records for all Service Instance Names enumerated for the parent
domain.  This allows network administrators to establish an order of
preference among multiple distinct ACME service instance.</t>
        <t>Because of the altered semantics of the SRV priority field,
implementers SHALL ignore the recommendation of <xref target="RFC6763"/> that
where a single service instance is described by exactly one SRV
record, the priority and weight fields of the SRV record should be
set to zero.</t>
      </section>
      <section anchor="txt-records">
        <name>TXT Records</name>
        <t>Each ACME service, identified by its Service Instance Name, MUST
have a TXT <xref target="RFC1035"/> record giving additional data about the
service.  Each service instance SHOULD have exactly one TXT record.</t>
        <t>The TXT record MUST be structured according to <xref target="RFC6763"/>
Section 6.  Attributes and their interpretations are set out in the
following subsections.  The order of the attributes in the TXT
record is insignificant.</t>
        <section anchor="path-attribute-acme-directory-path">
          <name>"path" attribute (ACME Directory Path)</name>
          <t>The "path" attribute gives the path at which the ACME directory
resource is located on the HTTP server identified by the service
instance's SRV record.  The attribute value MUST be a valid
<xref target="RFC3986"/>. This attribute is REQUIRED.</t>
        </section>
        <section anchor="i-attribute-acme-identifier-types">
          <name>"i" attribute (ACME Identifier Types)</name>
          <t>The "i" attribute gives a list of ACME identifier types supported by
the service.  Its value MUST be a comma-separated list of ACME
identifier types, without whitespace.  The list MAY be empty, and
SHOULD only include values registered in the IANA ACME Identifier
Type registry <xref target="IANA-ACME-ID"/>.</t>
          <t>The list of identifier types MAY be a subset of the identifier types
actually supported by the ACME server.  As such, this attribute
constitutes the network administrators' endorsement to use the
service instance for the listed identifier types only, but does not
offer a means of enforcement.  Clients MUST ignore services whose
"i" attribute does not list the identifier type(s) they require.</t>
          <t>The "i" attribute is REQUIRED.  An empty list of identifier means
that the network administrators acknowledge the presense of the ACME
service, but do not endorse its use.  Clients MUST ignore a service
instance if its "i" attribute is not present, or present with no
value, or present with an empty value.</t>
        </section>
        <section anchor="v-attribute-acme-validation-methods">
          <name>"v" attribute (ACME Validation Methods)</name>
          <t>The "v" attribute gives a list of ACME validation methods (also
called "challenge types") supported by the service.  Its value MUST
be a comma-separated list of ACME validation methods, without
whitespace.  The list MAY be empty, and SHOULD only include values
registered in the IANA ACME Validation Methods registry
<xref target="IANA-ACME-VAL"/>.</t>
          <t>The list of validation methods MAY be a subset of the validation
methods actually supported by the ACME server.  As such, this
attribute constitutes the network administrators' endorsement to use
only the listed validation methods with this service, but does not
offer a means of enforcement.</t>
          <t>The "v" attribute is OPTIONAL.  If the "v" attribute is present with
a value (including an empty value), and that value does not include
a validation method the client is capable and willing to use, the
client MUST ignore the service instance.  If the "v" attribute is
present with no value, the client MUST regard it as having an empty
value.  If the "v" value is not present, the service is implicitly
endorsed for all validation methods; the client SHALL assume that
the server will support a validation method that the client is
capable and willing to use.</t>
        </section>
      </section>
      <section anchor="examples">
        <name>Examples</name>
        <t>An organisation operates a corporate ACME server
"<eref target="https://ca.corp.example/acme&quot;">https://ca.corp.example/acme"</eref> for issuing both TLS server
certificates (identifier type "dns") and user S/MIME certificates
(identifier type "email").</t>
        <t>In case their own ACME service cannot be reached, the administrators
will advise clients to fall back to the public "Certs 4 All" service
at "<eref target="https://certs4all.example/acme/v2&quot;">https://certs4all.example/acme/v2"</eref>.  This service only supports
"dns" identifiers.</t>
        <t>The following DNS configuration achieves these goals:</t>
        <artwork>$ORIGIN corp.example.

_acme-server._tcp PTR CorpCA._acme-server._tcp
_acme-server._tcp PTR C4A._acme-server._tcp

CorpCA._acme-server._tcp SRV 10 0 443 ca.corp.example.
CorpCA._acme-server._tcp TXT "path=/acme" "i=email,dns"

C4A._acme-server._tcp    SRV 20 0 443 certs4all.example.
C4A._acme-server._tcp    TXT "path=/acme/v2" "i=dns"
</artwork>
        <t>Note that the "CorpCA" SRV priority of 10 ensures that "dns" clients
will first attempt to use the "CorpCA" service.  If "CorpCA" is
unavailable they will try "C4A", which has an SRV priority of 20.</t>
      </section>
    </section>
    <section anchor="client-behaviour">
      <name>Client Behaviour</name>
      <section anchor="when-to-perform-service-discovery">
        <name>When to Perform Service Discovery</name>
        <t>If an ACME client provides for explicit configuration of an ACME
server, and such configuration is provided, the client MUST use the
configured ACME server and MUST NOT perform service discovery.</t>
        <t>Otherwise, if an ACME client supports service discovery, in the
absense of explicit configuration of an ACME server the client MAY
attempt to locate an ACME server using the mechanisms specified in
this document.  A client MAY refuse to perform service discovery
unless its configuration explicitly enables it.</t>
      </section>
      <section anchor="candidate-parent-domains">
        <name>Candidate Parent Domains</name>
        <t>To perform service discovery, the ACME client needs a prioritised
list of candidate parent domains.  The client will perform DNS-Based
Service Discovery in each parent domain until a suitable service is
found, or the list is exhausted.</t>
        <t>If an ACME client provides for explicit configuration of parent
domains to use for service discovery, and such configuration is
provided, the candidate parent domains SHALL be the configured
values.</t>
        <t>Otherwise, there are a variety of ways an ACME client could choose
candidate parent domains, including:</t>
        <ul>
          <li>
            <t>The host's fully-qualified domain name with one or more labels
removed from the left.</t>
          </li>
          <li>
            <t>The "search" domains from the host's DNS configuration.</t>
          </li>
          <li>
            <t>The Kerberos <xref target="RFC4120"/> realm of the host.</t>
          </li>
          <li>
            <t>The result of a PTR lookup on one of the host's non-loopback IP
addresses, with one or more labels removed from the left.</t>
          </li>
        </ul>
        <t>An ACME client MAY use any or all of these or other suitable methods
for identifying candidate parent domains.  If multiple candidate
parent domains are identified the client MUST establish an order of
preference among them.  If any candidate parent domain A is a
subdomain of another candidate parent domain B, the client MUST
preference A higher than B.</t>
      </section>
      <section anchor="dns-sd-queries-and-validation">
        <name>DNS-SD Queries and Validation</name>
        <t>Service discovery begins with the most preferred candidate parent
domain.  For each candidate parent domain, the client performs
DNS-SD Service Instance Enumeration and Service Instance Resolution
until a suitable server is found, or the candidate parent domains
are exhausted.</t>
        <section anchor="service-instance-enumeration">
          <name>Service Instance Enumeration</name>
          <t>The ACME client SHALL query the DNS PTR records for
"&lt;Service&gt;.&lt;Domain&gt;" where &lt;Service&gt; is "_acme-server._tcp" and
&lt;Domain&gt; is the candidate parent domain name.  For each record
returned, the client SHALL verify that the target is an ACME Service
Instance Name, i.e. that is has the form:</t>
          <artwork>&lt;Instance&gt;.&lt;Service&gt;.&lt;TargetDomain&gt;
</artwork>
          <t>where instance is arbitrary Net-Unicode text, and SHALL ignore
targets that are not valid ACME Service Instance Names.</t>
          <t>If &lt;TargetDomain&gt; is different from &lt;Domain&gt;, the network
administrator of &lt;Domain&gt; has delegated control of the location,
priority and service attributes of the service instance to
&lt;TargetDomain&gt;, which may be a third party.  Clients MUST ignore a
Service Instance Name if its &lt;Domain&gt; portion differs from the
&lt;Domain&gt; portion owner of the PTR record, unless explicitly
configured otherwise.</t>
        </section>
        <section anchor="service-instance-resolution">
          <name>Service Instance Resolution</name>
          <t>The ACME client now has a set of ACME Service Instance Names.  For
each ACME Service Instance Name, the client SHALL query the SRV and
TXT records for that name, and collect the results as (SRV,TXT)
pairs.  The client could do this sequentially, or with some degree
of concurrency.  The client SHALL ignore any service instance that
is missing either the SRV or TXT record (or both).  Although each
service instance SHOULD have exactly one SRV record and exactly TXT
record, if multiple SRV and/or multiple TXT records are returned,
the client SHALL use the cartesian product of these.</t>
          <t>The client MUST exclude any service instances whose TXT "path"
attribute is missing or invalid, or whose "i" or "v" attributes do
not contain acceptable values.</t>
        </section>
        <section anchor="verifying-the-server">
          <name>Verifying the Server</name>
          <t>The client now has a list of suitable ACME service instances
represented as (SRV,TXT) pairs.  The client SHALL attempt to contact
servers in an order determined by the SRV priority and weight
fields, according to <xref target="RFC2782"/>.</t>
          <t>For each attempt, the client SHALL construct the URI:</t>
          <artwork>https://&lt;Target&gt;:&lt;Port&gt;&lt;Path&gt;
</artwork>
          <t>where &lt;Target&gt; is the SRV target, &lt;Port&gt; is the SRV port value and
&lt;Path&gt; is the value of the TXT "path" attribute.  If the SRV value
is 443 the client MAY omit ":&lt;Port&gt;".  The client SHALL perform an
HTTPS <xref target="RFC7230"/> GET request for this URI and SHALL attempt to
parse the response body as an ACME directory object.  If successful,
service discovery has succeeded; the client SHALL use the
constructed URI as the ACME server, and SHOULD NOT process the
remaining service instances or candidate parent domains.</t>
          <t>If none of the service instances yield a valid ACME directory
object, service discovery for the current parent domain has failed.
Failure modes include:</t>
          <ul>
            <li>
              <t>No PTR records at "_acme-server._tcp.&lt;Domain&gt;"</t>
            </li>
            <li>
              <t>No eligible service instances, according to the TXT attributes</t>
            </li>
            <li>
              <t>All HTTPS requests to eligible service instances either failed
or did not response with a valid ACME directory object.</t>
            </li>
          </ul>
          <t>In this case, the client MAY retry service discovery with the next
most preferred candidate parent domain.  The client MAY continue
retrying until no candidate parent domains remain, or MAY give up
earlier (e.g. after a fixed number of attempts).</t>
          <t>If service discovery does not succeed, an ACME client MAY fall back
to a default ACME server (e.g. a publicly accessible ACME server).</t>
        </section>
      </section>
      <section anchor="acme-operations">
        <name>ACME Operations</name>
        <t>An ACME client MAY record (cache) the URI of the ACME server located
via service discovery and MAY use the cached server for new account
and new order operations, without performing service discovery each
time.</t>
        <t>When storing data about accounts and orders, ACME clients SHOULD
record the URI of the actual ACME server used.  When retrieving or
revoking certificates or performing account operations, the client
SHOULD use the recorded URI to contact the ACME server and SHOULD
NOT perform service discovery.</t>
        <t>When renewing or replacing a certificate, if the recorded ACME
server cannot be contacted or fails to issue a certificate, a client
MAY perform service discovery to attempt to locate an alternative
ACME server that may be able to issue the certificate.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="acme-server-service-name-registration">
        <name>"acme-server" Service Name Registration</name>
        <t>Per <xref target="RFC6335"/>, please add the following entry to the Service Name
and Transport Protocol Port Number Registry <xref target="IANA-SN"/>:</t>
        <artwork>Service Name             acme-server
Port Number              N/A
Transport Protocol(s)    tcp
Description              Automated Certificate Management Environment
                           (ACME) server
Assignee                 IESG &lt;iesg@ietf.org&gt;
Contact                  IETF Chair &lt;chair@ietf.org&gt;
Reference                (this document)
Assignment Notes         Defined TXT keys: path, i, v
</artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="tls-and-certificate-validation">
        <name>TLS and Certificate Validation</name>
        <t>Use of TLS is REQUIRED by <xref target="RFC8555"/>.  <xref target="RFC5280"/> supports the
uniformResourceIdentifier and <xref target="RFC4985"/> name types in the Subject
Alternative Name extension, and <xref target="RFC6125"/> describes the DNS-ID,
URI-ID and SRV-ID identifier types and how to validate them against
a server's X.509 certificates.</t>
        <t>However, the uniformResourceIdentifier and SRVName name types are
not in widespread use and not widely supported by TLS libraries or
certificate authorities.  <xref target="RFC2818"/> does not describe the use of
either of these name types for HTTP services.  Therefore when an
ACME server was located via service discovery its certificate MUST
be validated according to both <xref target="RFC5280"/> and <xref target="RFC6125"/>, using
the target of the service's SRV record as the DNS-ID.</t>
      </section>
      <section anchor="parent-domain-selection">
        <name>Parent Domain Selection</name>
        <t>An attacker who is able to influence an ACME client's candidate
parent domains can influence which ACME server the client uses, or
cause service discovery to fail.  The attacker could use this
capability to perform a denial of service against the ACME client
(i.e. the client cannot acquire or renew a certificate), or against
parties that validate certificates issued to the client (because
they do not trust the issuing CA or because the certificate is
invalid in some way), or against a target ACME server (by directing
many clients to it).  ACME client implementers should carefully
consider which methods of determining the parent domain(s) are
appropriate for their use cases, and the security implications of
their chosen methods.</t>
        <t>An ACME client might derive candidate parent domains by removing one
or more labels from the left side of some other DNS name (e.g. the
host name of the client's machine).  If too many labels are removed,
the ACME client could perform DNS queries in zones outside the
control of the organisation that operates the ACME client.  As a
result, the ACME client could locate and use an ACME server that the
organisation does not intend.</t>
        <t>To mitigate this risk, it is RECOMMENDED that clients limit the
amount of label pruning that occurs.  It is not possible to make a
concrete recommendation that is suitable for all environments.
Implementers must consider what is appropriate for their use cases
and environments.  The candidate parent domain ordering requirements
also mitigate this risk.</t>
      </section>
      <section anchor="dns-security">
        <name>DNS Security</name>
        <t>Without ACME Service Discovery, an ACME client must be configured or
hard-coded to use a particular ACME server, specified as the HTTPS
URI of the server's directory resource.  Typically the host will be
a DNS name rather than an IP address, and one or more DNS queries
are necessary to resolve the host's DNS name to an IP address.</t>
        <t>When service discovery is used, the URI of the ACME server is
obtained from a DNS URI record.  If an attacker is able to spoof the
_acme-server URI record for a candidate parent domain name, the
attacker could cause service discovery to fail or could direct the
client to an ACME server of the attacker's choosing.  This could
constitute a denial of service attack against the client, against
parties that validate certificates issued to the client, or against
the target server.</t>
        <t>Therefore it is RECOMMENDED that URI records used for ACME Service
Discovery be secured using DNSSEC.  It is RECOMMENDED that ACME
clients make DNS URI queries via DNSSEC-validating stub or recursive
resolvers.</t>
        <t>Some methods of candidate parent domain selection may involve DNS
queries.  For example, a client could query PTR records to find a
host name, from which it derives a candidate parent domain.
Implementers must consider the security of DNS data used for parent
domain selection.</t>
      </section>
      <section anchor="service-instance-delegation">
        <name>Service Instance Delegation</name>
        <t>As noted in <xref target="RFC6763"/> Section 4.2, it is possible for a service
enumeration in one domain to return the names of services in a
different domain.  It is necessary to consider the security
implications for ACME Service Discovery in this scenario.</t>
        <t>Consider an organisation that operates a corporate ACME server
"<eref target="https://ca.corp.example/acme&quot;">https://ca.corp.example/acme"</eref> for issuing user "email"
certificates, and intends to use the public ACME CA
"<eref target="https://certs4all.example/acme/v2&quot;">https://certs4all.example/acme/v2"</eref> for "dns" certificates.  If the
public CA has DNS-SD service instance records in their own domain:</t>
        <artwork>$ORIGIN certs4all.example.
C4A._acme-server._tcp SRV 10 0 443 certs4all.example.
C4A._acme-server._tcp TXT "path=/acme/v2" "i=dns"
</artwork>
        <t>then the network administrators could avoid maintaining variants of
these records in their own domain, with a configuration such as:</t>
        <artwork>$ORIGIN corp.example.

_acme-server._tcp PTR CorpCA._acme-server._tcp
_acme-server._tcp PTR C4A._acme-server._tcp.certs4all.example.

CorpCA._acme-server._tcp SRV 10 0 443 ca.corp.example.
CorpCA._acme-server._tcp TXT "path=/acme" "i=email"
</artwork>
        <t>This is a risky configuration because, for some of the service
instances, a third party controls both SRV priority and weight, and
the TXT attributes, which are used to select eligible service
instances.  In the configuration above, everything works as
intended.  ACME "email" clients go to "CorpCA" and "dns" clients go
to "C4A".  But if the administrators of certs4all.example change
their service instance records to:</t>
        <artwork>$ORIGIN certs4all.example.
C4A._acme-server._tcp SRV 5 0 443 certs4all.example.
C4A._acme-server._tcp TXT "path=/acme" "i=dns,email"
</artwork>
        <t>then the organisation's "email" clients will now prefer "C4A".  This
could lead to denial of service (C4A may not be trusted by mail
agents and systems) or breaches of privacy (corporate email
addresses will be exposed to the CA, and possibly to the world via
Certifiate Transparency <xref target="RFC6962"/>)</t>
        <t>For these reasons, delegation of service instance records to third
parties is NOT RECOMMENDED.  As stated elsewhere in this document,
clients MUST ignore Service Instance Names whose &lt;Domain&gt; part
differs from the parent domain that owns the PTR records, unless
explicitly configured otherwise.</t>
      </section>
      <section anchor="multicast-dns">
        <name>Multicast DNS</name>
        <t>DNS-SD is compatible with Multicast DNS <xref target="RFC6762"/>.  Devices
on the local network can advertise their services by responding to
mDNS Service Instance Enumeration (PTR) queries.  For example, a
client can search for printers by querying "_printer._tcp.local.",
and printers respond with their Service Instance Names (and will
also respond to requests for the associated SRV and TXT records).</t>
        <t>There may be real use cases for ACME service discovery via
DNS-SD/mDNS.  But there are also risks.  The same issues arise as
for service instance delegation, but these are compounded because
the parent domain is always "local." and service providers
(devices) may be ephemeral.  This increases the risk of denial
of service for ACME clients and relying parties.</t>
        <t>The author of this document does not wish to dissuade people from
considering use cases and developing and analysing an ACME service
discovery profile for DNS-SD/mDNS.  It remains an open topic.  This
specification only requires that a client MUST NOT use DNS-SD/mDNS
for ACME Service Discovery unless explicitly configured to do so.</t>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="RFC8555" to="ACME" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC2818" to="HTTP-TLS" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC6763" to="DNS-SD" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC2782" to="DNS-SRV" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC3986" to="URI" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC7230" to="HTTPS" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC5280" to="X.509" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC4985" to="SRVName" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC7230" to="HTTP" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <displayreference target="RFC5198" to="Net-Unicode" xml:base="/home/ftweedal/doc/notes/ietf/output/acme-discovery/displayreference.xml"/>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC6763" target="https://www.rfc-editor.org/info/rfc6763" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6763.xml">
        <front>
          <title>DNS-Based Service Discovery</title>
          <author initials="S." surname="Cheshire" fullname="S. Cheshire">
            <organization/>
          </author>
          <author initials="M." surname="Krochmal" fullname="M. Krochmal">
            <organization/>
          </author>
          <date year="2013" month="February"/>
          <abstract>
            <t>This document specifies how DNS resource records are named and structured to facilitate service discovery.  Given a type of service that a client is looking for, and a domain in which the client is looking for that service, this mechanism allows clients to discover a list of named instances of that desired service, using standard DNS queries. This mechanism is referred to as DNS-based Service Discovery, or DNS-SD.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6763"/>
        <seriesInfo name="DOI" value="10.17487/RFC6763"/>
      </reference>
      <reference anchor="RFC2782" target="https://www.rfc-editor.org/info/rfc2782" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2782.xml">
        <front>
          <title>A DNS RR for specifying the location of services (DNS SRV)</title>
          <author initials="A." surname="Gulbrandsen" fullname="A. Gulbrandsen">
            <organization/>
          </author>
          <author initials="P." surname="Vixie" fullname="P. Vixie">
            <organization/>
          </author>
          <author initials="L." surname="Esibov" fullname="L. Esibov">
            <organization/>
          </author>
          <date year="2000" month="February"/>
          <abstract>
            <t>This document describes a DNS RR which specifies the location of the server(s) for a specific protocol and domain.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2782"/>
        <seriesInfo name="DOI" value="10.17487/RFC2782"/>
      </reference>
      <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7230.xml">
        <front>
          <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
          <author initials="R." surname="Fielding" fullname="R. Fielding" role="editor">
            <organization/>
          </author>
          <author initials="J." surname="Reschke" fullname="J. Reschke" role="editor">
            <organization/>
          </author>
          <date year="2014" month="June"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7230"/>
        <seriesInfo name="DOI" value="10.17487/RFC7230"/>
      </reference>
      <reference anchor="RFC5198" target="https://www.rfc-editor.org/info/rfc5198" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5198.xml">
        <front>
          <title>Unicode Format for Network Interchange</title>
          <author initials="J." surname="Klensin" fullname="J. Klensin">
            <organization/>
          </author>
          <author initials="M." surname="Padlipsky" fullname="M. Padlipsky">
            <organization/>
          </author>
          <date year="2008" month="March"/>
          <abstract>
            <t>The Internet today is in need of a standardized form for the transmission of internationalized "text" information, paralleling the specifications for the use of ASCII that date from the early days of the ARPANET.  This document specifies that format, using UTF-8 with normalization and specific line-ending sequences.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5198"/>
        <seriesInfo name="DOI" value="10.17487/RFC5198"/>
      </reference>
      <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1035" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml">
        <front>
          <title>Domain names - implementation and specification</title>
          <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockapetris">
            <organization/>
          </author>
          <date year="1987" month="November"/>
          <abstract>
            <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System.  It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="13"/>
        <seriesInfo name="RFC" value="1035"/>
        <seriesInfo name="DOI" value="10.17487/RFC1035"/>
      </reference>
      <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
        <front>
          <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
          <author initials="D." surname="Cooper" fullname="D. Cooper">
            <organization/>
          </author>
          <author initials="S." surname="Santesson" fullname="S. Santesson">
            <organization/>
          </author>
          <author initials="S." surname="Farrell" fullname="S. Farrell">
            <organization/>
          </author>
          <author initials="S." surname="Boeyen" fullname="S. Boeyen">
            <organization/>
          </author>
          <author initials="R." surname="Housley" fullname="R. Housley">
            <organization/>
          </author>
          <author initials="W." surname="Polk" fullname="W. Polk">
            <organization/>
          </author>
          <date year="2008" month="May"/>
          <abstract>
            <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet.  An overview of this approach and model is provided as an introduction.  The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms.  Standard certificate extensions are described and two Internet-specific extensions are defined.  A set of required certificate extensions is specified.  The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions.  An algorithm for X.509 certification path validation is described.  An ASN.1 module and examples are provided in the appendices.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5280"/>
        <seriesInfo name="DOI" value="10.17487/RFC5280"/>
      </reference>
      <reference anchor="RFC8555" target="https://www.rfc-editor.org/info/rfc8555" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8555.xml">
        <front>
          <title>Automatic Certificate Management Environment (ACME)</title>
          <author initials="R." surname="Barnes" fullname="R. Barnes">
            <organization/>
          </author>
          <author initials="J." surname="Hoffman-Andrews" fullname="J. Hoffman-Andrews">
            <organization/>
          </author>
          <author initials="D." surname="McCarney" fullname="D. McCarney">
            <organization/>
          </author>
          <author initials="J." surname="Kasten" fullname="J. Kasten">
            <organization/>
          </author>
          <date year="2019" month="March"/>
          <abstract>
            <t>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="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
            <organization/>
          </author>
          <author initials="R." surname="Fielding" fullname="R. Fielding">
            <organization/>
          </author>
          <author initials="L." surname="Masinter" fullname="L. Masinter">
            <organization/>
          </author>
          <date year="2005" month="January"/>
          <abstract>
            <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
        <seriesInfo name="DOI" value="10.17487/RFC3986"/>
      </reference>
      <reference anchor="RFC6125" target="https://www.rfc-editor.org/info/rfc6125" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6125.xml">
        <front>
          <title>Representation and Verification of Domain-Based Application Service Identity within Internet Public Key Infrastructure Using X.509 (PKIX) Certificates in the Context of Transport Layer Security (TLS)</title>
          <author initials="P." surname="Saint-Andre" fullname="P. Saint-Andre">
            <organization/>
          </author>
          <author initials="J." surname="Hodges" fullname="J. Hodges">
            <organization/>
          </author>
          <date year="2011" month="March"/>
          <abstract>
            <t>Many application technologies enable secure communication between two entities by means of Internet Public Key Infrastructure Using X.509 (PKIX) certificates in the context of Transport Layer Security (TLS). This document specifies procedures for representing and verifying the identity of application services in such interactions.   [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6125"/>
        <seriesInfo name="DOI" value="10.17487/RFC6125"/>
      </reference>
    </references>
    <references>
      <name>Informative References</name>
      <reference anchor="RFC8552" target="https://www.rfc-editor.org/info/rfc8552" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8552.xml">
        <front>
          <title>Scoped Interpretation of DNS Resource Records through "Underscored" Naming of Attribute Leaves</title>
          <author initials="D." surname="Crocker" fullname="D. Crocker">
            <organization/>
          </author>
          <date year="2019" month="March"/>
          <abstract>
            <t>Formally, any DNS Resource Record (RR) may occur under any domain name.  However, some services use an operational convention for defining specific interpretations of an RRset by locating the records in a DNS branch under the parent domain to which the RRset actually applies.  The top of this subordinate branch is defined by a naming convention that uses a reserved node name, which begins with the underscore character (e.g., "_name").  The underscored naming construct defines a semantic scope for DNS record types that are associated with the parent domain above the underscored branch.  This specification explores the nature of this DNS usage and defines the "Underscored and Globally Scoped DNS Node Names" registry with IANA. The purpose of this registry is to avoid collisions resulting from the use of the same underscored name for different services.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="222"/>
        <seriesInfo name="RFC" value="8552"/>
        <seriesInfo name="DOI" value="10.17487/RFC8552"/>
      </reference>
      <reference anchor="IANA-ACME-ID" target="https://www.iana.org/assignments/acme/acme.xhtml#acme-identifier-types">
        <front>
          <title>ACME Identifier Types</title>
          <author>
            <organization>IANA</organization>
          </author>
        </front>
      </reference>
      <reference anchor="RFC6762" target="https://www.rfc-editor.org/info/rfc6762" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6762.xml">
        <front>
          <title>Multicast DNS</title>
          <author initials="S." surname="Cheshire" fullname="S. Cheshire">
            <organization/>
          </author>
          <author initials="M." surname="Krochmal" fullname="M. Krochmal">
            <organization/>
          </author>
          <date year="2013" month="February"/>
          <abstract>
            <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important.  In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
            <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server.  In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
            <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6762"/>
        <seriesInfo name="DOI" value="10.17487/RFC6762"/>
      </reference>
      <reference anchor="RFC4120" target="https://www.rfc-editor.org/info/rfc4120" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4120.xml">
        <front>
          <title>The Kerberos Network Authentication Service (V5)</title>
          <author initials="C." surname="Neuman" fullname="C. Neuman">
            <organization/>
          </author>
          <author initials="T." surname="Yu" fullname="T. Yu">
            <organization/>
          </author>
          <author initials="S." surname="Hartman" fullname="S. Hartman">
            <organization/>
          </author>
          <author initials="K." surname="Raeburn" fullname="K. Raeburn">
            <organization/>
          </author>
          <date year="2005" month="July"/>
          <abstract>
            <t>This document provides an overview and specification of Version 5 of the Kerberos protocol, and it obsoletes RFC 1510 to clarify aspects of the protocol and its intended use that require more detailed or clearer explanation than was provided in RFC 1510.  This document is intended to provide a detailed description of the protocol, suitable for implementation, together with descriptions of the appropriate use of protocol messages and fields within those messages.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4120"/>
        <seriesInfo name="DOI" value="10.17487/RFC4120"/>
      </reference>
      <reference anchor="IANA-SN" target="https://www.iana.org/assignments/service-names-port-numbers/">
        <front>
          <title>Service Name and Transport Protocol Port Number Registry</title>
          <author>
            <organization>IANA</organization>
          </author>
        </front>
      </reference>
      <reference anchor="RFC6962" target="https://www.rfc-editor.org/info/rfc6962" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6962.xml">
        <front>
          <title>Certificate Transparency</title>
          <author initials="B." surname="Laurie" fullname="B. Laurie">
            <organization/>
          </author>
          <author initials="A." surname="Langley" fullname="A. Langley">
            <organization/>
          </author>
          <author initials="E." surname="Kasper" fullname="E. Kasper">
            <organization/>
          </author>
          <date year="2013" month="June"/>
          <abstract>
            <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate 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>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="6962"/>
        <seriesInfo name="DOI" value="10.17487/RFC6962"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="B. Leiba">
            <organization/>
          </author>
          <date year="2017" month="May"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="IANA-ACME-VAL" target="https://www.iana.org/assignments/acme/acme.xhtml#acme-validation-methods">
        <front>
          <title>ACME Validation Methods</title>
          <author>
            <organization>IANA</organization>
          </author>
        </front>
      </reference>
      <reference anchor="RFC4985" target="https://www.rfc-editor.org/info/rfc4985" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4985.xml">
        <front>
          <title>Internet X.509 Public Key Infrastructure Subject Alternative Name for Expression of Service Name</title>
          <author initials="S." surname="Santesson" fullname="S. Santesson">
            <organization/>
          </author>
          <date year="2007" month="August"/>
          <abstract>
            <t>This document defines a new name form for inclusion in the otherName field of an X.509 Subject Alternative Name extension that allows a certificate subject to be associated with the service name and domain name components of a DNS Service Resource Record.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4985"/>
        <seriesInfo name="DOI" value="10.17487/RFC4985"/>
      </reference>
      <reference anchor="RFC2818" target="https://www.rfc-editor.org/info/rfc2818" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2818.xml">
        <front>
          <title>HTTP Over TLS</title>
          <author initials="E." surname="Rescorla" fullname="E. Rescorla">
            <organization/>
          </author>
          <date year="2000" month="May"/>
          <abstract>
            <t>This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet.  This memo provides information for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2818"/>
        <seriesInfo name="DOI" value="10.17487/RFC2818"/>
      </reference>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization/>
          </author>
          <date year="1997" month="March"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC6335" target="https://www.rfc-editor.org/info/rfc6335" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6335.xml">
        <front>
          <title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
          <author initials="M." surname="Cotton" fullname="M. Cotton">
            <organization/>
          </author>
          <author initials="L." surname="Eggert" fullname="L. Eggert">
            <organization/>
          </author>
          <author initials="J." surname="Touch" fullname="J. Touch">
            <organization/>
          </author>
          <author initials="M." surname="Westerlund" fullname="M. Westerlund">
            <organization/>
          </author>
          <author initials="S." surname="Cheshire" fullname="S. Cheshire">
            <organization/>
          </author>
          <date year="2011" month="August"/>
          <abstract>
            <t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry.  It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.</t>
            <t>This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP).  It also updates the DNS SRV specification to clarify what a service name is and how it is registered.  This memo documents an Internet Best Current Practice.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="165"/>
        <seriesInfo name="RFC" value="6335"/>
        <seriesInfo name="DOI" value="10.17487/RFC6335"/>
      </reference>
    </references>
  </back>
</rfc>
