<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.5 (Ruby 2.6.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-brski-cloud-09" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.1 -->
  <front>
    <title abbrev="BRSKI-CLOUD">BRSKI Cloud Registrar</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-anima-brski-cloud-09"/>
    <author initials="O." surname="Friel" fullname="Owen Friel">
      <organization>Cisco</organization>
      <address>
        <email>ofriel@cisco.com</email>
      </address>
    </author>
    <author initials="R." surname="Shekh-Yusef" fullname="Rifaat Shekh-Yusef">
      <organization>Ernst &amp; Young</organization>
      <address>
        <email>rifaat.s.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="M." surname="Richardson" fullname="Michael Richardson">
      <organization>Sandelman Software Works</organization>
      <address>
        <email>mcr+ietf@sandelman.ca</email>
      </address>
    </author>
    <date year="2024" month="August" day="20"/>
    <abstract>
      <?line 42?>

<t>Bootstrapping Remote Secure Key Infrastructures defines how to onboard a device securely into an operator maintained infrastructure.  It assumes that there is local network infrastructure for the device to discover and help the device.   This document extends the new device behaviour so that if no local infrastructure is available, such as in a home or remote office, that the device can use a well-defined "call-home" mechanism to find the operator maintained infrastructure.</t>
      <t>To this, this document defines how to contact a well-known Cloud Registrar, and two ways in which the new device may be redirected towards the operator maintained infrastructure. The Cloud Registrar enables discovery of the operator maintained infrastructure, and may enable establishment of trust with operator maintained infrastructure that does not support BRSKI mechanisms.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-anima-brski-cloud/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        anima Working Group mailing list (<eref target="mailto:anima@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/anima/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/anima/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/anima-wg/brski-cloud"/>.</t>
    </note>
  </front>
  <middle>
    <?line 48?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Bootstrapping Remote Secure Key Infrastructures <xref target="BRSKI"/> BRSKI specifies automated and secure provisioning  of nodes (which are called pledges) with cryptographic keying material (trust  anchors and certificates) to enable authenticated and confidential communication with other similarily enrolled nodes.
This is also called enrolment.</t>
      <t>In BRSKI, the pledge performs enrolment by communicating with a BRSKI Registrar belonging to the owner of the pledge.
The pledge does not know who its owner will be when manufactured.
Instead, in BRSKI it is assumed that the network to which the pledge connects belongs to the owner of the pledge and therefore network-supported discovery mechanisms can resolve generic, non-owner specific names to the owners Registrar.</t>
      <t>To support enrolment of pledges without such an owner based access network, the mechanisms
of BRSKI Cloud are required which assume that Pledge and Registrar simply connect to the
Internet.
The Internet ("Cloud") connected Registrar will then determine ownership of the Pledge
and redirect the Plege to its owners Registrar.</t>
      <t>This work is in support of <xref section="2.7" sectionFormat="comma" target="BRSKI"/>, which describes how a pledge</t>
      <artwork><![CDATA[
MAY contact a well-known URI of a Cloud Registrar if a
local Registrar  cannot be discovered or if the pledge's
target use cases do not include a local Registrar.
]]></artwork>
      <t>This document further specifies use of a BRSKI Cloud Registrar and clarifies operations that are not sufficiently specified in BRSKI.
Two modes of operation are specified in this document.
The Cloud Registrar may redirect the Pledge to the owner's Registrar, or the Cloud Registrar may issue a voucher to the Pledge that includes the domain of thw owner's Enrollment over Secure Transport <xref target="RFC7030"/> (EST) server.</t>
      <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.
<?line -6?>
        </t>
        <t>This document uses the terms Pledge, Registrar, MASA, and Voucher from <xref target="BRSKI"/> and <xref target="RFC8366"/>.</t>
        <dl>
          <dt>Local Domain:</dt>
          <dd>
            <t>The domain where the pledge is physically located and bootstrapping from. This may be different to the pledge owner's domain.</t>
          </dd>
          <dt>Owner Domain:</dt>
          <dd>
            <t>The domain that the pledge needs to discover and bootstrap with.</t>
          </dd>
          <dt>Cloud Registrar:</dt>
          <dd>
            <t>The default Registrar that is deployed at a URI that is well known to the pledge.</t>
          </dd>
          <dt>Owner Registrar:</dt>
          <dd>
            <t>The Registrar that is operated by the Owner, or the Owner's delegate.
There may not be an Owner Registrar in all deployment scenarios.</t>
          </dd>
          <dt>EST:</dt>
          <dd>
            <t>Enrollment over Secure Transport <xref target="RFC7030"/></t>
          </dd>
          <dt>Manufacturer:</dt>
          <dd>
            <t>The term manufacturer is used throughout this document as the entity that created the pledge. This is typically the original equipment manufacturer (OEM), but in more complex situations, it could be a value added retailer (VAR), or possibly even a systems integrator. Refer to <xref target="BRSKI"/> for more detailed descriptions of manufacturer, VAR and OEM.</t>
          </dd>
          <dt>OEM:</dt>
          <dd>
            <t>Original Equipment Manufacturer</t>
          </dd>
          <dt>VAR:</dt>
          <dd>
            <t>Value Added Reseller</t>
          </dd>
        </dl>
      </section>
      <section anchor="target-use-cases">
        <name>Target Use Cases</name>
        <t>This document specifies and standardizes procedures for two high level use cases.</t>
        <ul spacing="normal">
          <li>
            <t>Bootstrap via Cloud Registrar and Owner Registrar: The operator maintained infrastructure supports BRSKI and has a BRSKI Registrar deployed. More details are provided in <xref target="bootstrap-via-cloud-registrar-and-owner-registrar"/>.</t>
          </li>
          <li>
            <t>Bootstrap via Cloud Registrar and Owner EST Service: The operator maintained infrastructure does not support BRSKI, does not have a BRSKI Registrar deployed, but does have an Enrollment over Secure Transport (EST) <xref target="RFC7030"/> service deployed. More detailed are provided in <xref target="bootstrap-via-cloud-registrar-and-owner-est-service"/>.</t>
          </li>
        </ul>
        <t>Common to both uses cases is that they aid with the use of BRSKI in the presence of many small sites, such as teleworkers, with minimum expectations against their network infrastructure.</t>
        <t>The pledge is not expected to know whether the operator maintaned infrastructure has a BRSKI Registrar deployed or not.
The pledge determines this based upon the response to its Voucher Request message that it receives from the Cloud Registrar.
The Cloud Registrar is expected to determine whether the operator maintaned infrastructure has a BRSKI Registrar deployed based upon the identity presented by the pledge.</t>
        <t>A Cloud Registrar will receive BRSKI communications from all devices configured with its URI.
This could be, for example, all devices of a particular product line from a particular manufacturer.
When this is a significantly large number, a Cloud  Registrar may need to be scaled with the usual web-service scaling mechansisms.</t>
        <section anchor="bootstrap-via-cloud-registrar-and-owner-registrar">
          <name>Bootstrap via Cloud Registrar and Owner Registrar</name>
          <t>A pledge is bootstrapping from a location with no local domain Registrar (for example, the small site or teleworker use case with no local infrastructure to provide for automated discovery), and needs to discover its owner Registrar.
The Cloud Registrar is used by the pledge to discover the owner Registrar.
The Cloud Registrar redirects the pledge to the owner Registrar, and the pledge completes bootstrap against the owner Registrar.</t>
          <t>A typical example is an employee who is deploying a pledge in a home or small branch office, where the pledge belongs to the employer.
There is no local domain Registrar, the pledge needs to discover and bootstrap with the employer's Registrar which is deployed within the employer's network, and the pledge needs the keying material to trust the Registrar.
For example, an employee is deploying an IP phone in a home office and the phone needs to register to an IP PBX deployed in their employer's office.</t>
          <t>Protocol details for this use case are provided in <xref target="redirect2Registrar"/>.</t>
        </section>
        <section anchor="bootstrap-via-cloud-registrar-and-owner-est-service">
          <name>Bootstrap via Cloud Registrar and Owner EST Service</name>
          <t>A pledge is bootstrapping where the owner organization does not yet have an owner Registrar deployed, but does have an EST service deployed.
The Cloud Registrar issues a voucher, and the pledge completes trust bootstrap using the Cloud Registrar.
The voucher issued by the cloud includes domain information for the owner's EST service that the pledge should use for certificate enrollment.</t>
          <t>For example, an organization has an EST service deployed, but does not have yet a BRSKI capable Registrar service deployed.
The pledge is deployed in the organization's domain, but does not discover a local domain Registrar or owner Registrar.
The pledge uses the Cloud Registrar to bootstrap, and the Cloud Registrar provides a voucher that includes instructions on finding the organization's EST service.</t>
          <t>This option can be used to introduce the benefits of BRSKI for an initial period when BRSKI is not available in existing EST-Servers.
Additionally, it can also be used long-term as an security-equivalent solution in which BRSKI and EST-Server are set up in a modular fashion.</t>
          <t>The use of an EST-Server instead of a BRSKI Registrar may mean that not all the EST options required by <xref target="BRSKI"/> may be available and hence this option may not support all BRSKI deployment cases.
For example, certificates to enroll into an ACP [RFC8994] needs to include an AcpNodeName (see [RFC8994], Section 6.2.2), which non-BRSKI capable EST-Servers may not support.</t>
          <t>Protocol details for this use case are provided in <xref target="voucher2EST"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <t>The high level architectures for the two high level use cases are illustrated in <xref target="arch-one"/> and <xref target="arch-two"/>.</t>
      <t>In both use cases, the pledge connects to the Cloud Registrar during bootstrap.</t>
      <t>For use case one, as described in <xref target="bootstrap-via-cloud-registrar-and-owner-registrar"/>, the Cloud Registrar redirects the pledge to an owner Registrar in order to complete bootstrap with the owner Registrar. When bootstrapping against an owner Registrar, this Registrar will interact with a CA to assist in issuing certificates to the pledge. This is illustrated in <xref target="arch-one"/>.</t>
      <t>For use case two, as described <xref target="bootstrap-via-cloud-registrar-and-owner-est-service"/>, the Cloud Registrar issues a voucher itself without redirecting the pledge to an owner Registrar, the Cloud Registrar will inform the pledge what domain to use for accessing EST services in the voucher response. In this model, the pledge interacts directly with the EST service to enrol. The EST service will interact with a CA to assist in issuing certificated to the pledge. This is illustrated in <xref target="arch-two"/>.</t>
      <t>It also also possible that the Cloud Registrar may redirect the pledge to another Cloud Registrar operated by a VAR, with that VAR's Cloud Registrar then redirecting the pledge to the Owner Registrar.
This scenario is discussed further in sections <xref target="multiple-http-redirects"/> and <xref target="considerationsfor-http-redirect"/>.</t>
      <t>The mechanisms and protocols by which the Registrar or EST service interacts with the CA are transparent to the pledge and are out-of-scope of this document.</t>
      <t>The architectures shows the Cloud Registrar and MASA as being logically separate entities.
The two functions could of course be integrated into a single entity.</t>
      <t>There are two different mechanisms for a Cloud Registrar to handle voucher requests.
It can redirect the request to the Owner Registrar for handling, or it can return a voucher
that pins the actual Owner Registrar.
When returning a voucher, additional bootstrapping information is embedded in the voucher.
Both mechanisms are described in detail later in this document.</t>
      <figure anchor="arch-one">
        <name>Architecture: Bootstrap via Cloud Registrar and Owner Registrar</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="528" viewBox="0 0 528 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,80 L 8,112" fill="none" stroke="black"/>
              <path d="M 40,120 L 40,176" fill="none" stroke="black"/>
              <path d="M 80,80 L 80,112" fill="none" stroke="black"/>
              <path d="M 184,160 L 184,208" fill="none" stroke="black"/>
              <path d="M 232,216 L 232,240" fill="none" stroke="black"/>
              <path d="M 272,224 L 272,256" fill="none" stroke="black"/>
              <path d="M 280,160 L 280,208" fill="none" stroke="black"/>
              <path d="M 368,224 L 368,256" fill="none" stroke="black"/>
              <path d="M 424,80 L 424,128" fill="none" stroke="black"/>
              <path d="M 424,160 L 424,192" fill="none" stroke="black"/>
              <path d="M 472,128 L 472,160" fill="none" stroke="black"/>
              <path d="M 520,80 L 520,128" fill="none" stroke="black"/>
              <path d="M 520,160 L 520,192" fill="none" stroke="black"/>
              <path d="M 16,32 L 128,32" fill="none" stroke="black"/>
              <path d="M 176,32 L 392,32" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 424,80 L 520,80" fill="none" stroke="black"/>
              <path d="M 88,96 L 416,96" fill="none" stroke="black"/>
              <path d="M 8,112 L 80,112" fill="none" stroke="black"/>
              <path d="M 424,128 L 520,128" fill="none" stroke="black"/>
              <path d="M 184,160 L 280,160" fill="none" stroke="black"/>
              <path d="M 424,160 L 520,160" fill="none" stroke="black"/>
              <path d="M 40,176 L 176,176" fill="none" stroke="black"/>
              <path d="M 288,176 L 416,176" fill="none" stroke="black"/>
              <path d="M 424,192 L 520,192" fill="none" stroke="black"/>
              <path d="M 184,208 L 280,208" fill="none" stroke="black"/>
              <path d="M 272,224 L 368,224" fill="none" stroke="black"/>
              <path d="M 232,240 L 264,240" fill="none" stroke="black"/>
              <path d="M 272,256 L 368,256" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="424,176 412,170.4 412,181.6 " fill="black" transform="rotate(0,416,176)"/>
              <polygon class="arrowhead" points="424,96 412,90.4 412,101.6 " fill="black" transform="rotate(0,416,96)"/>
              <polygon class="arrowhead" points="400,32 388,26.4 388,37.6 " fill="black" transform="rotate(0,392,32)"/>
              <polygon class="arrowhead" points="272,240 260,234.4 260,245.6 " fill="black" transform="rotate(0,264,240)"/>
              <polygon class="arrowhead" points="184,176 172,170.4 172,181.6 " fill="black" transform="rotate(0,176,176)"/>
              <polygon class="arrowhead" points="24,32 12,26.4 12,37.6 " fill="black" transform="rotate(180,16,32)"/>
              <g class="text">
                <text x="8" y="36">|</text>
                <text x="152" y="36">OWNER</text>
                <text x="400" y="36">|</text>
                <text x="476" y="36">MANUFACTURER</text>
                <text x="40" y="68">On-site</text>
                <text x="216" y="68">Cloud</text>
                <text x="44" y="100">Pledge</text>
                <text x="456" y="100">Cloud</text>
                <text x="472" y="116">Registrar</text>
                <text x="224" y="180">Owner</text>
                <text x="468" y="180">MASA</text>
                <text x="108" y="196">VR-sign(N)</text>
                <text x="232" y="196">Registrar</text>
                <text x="348" y="196">sign(VR-sign(N))</text>
                <text x="316" y="244">CA</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
|<--------------OWNER--------------------------->|   MANUFACTURER

 On-site                Cloud
+--------+                                          +-----------+
| Pledge |----------------------------------------->| Cloud     |
+--------+                                          | Registrar |
    |                                               +-----+-----+
    |                                                     |
    |                 +-----------+                 +-----+-----+
    +---------------->|  Owner    |---------------->|   MASA    |
        VR-sign(N)    | Registrar |sign(VR-sign(N)) +-----------+
                      +-----------+
                            |    +-----------+
                            +--->|    CA     |
                                 +-----------+
]]></artwork>
        </artset>
      </figure>
      <figure anchor="arch-two">
        <name>Architecture: Bootstrap via Cloud Registrar and Owner EST Service</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="528" viewBox="0 0 528 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,80 L 8,112" fill="none" stroke="black"/>
              <path d="M 40,120 L 40,224" fill="none" stroke="black"/>
              <path d="M 80,80 L 80,112" fill="none" stroke="black"/>
              <path d="M 184,208 L 184,256" fill="none" stroke="black"/>
              <path d="M 232,264 L 232,288" fill="none" stroke="black"/>
              <path d="M 272,272 L 272,304" fill="none" stroke="black"/>
              <path d="M 280,208 L 280,256" fill="none" stroke="black"/>
              <path d="M 368,272 L 368,304" fill="none" stroke="black"/>
              <path d="M 424,80 L 424,128" fill="none" stroke="black"/>
              <path d="M 424,160 L 424,192" fill="none" stroke="black"/>
              <path d="M 472,128 L 472,160" fill="none" stroke="black"/>
              <path d="M 520,80 L 520,128" fill="none" stroke="black"/>
              <path d="M 520,160 L 520,192" fill="none" stroke="black"/>
              <path d="M 16,32 L 128,32" fill="none" stroke="black"/>
              <path d="M 176,32 L 392,32" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 424,80 L 520,80" fill="none" stroke="black"/>
              <path d="M 88,96 L 416,96" fill="none" stroke="black"/>
              <path d="M 8,112 L 80,112" fill="none" stroke="black"/>
              <path d="M 424,128 L 520,128" fill="none" stroke="black"/>
              <path d="M 424,160 L 520,160" fill="none" stroke="black"/>
              <path d="M 424,192 L 520,192" fill="none" stroke="black"/>
              <path d="M 184,208 L 280,208" fill="none" stroke="black"/>
              <path d="M 40,224 L 176,224" fill="none" stroke="black"/>
              <path d="M 184,256 L 280,256" fill="none" stroke="black"/>
              <path d="M 272,272 L 368,272" fill="none" stroke="black"/>
              <path d="M 232,288 L 264,288" fill="none" stroke="black"/>
              <path d="M 272,304 L 368,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="424,96 412,90.4 412,101.6 " fill="black" transform="rotate(0,416,96)"/>
              <polygon class="arrowhead" points="400,32 388,26.4 388,37.6 " fill="black" transform="rotate(0,392,32)"/>
              <polygon class="arrowhead" points="272,288 260,282.4 260,293.6 " fill="black" transform="rotate(0,264,288)"/>
              <polygon class="arrowhead" points="184,224 172,218.4 172,229.6 " fill="black" transform="rotate(0,176,224)"/>
              <polygon class="arrowhead" points="24,32 12,26.4 12,37.6 " fill="black" transform="rotate(180,16,32)"/>
              <g class="text">
                <text x="8" y="36">|</text>
                <text x="152" y="36">OWNER</text>
                <text x="400" y="36">|</text>
                <text x="476" y="36">MANUFACTURER</text>
                <text x="40" y="68">On-site</text>
                <text x="216" y="68">Cloud</text>
                <text x="44" y="100">Pledge</text>
                <text x="456" y="100">Cloud</text>
                <text x="472" y="116">Registrar</text>
                <text x="468" y="180">MASA</text>
                <text x="208" y="228">EST</text>
                <text x="220" y="244">Server</text>
                <text x="316" y="292">CA</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
|<--------------OWNER--------------------------->|   MANUFACTURER

 On-site                Cloud
+--------+                                          +-----------+
| Pledge |----------------------------------------->| Cloud     |
+--------+                                          | Registrar |
    |                                               +-----+-----+
    |                                                     |
    |                                               +-----+-----+
    |                                               |   MASA    |
    |                                               +-----------+
    |                 +-----------+
    +---------------->| EST       |
                      | Server    |
                      +-----------+
                            |    +-----------+
                            +--->|    CA     |
                                 +-----------+
]]></artwork>
        </artset>
      </figure>
      <t>As depicted in <xref target="arch-one"/> and <xref target="arch-two"/>, there are a number of parties involve in the process.
The Manufacturer, or Original Equipment Manufacturer (OEM) builds the device, but also is expected to run the MASA, or arrange for it to exist.</t>
      <t>The network operator or enterprise is the intended owner of the new device: the pledge.
This could be the enterprise itself, or in many cases there is some outsourced IT department that might be involved.
They are the operator of the Registrar or EST Server.
They may also operate the CA, or they may contract those services from another entity.</t>
      <t>There is a potential additional party involved who may operate the Cloud Registrar: the value added reseller (VAR).
The VAR works with the OEM to ship products with the right configuration to the owner.
For example, SIP telephones or other conferencing systems may be installed by this VAR, often shipped directly from a warehouse to the customer's remote office location.
The VAR and manufacturer are aware of which devices have been shipped to the VAR through sales channel integrations, and so the manufacturer's Cloud Registrar is able to redirect the pledge through a chain of Cloud Registrars, as explained in <xref target="redirect-response"/>.</t>
      <section anchor="network-connectivity">
        <name>Network Connectivity</name>
        <t>The assumption is that the pledge already has network connectivity prior to connecting to the Cloud Registrar.
The pledge must have an IP address that is able to make DNS queries, and be able to send requests to the Cloud Registrar.
There are many ways to accomplish this, from routeable IPv4 or IPv6 addresses, to use of NAT44, to using HTTP or SOCKS proxies.
There are DHCP options that a network operator can configure to accomplish any of these options.
The pledge operator has already connected the pledge to the network, and the mechanism by which this has happened is out of scope of this document.
For many telephony applications, this is typically going to be a wired connection.</t>
        <t>For wireless use cases, some kind of existing Wi-Fi onboarding mechanism such as WPS.
Similarly, what address space the IP address belongs to, whether it is an IPv4 or IPv6 address, or if there are firewalls or proxies deployed between the pledge and the cloud registrar are all out of scope of this document.</t>
      </section>
      <section anchor="pledge-certificate-identity-considerations">
        <name>Pledge Certificate Identity Considerations</name>
        <t>BRSKI section 5.9.2 specifies that the pledge MUST send an EST <xref target="RFC7030"/> CSR Attributes request to the EST server before it requests a client certificate.
For the use case described in <xref target="bootstrap-via-cloud-registrar-and-owner-registrar"/>, the Owner Registar operates as the EST server as described in BRSKI section 2.5.3, and the pledge sends the CSR Attributes request to the Owner Registrar.
For the use case described in <xref target="bootstrap-via-cloud-registrar-and-owner-est-service"/>, the EST server operates as described in <xref target="RFC7030"/>, and the pledge sends the CSR Attributes request to the EST server.
Note that the pledge only sends the CSR Attributes request to the entity acting as the EST server as per <xref target="RFC7030"/> section 2.6, and MUST NOT send the CSR Attributes request to the Cloud Registrar.
The EST server MAY use this mechanism to instruct the pledge about the identities it should include in the CSR request it sends as part of enrollment.
The EST server may use this mechanism to tell the pledge what Subject or Subject Alternative Name identity information to include in its CSR request.
This can be useful if the Subject must have a specific value in order to complete enrollment with the CA.</t>
        <t>EST <xref target="RFC7030"/> is not clear on how the CSR Attributes response should be structured, and in particular is not clear on how a server can instruct a client to include specific attribute values in its CSR.
<xref target="I-D.ietf-lamps-rfc7030-csrattrs"/> clarifies how a server can use CSR Attributes response to specify specific values for attributes that the client should include in its CSR.</t>
        <t>For example, the pledge may only be aware of its IDevID Subject which includes a manufacturer serial number, but must include a specific fully qualified domain name in the CSR in order to complete domain ownership proofs required by the CA.</t>
        <t>As another example, the Registrar may deem the manufacturer serial number in an IDevID as personally identifiable information, and may want to specify a new random opaque identifier that the pledge should use in its CSR.</t>
      </section>
    </section>
    <section anchor="protocol-operation">
      <name>Protocol Operation</name>
      <t>This section outlines the high level protocol requirements and operations that take place. Section <xref target="protocol-details"/> outlines the exact sequence of message interactions between the pledge, the Cloud Registrar, the Owner Registrar and the Owner EST server.</t>
      <section anchor="pledge-sends-voucher-request-to-cloud-registrar">
        <name>Pledge Sends Voucher Request to Cloud Registrar</name>
        <section anchor="cloud-registrar-discovery">
          <name>Cloud Registrar Discovery</name>
          <t>BRSKI defines how a pledge MAY contact a well-known URI of a Cloud Registrar if a local domain Registrar cannot be discovered.
Additionally, certain pledge types might never attempt to discover a local domain Registrar and might automatically bootstrap against a Cloud Registrar.</t>
          <t>The details of the URI are manufacturer specific, with BRSKI giving the example "brski-registrar.manufacturer.example.com".</t>
          <t>The Pledge SHOULD be provided with the entire URI of the Cloud Registrar, including the protocol and path components, which are typically "https://" and "/.well-known/brski", respectively.</t>
        </section>
        <section anchor="pledge-cloud-registrar-tls-establishment-details">
          <name>Pledge - Cloud Registrar TLS Establishment Details</name>
          <t>According to <xref section="2.7" sectionFormat="comma" target="BRSKI"/>, the pledge MUST use an Implicit Trust Anchor database (see EST <xref target="RFC7030"/>) to authenticate the Cloud Registrar service.
The pledge MUST establish a mutually authenticated TLS connection with the Cloud Registrar.
Unlike the procedures documented in BRSKI section 5.1, the pledge MUST NOT establish a provisional TLS connection with the Cloud Registrar.</t>
          <t>Pledges MUST and Cloud/Owner Registrars SHOULD support the use of the "server_name" TLS extension (SNI, RFC6066).
Pledges SHOULD send a valid "server_name" extension whenever they know the domain name of the registrar they connect to, unless it is known that Cloud or Owner Registrars for this pledge implementation will never need to be deployed in a cloud setting requiring the "server_name" extension.</t>
          <t>The Pledge MUST be manufactured with pre-loaded trust anchors that are used to verify the identity of the Cloud Registar when establishing the TLS connection.
The TLS connection can be verified using a public Web PKI trust anchor using <xref target="RFC6125"/> DNS-ID mechanisms or a pinned certification authority.
This is a local implementation decision.
Refer to <xref target="trust-anchors-for-cloud-registrar"/> for trust anchor security considerations.</t>
          <t>The Cloud Registrar MUST verify the identity of the pledge by sending a TLS CertificateRequest message to the pledge during TLS session establishment.
The Cloud Registrar MAY include a certificate_authorities field in the message to specify the set of allowed IDevID issuing CAs that pledges may use when establishing connections with the Cloud Registrar.</t>
          <t>To protect itself against DoS attacks, the Cloud Registrar SHOULD reject TLS connections when it can determine during TLS authentication that it cannot support the pledge, for example because the plege cannot provide an IDevID signed by a CA recognized/supported by the Cloud Registrar.</t>
        </section>
        <section anchor="pledge-sends-voucher-request-message">
          <name>Pledge Sends Voucher Request Message</name>
          <t>After the pledge has established a mutually authenticated TLS connection with the Cloud Registrar, the pledge generates a voucher request message as outlined in BRSKI section 5.2, and sends the voucher request message to the Cloud Registrar.</t>
        </section>
      </section>
      <section anchor="cloud-registrar-processes-voucher-request-message">
        <name>Cloud Registrar Processes Voucher Request Message</name>
        <t>The Cloud Registrar must determine pledge ownership.
Prior to ownership determination, the Registrar checks the request for correctness and if it is unwilling or unable to handle the request, it MUST return a suitable 4xx or 5xx error response to the pledge as defined by <xref target="BRSKI"/> and HTTP.
In the case of an unknown pledge a 404 is returned, for a malformed request 400 is returned, or in case of server overload 503 is returned.</t>
        <t>If the request is correct and the Registrar is able to handle it, but unable to determine ownership, then it MUST return a 401 Unauthorized response to the pledge.
This signals to the Pledge that there is currently no known owner domain for it, but that retrying later might resolve this situation.
In this scenario, the Registrar SHOULD include a Retry-After header that includes a time to defer.
A pledge with some kind of indicator (such as a screen or LED) SHOULD consider this a bootstrapping failure, and indicate this to the operator.</t>
        <t>If the Cloud Registrar successfully determines ownership, then it MUST take one of the following actions:</t>
        <ul spacing="normal">
          <li>
            <t>error: return a suitable 4xx or 5xx error response (as defined by <xref target="BRSKI"/> and HTTP) to the pledge if the request processing failed for any reason</t>
          </li>
          <li>
            <t>redirect to owner registrar: redirect the pledge to an owner registrar via 307 response code</t>
          </li>
          <li>
            <t>redirect to owner EST server: issue a voucher (containing an est-domain attribute) and return a 200 response code</t>
          </li>
        </ul>
        <section anchor="pledgeOwnershipLookup">
          <name>Pledge Ownership Look Up</name>
          <t>The Cloud Registrar needs some suitable mechanism for knowing the correct owner of a connecting pledge based on the presented identity certificate.
For example, if the pledge establishes TLS using an IDevID that is signed by a known manufacturing CA, the Registrar could extract the serial number from the IDevID and use this to look up a database of pledge IDevID serial numbers to owners.</t>
          <t>The mechanism by which the Cloud Registrar determines pledge ownership is, however, out-of-scope of this document.
The Cloud Registrar is strongly tied to the manufacturers' processes for device identity.</t>
        </section>
        <section anchor="bootstrap-via-cloud-registrar-and-owner-registrar-1">
          <name>Bootstrap via Cloud Registrar and Owner Registrar</name>
          <t>Once the Cloud Registrar has determined pledge ownership, the Cloud Registrar MAY redirect the pledge to the owner Registrar in order to complete bootstrap.
If the owner wants the Cloud Registar to redirect pledges to their Owner Registrar, the owner must register their Owner Registrar URI with cloud Registar.
The mechanism by which pledge owners register their Owner Registrar URI with the Cloud Registrar is out-of-scope of this document.</t>
          <t>In case of redirection, the Cloud Registrar replies to the voucher request with an HTTP 307 Temporary Redirect response code, including the owner's local domain in the HTTP Location header.</t>
        </section>
        <section anchor="bootstrap-via-cloud-registrar-and-owner-est-service-1">
          <name>Bootstrap via Cloud Registrar and Owner EST Service</name>
          <t>If the Cloud Registrar issues a voucher, it returns the voucher in an HTTP response with a 200 response code.</t>
          <t>The Cloud Registrar MAY issue a 202 response code if it is willing to issue a voucher, but will take some time to prepare the voucher.</t>
          <t>The voucher MUST include the new "est-domain" field as defined in <xref target="RFC8366bis"/>.
This tells the pledge where the domain of the EST service to use for completing certificate enrollment.</t>
          <t>The voucher MAY include the new "additional-configuration" field.
This field points the pledge to a URI where pledge specific additional configuration information may be retrieved.
For example, a SIP phone might retrieve a manufacturer specific configuration file that contains information about how to do SIP Registration.
One advantage of this mechanism over current mechanisms like DHCP options 120 defined in <xref target="RFC3361"/> or option 125 defined in <xref target="RFC3925"/> is that the voucher is returned in a confidential (TLS-protected) transport, and so can include device-specific credentials for retrieval of the configuration.</t>
          <t>The exact Pledge and Registrar behavior for handling and specifying the "additional-configuration" field is out-of-scope of this document.</t>
        </section>
      </section>
      <section anchor="pledge-handles-cloud-registrar-response">
        <name>Pledge Handles Cloud Registrar Response</name>
        <section anchor="redirect-response">
          <name>Bootstrap via Cloud Registrar and Owner Registrar</name>
          <t>The Cloud Registrar has returned a 307 response to a voucher request.
The Cloud Registrar may be redirecting the pledge to the Owner Registrar, or to a different Cloud Registrar operated by a VAR.</t>
          <t>The pledge MUST restart its bootstrapping process by sending a new voucher
request message (with a fresh nonce) using the location provided in the HTTP redirect.
The pledge SHOULD attempt to validate the identity of the Cloud Registrar specified in the 307 response using its Implicit Trust Anchor Database.
If validation of this identity succeeds using the Implicit Trust Anchor Database, then the pledge MAY accept a subsequent 307 response from this Cloud Registrar.
The pledge MAY continue to follow a number of 307 redirects provided that each 307 redirect target Registrar identity is validated using the Implicit Trust Anchor Database.
However, if validation of a 307 redirect target Registrar identity using the Implicit Trust Anchor Database fails, then the pledge MUST NOT accept any further 307 responses from the Registrar, MUST establish a provisional TLS connection with the Registar, and MUST validate the identity of the Registrar using standard BRSKI mechanisms.</t>
          <t>The pledge MUST process any error messages as defined in <xref target="BRSKI"/>, and in case of error MUST restart the process from its provisioned Cloud Registrar.
The exception is that a 401 Unauthorized code SHOULD cause the Pledge to retry a number of times over a period of a few hours.</t>
          <t>The pledge MUST never visit a location that it has already been to, in order to avoid any kind of cycle.
If it happens that a location is repeated, then the pledge MUST fail the bootstrapping attempt and go back to the beginning, which includes listening to other sources of bootstrapping information as specified in <xref target="BRSKI"/> section 4.1 and 5.0.
The pledge MUST also have a limit on the total number of redirects it will a follow, as the cycle detection requires that it keep track of the places it has been.
That limit MUST be in the dozens or more redirects such that no reasonable delegation path would be affected.</t>
          <t>When the pledge cannot validate the connection, then it MUST establish a provisional TLS connection with the specified local domain Registrar at the location specified.</t>
          <t>The pledge then sends a voucher request message via the local domain Registrar.</t>
          <t>After the pledge receives the voucher, it verifies the TLS connection to the local domain Registrar and continues with enrollment and bootstrap as per standard BRSKI operation.</t>
          <t>The pledge MUST process any error messages as defined in <xref target="BRSKI"/>, and in case of error MUST restart the process from its provisioned Cloud Registrar.</t>
          <t>The exception is that a 401 Unauthorized code SHOULD cause the Pledge to retry a number of times over a period of a few hours.</t>
        </section>
        <section anchor="bootstrap-via-cloud-registrar-and-owner-est-service-2">
          <name>Bootstrap via Cloud Registrar and Owner EST Service</name>
          <t>The Cloud Registrar returned a voucher to the pledge.
The pledge MUST perform voucher verification as per BRSKI section 5.6.1.</t>
          <t>The pledge SHOULD extract the "est-domain" field from the voucher, and SHOULD continue with EST enrollment as per standard EST operation. Note that the pledge has been instructed to connect to the EST server specified in the "est-domain" field, and therefore SHOULD use EST mechanisms, and not BRSKI mechanisms, when connecting to the EST server.</t>
        </section>
      </section>
    </section>
    <section anchor="protocol-details">
      <name>Protocol Details</name>
      <section anchor="redirect2Registrar">
        <name>Bootstrap via Cloud Registrar and Owner Registrar</name>
        <t>This flow illustrates the Bootstrap via Cloud Registrar and Owner Registrar use case.
A pledge is bootstrapping in a remote location with no local domain Registrar.
The assumption is that the owner Registrar domain is accessible, and the pledge can establish a network connection with the owner Registrar.
This may require that the owner network firewall exposes the owner Registrar on the public internet.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="592" width="496" viewBox="0 0 496 592" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 40,88 L 40,576" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
              <path d="M 192,256 L 192,304" fill="none" stroke="black"/>
              <path d="M 224,312 L 224,576" fill="none" stroke="black"/>
              <path d="M 288,256 L 288,304" fill="none" stroke="black"/>
              <path d="M 400,32 L 400,80" fill="none" stroke="black"/>
              <path d="M 400,256 L 400,304" fill="none" stroke="black"/>
              <path d="M 440,88 L 440,224" fill="none" stroke="black"/>
              <path d="M 440,312 L 440,576" fill="none" stroke="black"/>
              <path d="M 480,256 L 480,304" fill="none" stroke="black"/>
              <path d="M 488,32 L 488,80" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 400,32 L 488,32" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 400,80 L 488,80" fill="none" stroke="black"/>
              <path d="M 48,128 L 432,128" fill="none" stroke="black"/>
              <path d="M 48,176 L 432,176" fill="none" stroke="black"/>
              <path d="M 48,224 L 432,224" fill="none" stroke="black"/>
              <path d="M 192,256 L 288,256" fill="none" stroke="black"/>
              <path d="M 400,256 L 480,256" fill="none" stroke="black"/>
              <path d="M 192,304 L 288,304" fill="none" stroke="black"/>
              <path d="M 400,304 L 480,304" fill="none" stroke="black"/>
              <path d="M 48,336 L 216,336" fill="none" stroke="black"/>
              <path d="M 48,384 L 216,384" fill="none" stroke="black"/>
              <path d="M 232,400 L 432,400" fill="none" stroke="black"/>
              <path d="M 232,448 L 432,448" fill="none" stroke="black"/>
              <path d="M 48,480 L 216,480" fill="none" stroke="black"/>
              <path d="M 48,528 L 216,528" fill="none" stroke="black"/>
              <path d="M 48,576 L 216,576" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,400 428,394.4 428,405.6 " fill="black" transform="rotate(0,432,400)"/>
              <polygon class="arrowhead" points="440,176 428,170.4 428,181.6 " fill="black" transform="rotate(0,432,176)"/>
              <polygon class="arrowhead" points="440,128 428,122.4 428,133.6 " fill="black" transform="rotate(0,432,128)"/>
              <polygon class="arrowhead" points="240,448 228,442.4 228,453.6 " fill="black" transform="rotate(180,232,448)"/>
              <polygon class="arrowhead" points="224,576 212,570.4 212,581.6 " fill="black" transform="rotate(0,216,576)"/>
              <polygon class="arrowhead" points="224,528 212,522.4 212,533.6 " fill="black" transform="rotate(0,216,528)"/>
              <polygon class="arrowhead" points="224,384 212,378.4 212,389.6 " fill="black" transform="rotate(0,216,384)"/>
              <polygon class="arrowhead" points="224,336 212,330.4 212,341.6 " fill="black" transform="rotate(0,216,336)"/>
              <polygon class="arrowhead" points="56,528 44,522.4 44,533.6 " fill="black" transform="rotate(180,48,528)"/>
              <polygon class="arrowhead" points="56,480 44,474.4 44,485.6 " fill="black" transform="rotate(180,48,480)"/>
              <polygon class="arrowhead" points="56,336 44,330.4 44,341.6 " fill="black" transform="rotate(180,48,336)"/>
              <polygon class="arrowhead" points="56,224 44,218.4 44,229.6 " fill="black" transform="rotate(180,48,224)"/>
              <polygon class="arrowhead" points="56,128 44,122.4 44,133.6 " fill="black" transform="rotate(180,48,128)"/>
              <g class="text">
                <text x="44" y="52">Pledge</text>
                <text x="432" y="52">Cloud</text>
                <text x="440" y="68">Registrar</text>
                <text x="60" y="116">1.</text>
                <text x="164" y="116">Mutually-authenticated</text>
                <text x="272" y="116">TLS</text>
                <text x="60" y="164">2.</text>
                <text x="104" y="164">Voucher</text>
                <text x="168" y="164">Request</text>
                <text x="60" y="212">3.</text>
                <text x="88" y="212">307</text>
                <text x="144" y="212">Location:</text>
                <text x="268" y="212">owner-ra.example.com</text>
                <text x="224" y="276">Owner</text>
                <text x="436" y="276">MASA</text>
                <text x="240" y="292">Registrar</text>
                <text x="60" y="324">4.</text>
                <text x="120" y="324">Provisional</text>
                <text x="184" y="324">TLS</text>
                <text x="60" y="372">5.</text>
                <text x="104" y="372">Voucher</text>
                <text x="168" y="372">Request</text>
                <text x="244" y="388">6.</text>
                <text x="288" y="388">Voucher</text>
                <text x="352" y="388">Request</text>
                <text x="244" y="436">7.</text>
                <text x="288" y="436">Voucher</text>
                <text x="356" y="436">Response</text>
                <text x="60" y="468">8.</text>
                <text x="104" y="468">Voucher</text>
                <text x="172" y="468">Response</text>
                <text x="60" y="516">9.</text>
                <text x="100" y="516">Verify</text>
                <text x="144" y="516">TLS</text>
                <text x="64" y="564">10.</text>
                <text x="100" y="564">etc.</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+                                       +----------+
| Pledge |                                       | Cloud    |
|        |                                       |Registrar |
+--------+                                       +----------+
    |                                                 |
    | 1. Mutually-authenticated TLS                   |
    |<----------------------------------------------->|
    |                                                 |
    | 2. Voucher Request                              |
    |------------------------------------------------>|
    |                                                 |
    | 3. 307 Location: owner-ra.example.com           |
    |<------------------------------------------------|
    |
    |                  +-----------+             +---------+
    |                  | Owner     |             |  MASA   |
    |                  | Registrar |             |         |
    |                  +-----------+             +---------+
    | 4. Provisional TLS   |                          |
    |<-------------------->|                          |
    |                      |                          |
    | 5. Voucher Request   |                          |
    |--------------------->| 6. Voucher Request       |
    |                      |------------------------->|
    |                      |                          |
    |                      | 7. Voucher Response      |
    |                      |<-------------------------|
    | 8. Voucher Response  |                          |
    |<---------------------|                          |
    |                      |                          |
    | 9. Verify TLS        |                          |
    |<-------------------->|                          |
    |                      |                          |
    | 10. etc.             |                          |
    |--------------------->|                          |
]]></artwork>
        </artset>
        <t>The process starts, in step 1, when the Pledge establishes a Mutual TLS channel with the Cloud Registrar using artifacts created during the manufacturing process of the Pledge.</t>
        <t>In step 2, the Pledge sends a voucher request to the Cloud Registrar.</t>
        <t>The Cloud Registrar determines pledge ownership look up as outlined in <xref target="pledgeOwnershipLookup"/>, and determines the owner Registrar domain.
In step 3, the Cloud Registrar redirects the pledge to the owner Registrar domain.</t>
        <t>Steps 4 and onwards follow the standard BRSKI flow.
The pledge establishes a provisional TLS connection with the owner Registrar, and sends a voucher request to the owner Registrar.
The Registrar forwards the voucher request to the MASA.
Assuming the MASA issues a voucher, then the pledge verifies the TLS connection with the Registrar using the pinned-domain-cert from the voucher and completes the BRSKI flow.</t>
      </section>
      <section anchor="voucher2EST">
        <name>Bootstrap via Cloud Registrar and Owner EST Service</name>
        <t>This flow illustrates the Bootstrap via Cloud Registrar and Owner EST Service use case.
A pledge is bootstrapping in a location with no local domain Registrar.
The Cloud Registar is instructing the pledge to connect directly to an EST server for enrolment using EST mechanisms.
The assumption is that the EST domain is accessible, and the pledge can establish a network connection with the EST server.</t>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="608" width="496" viewBox="0 0 496 608" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
              <path d="M 40,104 L 40,592" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
              <path d="M 184,272 L 184,336" fill="none" stroke="black"/>
              <path d="M 224,344 L 224,384" fill="none" stroke="black"/>
              <path d="M 224,480 L 224,592" fill="none" stroke="black"/>
              <path d="M 272,272 L 272,336" fill="none" stroke="black"/>
              <path d="M 400,32 L 400,96" fill="none" stroke="black"/>
              <path d="M 440,104 L 440,592" fill="none" stroke="black"/>
              <path d="M 488,32 L 488,96" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 400,32 L 488,32" fill="none" stroke="black"/>
              <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
              <path d="M 400,96 L 488,96" fill="none" stroke="black"/>
              <path d="M 48,144 L 432,144" fill="none" stroke="black"/>
              <path d="M 48,192 L 432,192" fill="none" stroke="black"/>
              <path d="M 48,240 L 432,240" fill="none" stroke="black"/>
              <path d="M 184,272 L 272,272" fill="none" stroke="black"/>
              <path d="M 184,336 L 272,336" fill="none" stroke="black"/>
              <path d="M 48,384 L 216,384" fill="none" stroke="black"/>
              <path d="M 48,432 L 432,432" fill="none" stroke="black"/>
              <path d="M 48,496 L 216,496" fill="none" stroke="black"/>
              <path d="M 48,544 L 216,544" fill="none" stroke="black"/>
              <path d="M 48,592 L 216,592" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="440,432 428,426.4 428,437.6 " fill="black" transform="rotate(0,432,432)"/>
              <polygon class="arrowhead" points="440,192 428,186.4 428,197.6 " fill="black" transform="rotate(0,432,192)"/>
              <polygon class="arrowhead" points="440,144 428,138.4 428,149.6 " fill="black" transform="rotate(0,432,144)"/>
              <polygon class="arrowhead" points="224,592 212,586.4 212,597.6 " fill="black" transform="rotate(0,216,592)"/>
              <polygon class="arrowhead" points="224,496 212,490.4 212,501.6 " fill="black" transform="rotate(0,216,496)"/>
              <polygon class="arrowhead" points="224,384 212,378.4 212,389.6 " fill="black" transform="rotate(0,216,384)"/>
              <polygon class="arrowhead" points="56,544 44,538.4 44,549.6 " fill="black" transform="rotate(180,48,544)"/>
              <polygon class="arrowhead" points="56,384 44,378.4 44,389.6 " fill="black" transform="rotate(180,48,384)"/>
              <polygon class="arrowhead" points="56,240 44,234.4 44,245.6 " fill="black" transform="rotate(180,48,240)"/>
              <polygon class="arrowhead" points="56,144 44,138.4 44,149.6 " fill="black" transform="rotate(180,48,144)"/>
              <g class="text">
                <text x="44" y="52">Pledge</text>
                <text x="432" y="52">Cloud</text>
                <text x="440" y="68">Registrar</text>
                <text x="416" y="84">/</text>
                <text x="444" y="84">MASA</text>
                <text x="60" y="132">1.</text>
                <text x="164" y="132">Mutually-authenticated</text>
                <text x="272" y="132">TLS</text>
                <text x="60" y="180">2.</text>
                <text x="104" y="180">Voucher</text>
                <text x="168" y="180">Request</text>
                <text x="60" y="228">3.</text>
                <text x="104" y="228">Voucher</text>
                <text x="172" y="228">Response</text>
                <text x="288" y="228">{est-domain:fqdn}</text>
                <text x="224" y="292">RFC7030</text>
                <text x="208" y="308">EST</text>
                <text x="220" y="324">Server</text>
                <text x="60" y="372">4.</text>
                <text x="128" y="372">Authenticated</text>
                <text x="200" y="372">TLS</text>
                <text x="96" y="420">5a.</text>
                <text x="176" y="420">/voucher_status</text>
                <text x="260" y="420">POST</text>
                <text x="320" y="420">success</text>
                <text x="92" y="452">ON</text>
                <text x="136" y="452">FAILURE</text>
                <text x="184" y="452">5b.</text>
                <text x="264" y="452">/voucher_status</text>
                <text x="348" y="452">POST</text>
                <text x="60" y="484">6.</text>
                <text x="88" y="484">EST</text>
                <text x="128" y="484">Enrol</text>
                <text x="60" y="532">7.</text>
                <text x="120" y="532">Certificate</text>
                <text x="60" y="580">8.</text>
                <text x="128" y="580">/enrollstatus</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+--------+                                       +----------+
| Pledge |                                       | Cloud    |
|        |                                       |Registrar |
|        |                                       | / MASA   |
+--------+                                       +----------+
    |                                                 |
    | 1. Mutually-authenticated TLS                   |
    |<----------------------------------------------->|
    |                                                 |
    | 2. Voucher Request                              |
    |------------------------------------------------>|
    |                                                 |
    | 3. Voucher Response  {est-domain:fqdn}          |
    |<------------------------------------------------|
    |                                                 |
    |                 +----------+                    |
    |                 | RFC7030  |                    |
    |                 | EST      |                    |
    |                 | Server   |                    |
    |                 +----------+                    |
    |                      |                          |
    | 4. Authenticated TLS |                          |
    |<-------------------->|                          |
    |                                                 |
    |     5a. /voucher_status POST  success           |
    |------------------------------------------------>|
    |     ON FAILURE 5b. /voucher_status POST         |
    |                                                 |
    | 6. EST Enrol         |                          |
    |--------------------->|                          |
    |                      |                          |
    | 7. Certificate       |                          |
    |<---------------------|                          |
    |                      |                          |
    | 8. /enrollstatus     |                          |
    |--------------------->|                          |
]]></artwork>
        </artset>
        <t>The process starts, in step 1, when the Pledge establishes a Mutual TLS channel with the Cloud Registrar/MASA using artifacts created during the manufacturing process of the Pledge.
In step 2, the Pledge sends a voucher request to the Cloud Registrar/MASA, and in the response in step 3, the Pledge receives an <xref target="RFC8366bis"/> format voucher from the Cloud Registrar/MASA that includes its assigned EST domain in the est-domain attribute.</t>
        <t>In step 4, the pledge establishes a TLS connection with the EST RA specified in the voucher est-domain attribute.
The connection may involve crossing the Internet requiring a DNS look up on the provided name.
It may also be a local address that includes an IP address literal including both <xref target="RFC1918"/> and IPv6 Unique Local Addresses <xref target="RFC4193"/>.
The artifact provided in the pinned-domain-cert is trested as a trust anchor, and is used to verify the EST server identity.
The EST server identity MUST be verified using the pinned-domain-cert value provided in the voucher as described in <xref target="RFC7030"/> section 3.3.1.</t>
        <t>There is a case where the pinned-domain-cert is the identical End-Entity (EE) Certificate as the EST server.
It also explicitly includes the case where the EST server has a self-signed EE Certificate, but it may also be an EE certificate that is part of a larger PKI.
If the certificate is not a self-signed or EE certificate, then the Pledge SHOULD apply <xref target="RFC6125"/> DNS-ID verification on the certificate against the domain provided in the est-domain attribute.
If the est-domain was provided by with an IP address literal, then it is unlikely that it can be verified, and in that case, it is expected that either a self-signed certificate or an EE certificate will be pinned by the voucher.</t>
        <t>The Pledge also has the details it needs to be able to create the CSR request to send to the RA based on the details provided in the voucher.</t>
        <t>In steps 5.a and 5.b, the pledge may optionally notify the Cloud Registrar/MASA of the success or failure of its attempt to establish a secure TLS channel with the EST server.</t>
        <t>The Pledge then follows that, in step 6, with an EST Enroll request with the CSR and obtains the requested certificate.
The Pledge must verify that the issued certificate in step 7 has the expected identifier obtained from the Cloud Registrar/MASA in step 3.</t>
      </section>
    </section>
    <section anchor="redirected">
      <name>YANG extension for Voucher based redirect</name>
      <t><xref target="RFC8366bis"/> contains the two needed voucher extensions: est-domain and additional-configuration which are needed when a client is redirected to a local EST server.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document makes no IANA requests.</t>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <section anchor="captive-portals">
        <name>Captive Portals</name>
        <t>A Pledge may be deployed in a network where a captive portal or an intelligent home gateway that provides access control on all connections is also deployed.
Captive portals that do not follow the requirements of <xref target="RFC8952"/> section 1 may forcibly redirect HTTPS connections.
While this is a deprecated practice as it breaks TLS in a way that most users can not deal with, it is still common in many networks.</t>
        <t>When the PLedge attempts to connect to the Cloud Registrar, an incorrect connection will be detected because the Pledge will be unable to verify the TLS connection to its Cloud Registrar via DNS-ID check <xref section="6.3" sectionFormat="comma" target="RFC9525"/>.
That is, the certificate returned from the captive portal will not match.</t>
        <t>At this point a network operator who controls the captive portal, noticing the connection to what seems a legitimate destination (the Cloud Registrar), may then permit that connection.
This enables the first connection to go through.</t>
        <t>The connection is then redirected to the Registrar via 307, or to an EST server via est-domain in a voucher.
If it is a 307 redirect, then a provisional TLS connection will be initiated, and it will succeed.
The provisional TLS connection does not do <xref section="6.3" sectionFormat="comma" target="RFC9525"/> DNS-ID verification at the beginning of the connection, so a forced redirection to a captive portal system will not be detected.
The subsequent BRSKI POST of a voucher will most likely be met by a 404 or 500 HTTP code.</t>
        <t>It is RECOMMENDED therefore that the pledge look for <xref target="RFC8910"/> attributes in DHCP, and if present, use the <xref target="RFC8908"/> API to learn if it is captive.</t>
        <t>The scenarios outlined here when a Pledge is deployed behind a captive portal may result in failure scenarios, but do not constitute a secty risk, as the Pledge is correctly verifyng all TLS connections as per <xref target="BRSKI"/>.</t>
      </section>
      <section anchor="multiple-http-redirects">
        <name>Multiple HTTP Redirects</name>
        <t>If the Redirect to Registrar method is used, as described in <xref target="redirect2Registrar"/>, there may be a series of 307 redirects.
An example of why this might occur is that the manufacturer only knows that it resold the device to a particular value added reseller (VAR), and there may be a chain of such VARs.
It is important the pledge avoid being drawn into a loop of redirects.
This could happen if a VAR does not think they are authoritative for a particular device.
A "helpful" programmer might instead decide to redirect back to the manufacturer in an attempt to restart at the top:  perhaps there is another process that updates the manufacturer's database and this process is underway.
Instead, the VAR MUST return a 404 error if it cannot process the device.
This will force the device to stop, timeout, and then try all mechanisms again.</t>
        <t>There are additional considerations regarding TLS certificate validation that must be accounted for as outlined in {redirect-response}.
When the pledge follows a 307 redirect from the default Cloud Registrar, it will attempt to establish a TLS connection with the redirected target Registrar.
The pledge implementation will typically register a callback with the TLS stack, where the TLS stack allows the implementation to validate the identity of the Registrar.
The pledge should check whether the identity of the Registrar can be validated with its Implicit Trust Anchor Database and track the result, but should always return a successful validation result to the TLS stack, thus allowing the <xref target="BRSKI"/> provisional TLS connection to be established.
The pledge will then send a Voucher Request to the Registrar.
If the Registrar returns a 307 response, the pledge MUST NOT follow this redirect if the Registrar identity was not validated using its Implicit Trust Anchor Database.
If the Registar identity was validated using the Implicit Trust Anchor Database, then the pledge MAY follow the redirect.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The Cloud Registrar described in this document inherits all the strong security properties that are described in <xref target="BRSKI"/>, and none of the security mechanisms that are defined in <xref target="BRSKI"/> are bypassed or weakened by this document.
The Cloud Registrar also inherits all the potential issues that are described in <xref target="BRSKI"/>.
This includes dependency upon continued operation of the manufacturer provided MASA, as well as potential complications where a manufacturer might interfere with
resale of a device.</t>
      <t>In addition to the dependency upon the MASA, the successful enrollment of a device using a Cloud Registrar depends upon the correct and continued operation of this new service.
This internet accessible service may be operated by the manufacturer and/or by one or more value-added-resellers.
All the considerations for operation of the MASA also apply to operation of the Cloud Registrar.</t>
      <section anchor="security-updates-for-the-pledge">
        <name>Security Updates for the Pledge</name>
        <t>Unlike many other uses of BRSKI, in the Cloud Registrar case it is assumed that the Pledge has connected to a network, such as the public Internet, on which some amount of connectivity is possible, but there is no other local configuration available.
(Note: there are many possible configurations in which the device might not have unlimited connectivity to the public Internet, but for which there might be connectivity possible.
For instance, the device could be without a default route or NAT44, but able to make HTTP requests via an HTTP proxy configured via DHCP)</t>
        <t>There is another advantage to being online: the pledge may be able to contact the manufacturer before bootstrapping in order to apply the latest firmware updates.
This may also include updates to the Implicit list of Trust Anchors.
In this way, a Pledge that may have been in a dusty box in a warehouse for a long time can be updated to the latest (exploit-free) firmware before attempting bootstrapping.</t>
      </section>
      <section anchor="trust-anchors-for-cloud-registrar">
        <name>Trust Anchors for Cloud Registrar</name>
        <t>The Implicit Trust Anchor database is used to authenticate the Cloud Registrar.
This list is built-in by the manufacturer along with a DNS name to which to connect.
(The manufacturer could even build in IP addresses as a last resort)</t>
        <t>The Cloud Registrar may have a certificate that can be verified using a public (WebPKI) anchor.
If one or more public WebPKI anchors are used, it is recommended to limit the number of WebPKI anchors to only those necessary for establishing trust with the Cloud Registrar.
As another option, the Cloud Registrar may have a certificate that can be verified using a Private/Cloud PKI anchor as described in <xref target="I-D.irtf-t2trg-taxonomy-manufacturer-anchors"/> section 3.
The trust anchor, or trust anchors, to use is an implementation decision and out of scope of this document.</t>
        <t>The pledge may have any kind of Trust Anchor built in: from full multi-level WebPKI to the single self-signed certificate used by the Cloud Registrar.
There are many tradeoffs to having more or less of the PKI present in the Pledge, which is addressed in part in <xref target="I-D.irtf-t2trg-taxonomy-manufacturer-anchors"/> in sections 3 and 5.</t>
      </section>
      <section anchor="considerationsfor-http-redirect">
        <name>Considerations for HTTP Redirect</name>
        <t>When the default Cloud Registrar redirects a Pledge using HTTP 307 to an Owner Registrar, or another Cloud Registrar operated by a VAR, the Pledge MUST establish a provisional TLS connection with the Registrar as specified in <xref target="BRSKI"/>.
The Pledge is unable to determine whether it has been redirected to another Cloud Registrar that is operated by a VAR, or it it has been redirected to an Owner Registrar, and does not differentiate between the two scenarios.</t>
      </section>
      <section anchor="considerations-for-voucher-est-domain">
        <name>Considerations for Voucher est-domain</name>
        <t>A Cloud Registrar supporting the same set of pledges as a MASA may be integrated with the MASA to avoid the need for a network based API between them, and without changing their external behavior as specified here.</t>
        <t>When a Cloud Registrar handles the scenario described in {bootstrapping-with-no-owner-registrar} by the returning "est-domain" attribute in the voucher, the Cloud Registrar actually does all the voucher processing as specified in <xref target="BRSKI"/>.
This is an example deployment scenario where the Cloud Registrar may be operated by the same entity as the MASA, and it may even be integrated with the MASA.</t>
        <t>When a voucher is issued by the Cloud Registrar and that voucher contains an "est-domain" attribute, the Pledge MUST verify the TLS connection with this EST server using the "pinned-domain-cert" attribute in the voucher.</t>
        <t>The reduced operational security mechanisms outlined in <xref target="BRSKI"/> sections 7.3 and 11 MAY be supported when the pledge connects with the EST server.
These mechanisms reduce the security checks that take place when the pledge enrolls with the EST server.
Refer to <xref target="BRSKI"/> sections 7.3 and 11 for further details.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank for following for their detailed reviews: (ordered
by last name): Esko Dijk, Sheng Jiang.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8366">
          <front>
            <title>A Voucher Artifact for Bootstrapping Protocols</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="M. Pritikin" initials="M." surname="Pritikin"/>
            <author fullname="T. Eckert" initials="T." surname="Eckert"/>
            <date month="May" year="2018"/>
            <abstract>
              <t>This document defines a strategy to securely assign a pledge to an owner using an artifact signed, directly or indirectly, by the pledge's manufacturer. This artifact is known as a "voucher".</t>
              <t>This document defines an artifact format as a YANG-defined JSON document that has been signed using a Cryptographic Message Syntax (CMS) structure. Other YANG-derived formats are possible. The voucher artifact is normally generated by the pledge's manufacturer (i.e., the Manufacturer Authorized Signing Authority (MASA)).</t>
              <t>This document only defines the voucher artifact, leaving it to other documents to describe specialized protocols for accessing it.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8366"/>
          <seriesInfo name="DOI" value="10.17487/RFC8366"/>
        </reference>
        <reference anchor="BRSKI">
          <front>
            <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title>
            <author fullname="M. Pritikin" initials="M." surname="Pritikin"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="T. Eckert" initials="T." surname="Eckert"/>
            <author fullname="M. Behringer" initials="M." surname="Behringer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document specifies automated bootstrapping of an Autonomic Control Plane. To do this, a Secure Key Infrastructure is bootstrapped. This is done using manufacturer-installed X.509 certificates, in combination with a manufacturer's authorizing service, both online and offline. We call this process the Bootstrapping Remote Secure Key Infrastructure (BRSKI) protocol. Bootstrapping a new device can occur when using a routable address and a cloud service, only link-local connectivity, or limited/disconnected networks. Support for deployment models with less stringent security requirements is included. Bootstrapping is complete when the cryptographic identity of the new key infrastructure is successfully deployed to the device. The established secure connection can be used to deploy a locally issued certificate to the device as well.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8995"/>
          <seriesInfo name="DOI" value="10.17487/RFC8995"/>
        </reference>
        <reference anchor="RFC8366bis">
          <front>
            <title>A Voucher Artifact for Bootstrapping Protocols</title>
            <author fullname="Kent Watsen" initials="K." surname="Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software</organization>
            </author>
            <author fullname="Max Pritikin" initials="M." surname="Pritikin">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Toerless Eckert" initials="T. T." surname="Eckert">
              <organization>Futurewei Technologies Inc.</organization>
            </author>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This document defines a strategy to securely assign a pledge to an
   owner using an artifact signed, directly or indirectly, by the
   pledge's manufacturer.  This artifact is known as a "voucher".

   This document defines an artifact format as a YANG-defined JSON or
   CBOR document that has been signed using a variety of cryptographic
   systems.

   The voucher artifact is normally generated by the pledge's
   manufacturer (i.e., the Manufacturer Authorized Signing Authority
   (MASA)).

   This document updates RFC8366, merging a number of extensions into
   the YANG.  The RFC8995 voucher request is also merged into this
   document.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-anima-rfc8366bis-12"/>
        </reference>
        <reference anchor="RFC7030">
          <front>
            <title>Enrollment over Secure Transport</title>
            <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin"/>
            <author fullname="P. Yee" initials="P." role="editor" surname="Yee"/>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>This document profiles certificate enrollment for clients using Certificate Management over CMS (CMC) messages over a secure transport. This profile, called Enrollment over Secure Transport (EST), describes a simple, yet functional, certificate management protocol targeting Public Key Infrastructure (PKI) clients that need to acquire client certificates and associated Certification Authority (CA) certificates. It also supports client-generated public/private key pairs as well as key pairs generated by the CA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7030"/>
          <seriesInfo name="DOI" value="10.17487/RFC7030"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="I-D.ietf-lamps-rfc7030-csrattrs">
          <front>
            <title>Clarification and enhancement of RFC7030 CSR Attributes definition</title>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Owen Friel" initials="O." surname="Friel">
              <organization>Cisco</organization>
            </author>
            <author fullname="David von Oheimb" initials="D." surname="von Oheimb">
              <organization>Siemens</organization>
            </author>
            <author fullname="Dan Harkins" initials="D." surname="Harkins">
              <organization>The Industrial Lounge</organization>
            </author>
            <date day="23" month="June" year="2024"/>
            <abstract>
              <t>   The Enrollment over Secure Transport (EST, RFC7030) is ambiguous in
   its specification of the CSR Attributes Response.  This has resulted
   in implementation challenges and implementor confusion.

   This document updates RFC7030 (EST) and clarifies how the CSR
   Attributes Response can be used by an EST server to specify both CSR
   attribute OIDs and also CSR attribute values, in particular X.509
   extension values, that the server expects the client to include in
   subsequent CSR request.

   Moreover, it provides new convenient and straightforward approach:
   using a template for CSR contents that may be partially filled in by
   the server.  This also allows specifying a subject Distinguished Name
   (DN).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-lamps-rfc7030-csrattrs-10"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6125">
          <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 fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="J. Hodges" initials="J." surname="Hodges"/>
            <date month="March" year="2011"/>
            <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>
        <reference anchor="I-D.irtf-t2trg-taxonomy-manufacturer-anchors">
          <front>
            <title>A Taxonomy of operational security considerations for manufacturer installed keys and Trust Anchors</title>
            <author fullname="Michael Richardson" initials="M." surname="Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <date day="30" month="January" year="2024"/>
            <abstract>
              <t>   This document provides a taxonomy of methods used by manufacturers of
   silicon and devices to secure private keys and public trust anchors.
   This deals with two related activities: how trust anchors and private
   keys are installed into devices during manufacturing, and how the
   related manufacturer held private keys are secured against
   disclosure.

   This document does not evaluate the different mechanisms, but rather
   just serves to name them in a consistent manner in order to aid in
   communication.

   RFCEDITOR: please remove this paragraph.  This work is occurring in
   https://github.com/mcr/idevid-security-considerations

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-taxonomy-manufacturer-anchors-03"/>
        </reference>
        <reference anchor="RFC3361">
          <front>
            <title>Dynamic Host Configuration Protocol (DHCP-for-IPv4) Option for Session Initiation Protocol (SIP) Servers</title>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <date month="August" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3361"/>
          <seriesInfo name="DOI" value="10.17487/RFC3361"/>
        </reference>
        <reference anchor="RFC3925">
          <front>
            <title>Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4 (DHCPv4)</title>
            <author fullname="J. Littlefield" initials="J." surname="Littlefield"/>
            <date month="October" year="2004"/>
            <abstract>
              <t>The Dynamic Host Configuration Protocol (DHCP) options for Vendor Class and Vendor-Specific Information can be limiting or ambiguous when a DHCP client represents multiple vendors. This document defines two new options, modeled on the IPv6 options for vendor class and vendor-specific information, that contain Enterprise Numbers to remove ambiguity. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3925"/>
          <seriesInfo name="DOI" value="10.17487/RFC3925"/>
        </reference>
        <reference anchor="RFC1918">
          <front>
            <title>Address Allocation for Private Internets</title>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <author fullname="B. Moskowitz" initials="B." surname="Moskowitz"/>
            <author fullname="D. Karrenberg" initials="D." surname="Karrenberg"/>
            <author fullname="G. J. de Groot" initials="G. J." surname="de Groot"/>
            <author fullname="E. Lear" initials="E." surname="Lear"/>
            <date month="February" year="1996"/>
            <abstract>
              <t>This document describes address allocation for private internets. 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="5"/>
          <seriesInfo name="RFC" value="1918"/>
          <seriesInfo name="DOI" value="10.17487/RFC1918"/>
        </reference>
        <reference anchor="RFC4193">
          <front>
            <title>Unique Local IPv6 Unicast Addresses</title>
            <author fullname="R. Hinden" initials="R." surname="Hinden"/>
            <author fullname="B. Haberman" initials="B." surname="Haberman"/>
            <date month="October" year="2005"/>
            <abstract>
              <t>This document defines an IPv6 unicast address format that is globally unique and is intended for local communications, usually inside of a site. These addresses are not expected to be routable on the global Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4193"/>
          <seriesInfo name="DOI" value="10.17487/RFC4193"/>
        </reference>
        <reference anchor="RFC8952">
          <front>
            <title>Captive Portal Architecture</title>
            <author fullname="K. Larose" initials="K." surname="Larose"/>
            <author fullname="D. Dolson" initials="D." surname="Dolson"/>
            <author fullname="H. Liu" initials="H." surname="Liu"/>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document describes a captive portal architecture. Network provisioning protocols such as DHCP or Router Advertisements (RAs), an optional signaling protocol, and an HTTP API are used to provide the solution.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8952"/>
          <seriesInfo name="DOI" value="10.17487/RFC8952"/>
        </reference>
        <reference anchor="RFC9525">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.</t>
              <t>This document obsoletes RFC 6125.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
        <reference anchor="RFC8910">
          <front>
            <title>Captive-Portal Identification in DHCP and Router Advertisements (RAs)</title>
            <author fullname="W. Kumari" initials="W." surname="Kumari"/>
            <author fullname="E. Kline" initials="E." surname="Kline"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>In many environments offering short-term or temporary Internet access (such as coffee shops), it is common to start new connections in a captive portal mode. This highly restricts what the user can do until the user has satisfied the captive portal conditions.</t>
              <t>This document describes a DHCPv4 and DHCPv6 option and a Router Advertisement (RA) option to inform clients that they are behind some sort of captive portal enforcement device, and that they will need to satisfy the Captive Portal conditions to get Internet access. It is not a full solution to address all of the issues that clients may have with captive portals; it is designed to be one component of a standardized approach for hosts to interact with such portals. While this document defines how the network operator may convey the captive portal API endpoint to hosts, the specific methods of satisfying and interacting with the captive portal are out of scope of this document.</t>
              <t>This document replaces RFC 7710, which used DHCP code point 160. Due to a conflict, this document specifies 114. Consequently, this document also updates RFC 3679.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8910"/>
          <seriesInfo name="DOI" value="10.17487/RFC8910"/>
        </reference>
        <reference anchor="RFC8908">
          <front>
            <title>Captive Portal API</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Thakore" initials="D." role="editor" surname="Thakore"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This document describes an HTTP API that allows clients to interact with a Captive Portal system. With this API, clients can discover how to get out of captivity and fetch state about their Captive Portal sessions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8908"/>
          <seriesInfo name="DOI" value="10.17487/RFC8908"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIABbrxGYAA+19a3MbyZHgd/yKPk7EWdwBIJF6jMXYtZemODs8SyKPpGbO
4XA4GugC0KtGN9zVIAVL8m+533K/7PJZj+4G+JhZn/diGTEaEuiuysrKyndm
jUajQZM3hTlK9n53efX7s+SkqNZZcmnmuW3qtN4bpJNJbW6OEvp6dPL2/MOb
QVZNy3QJL2V1OmtGuWlmo7TMl+loUtuP+WiKg4yevR5M08bMq3pzlNgmG+Sr
+ihp6rVtDp89e/3scDCwTVpmf06LqoTBNsYOVvlR8semmg4TW9VNbWYWftss
8Zc/DQbpullU9dEgGQ0S+MlLe5Scj5Pv69wU9AlDdX5ryuDDqp4fJSe5nVb0
p1mmeXGUVDN84F+n+Pl4Wi2jQS/HydXCfFyM/rC2ZhYMfZnP0rTpfElTnNal
bZL/nvyhWpfzcKqaXhrbMSLqX+f4YWfGd2MYe7pI68xWZTDhO/zQFO0vacIr
QJ4plmmZXFWz5jatTfJTVX+04dzLaf0tTWv14fE0HQzKql6mTX5jAJnJ5fcn
v37+6tVR8uP5h5MfTi/hI9rtI/rm9euX/plJDrCejd6Mgz2vZ1P5ajDIy1lr
5FcHhy/xV3qphpeaw6aej5r0U1VWy80IIFrP0mmzrk0NA05hg+3RYHBjyjUN
Ma+r9eoooangT14V/fWvCMMYMIFP5c1iPZEvRrfzpwEhDgaj0ShJJ0jQ02Yw
+F1VNfj7apWXcyD1ZdWY5MpMAYLk92aTnJWzOoUH1gSUTTIzy0v4/6K6TZoq
qcpJBTuRpPDFTT41iaVXiw1sJHwNu1GtTJ02VY3Alg38ZzL4Lhx0DPhoktTa
9RIGbhZAUs3CwPy5TYpqmhZJaZpb2MvWewlgF5/UqWG+DAn4xtQwcZYsTLEK
vodpkusFjAkHFmYqm8R8akyZWXqmNLc6zsQs0pu8Wtdw7BicfJaUlcDSggHG
S29gG9JJYeB0rqcLWAk8BBhZVEsDtJnUjNRqNoPRh26BOt0UkARnB164NUUx
YgRnyR5MVoxwjL1kaYDey9wucY3wdUbv3wOzg8E1LiG3Q/rXL721jdMKBpg2
CsPHsrot29xvSEiFjUhu0w0t8XYB57CNvWW6AQzCorO8NtMGYGqqWzys94UZ
Nsm0505MiQi2boM3gM57DshwI1g8SGKA0U6K3C4IEzgOcuHkFk7NPYbj/csq
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
A+Bfwg4KR7+3JfQgE6iVMJIHrbs7kSs1b12zFk5DC8xcSrB2t1yuXbvW0MG9
w/DCR39xYyuyff9/MIEe/nby1Kui/2VA3Q3nfyIDqqveffaepaPZX7Lya+e9
xxpQj4az/ROS1EPe+5JI7eAWYLa/59rjPfA91zLvQe89dn3bIYzfA3PuuHN8
/t7q8o6f8L2X6Th5KnLxz8Cym7VNLs5xOyS/u/vezzpH5++T74/P3n64PE1e
TrZN/QutD+xLJCy6hM5/eed7WxZx93z9X979HtiXYReg+773dzcDwVx9yp55
2a37vfcIfP5dzaunJHx/KRvrlzCxnvoLc/PWZXp5bO1ctEKAaTtVMuGgs5t4
2+V6jITWLTEN3frO2fGh8idXU/WUHgQ25ouoni3enW0GA05yedwNxyj0/VNe
R8FevnBaunxO68r6/BW9Kd3XFKfUy07tU1dyIFk6WGVMvdBdD8qJv/477pDn
ynmi7nlFjm0viiDjmO774IzEg9cHv5aiMOpO9qHMsSUI33x8rM3t5OEXB6+f
c+KrcUTaye7qsa1Qf8cIKV0bjcVGQW2uUJjtK3oOrAafqn/d/4WL+LdKmbeA
xD2E2rA726/T7eq33aZRz8fPNQ6pjTz54j1/w1s/KlzyD+L4tMxGp7yCJ6en
+xET7vSwGrt7HrDFI6ZBYROY8NLyFgQBovhySay+HelpOg1nk7uCW3RW4lNh
YrLWq2iXqZQvYayxTNyVHIQv6I1K0dTYYzUaNzDu46Ya2Bxw01dsHgWK5dCE
84Z3/MlxbW93/0mWNQRf3qZB1txk49L9u4fMJ3lQuScmDxebJCg7Dik0YK4p
X4I0lDd9t15K0cspqSfGYLhUvtSqtVGUaTNRItTi4zgfXrN7OZVHuwdzQ5W8
8dcqBa01WSQx9w4akGnTTZElwD+jAioddMuB8xzbJi/HqSQdTbqtolbaiAZp
StlErxQRiagKJCYrc72hdpgKkkxDN4GV24H7ZHbkJgjwR3vOrjlmxV5HeDV0
1OLUwCKuG1FUkp9vwrntLG7poXivx+G8VILj+KU4SOTmvOgICjDfuU12BBb0
fuK5TXaHeHbCn9IE/nD8/t+Chh/o3FFzkwnAJXf6RACTfR0MWhqCy+rHebF1
N9IevO6Erk5hj6Jji01ItuSYB71yZDDS1lzbNcrSU4g4tZqFaisT4uz4/XGn
GWZ8dzg2pKV7OulZf4MJvh33tGiPg9Xt6Yra6F1UdZNSjx23v5wnHncmUT8W
M3mUOfz6il5P9II7rEvJ5wgc3Zg5Bzq4TYVM/NV8fDiocTWYJ5hxUxRRhwUU
a8gd/M2EJ9F8onpkFTH5wD0ddfeCI8ci9NevXx4GIvSAlghEM6Vr5R2tYIZ4
1OkBr2LhChDtGAIAwaOkHa+oqdeU5CVwrQlwqI9cbEkIc8teVhYdjlhahpyY
Lkk0KZ9v5by2yQkDdCm3dh8XlNsw5+/iLbNO5iK2J7Wn01mBKzSk+DTSPJlT
c/4j9Xrt5HfpM77APdCTuml11Kmt5TJGN7LITmpcIFsCO/IyvBFPNDyS8sOO
VHUJXo5JtOiPm+tUeCaa6QJTBRveNao76utrjJ3NhQJtz4hDYvVTX7wbrpPa
U1qDrcTh9MJSmxwvnkXtrZGmDcmTns3YHxLlEeNeYYBH6vDjbjkoiQnfDNcs
r23TAmCOe01duUUkBF+zrle2uEwck5B6bFfdEbnK8cuA2eXBBUaagkxnIUyi
Fw3kjogPExNfg9k4TUTSc6W+YazG77Zh/FWjFStoPaTUq62JpHIpzUEZkkuW
xbvMiDMEMkRw3uF53E3ek15wlngRQYUFB3HIxUPaqwoYepk4hCht2LsJzDQq
pcE2GFj3/+wZF69IaeMZ4f/y9OT83bvT929O3wSpee10QDLvUDwqIzxAWyJo
pwm7i2VmQ20ZIjXnw0Q5gb74DA2244szquE2aV36gknBi5Ci9ocIAp4kM0QM
XnSvl52YRU5tvVoI5rQzuy7o1jpVpNz4evMsdz4Fdg3mDLYuJW0KDJs6tx9d
rrefVlgh4Jp5GZrCRZvKrO/bK3m4HHx7J9e+8YZola115a2XQUODoPLKNIvK
mZt9N1P23eWs13nonadUFs/p9VFpzXhwXLrmQXSPgNxmwCWP1RRUyyiYFVU+
Uh9ULP33ae/UASQTDVorR9Ow3ez22x6CXFEPuLs3gPLe4TG+Zg2F6pL2uowb
ElP9A18jl9Xpban3vwE1r6Lc/uhKD66L4FaTeEmCYxR4o/hHnIDv4dC+VdxG
mFvLBGvjJWMsc29hitVsXewhO5rX6XLpmqTo9bbYLCyLb04IyyciTHMFc2AA
aPq2bEtTrY4SJDpYSHDriPZzVacb7dJ6lbmQbet2B9dWgTcit+5NMg5BCwTV
BJ11tAKWtYiudneaF5Jpzsfct6ASIIxDFG0BMTJinC26sbCsIeWEAztw1AEc
FbPGkfkFl9HNOQXh2t9iExUBByosVulLH306uIGuENR6sf5FN4EburdgTd00
aMtb+RjdUsxxp9JCba1W/ZjTSTIzS5FZdVttagVKv/G3zSUYSvBWjVp8VXdP
o0Hfp9P1M0D+WhREnm4KagaHjdCGgfvGfci92sR3FE9yV5FkP6TS2JcVQb2w
YOfrznvhKgAJ9rvrKZnSqHZHvMiwNSwyBIq0oLs3gn472tUnpCERQHKgA3w1
i7VlBKmS6EuZdqgv7NcImqdFCOK902IZZGTdRr4t9J61MabdE+JC4f6WoM50
CsxSbSXTUxCJLqmw2Ch7WHmrH7U96MMLPPurWyNTUEt9wR6+0laMXYu6L58r
kM1RYTh8AJtBfhxpWM9dYHyrR9j5leHrtlxjzZasjwp7yqAtlBsk4InBIN3a
IPpislmldFEtGjVggxrnd7uziw1f09Vekr8XSnKh7liIdtRUhzDodXgnVznd
gJiqSlfjErTa1hVH8tF56SQEZKmzNCliDiK+ekZubXHOiGgYFdDA8makdwK/
GMApSFk7Sp3cQuefChg9V23Y8TMGJ3DrIYcIynSCQV0j0y5JrSgM5gYN28xt
RRA6sc1t2GeY8CyhHJ+F5Dp8iMYVVuR30AwzPgVSmWy4I5nUJpJGNyKNbqQa
HWqWQhMt6Tur6u5m8v2/dB00ec+bqvtMb6NFdzg/iFajF86z0j7QHsjkFWFl
aG1ZEZZO0NpDv4V1CkuIuYp5XeraDgwCdE0GFxJV3lUwdPfy0KHgmhWNow0T
5+mjJjDpEnULvr84uJGKHBCaKcZt90SrK7Volp1/sQsxvQFbBz0A48ETrPI6
kvdSvTTKXbUdvUfWnO+HJSQpXdIrudECwwPLvAkuMyJItV6uvUwEekbuEhm2
Nv6Su/j2LYGJe7DQ3WrlVMSOgOKu3tOr2lOnM9FFV0iNcosV3SIYXrwl7Rvk
Nh70UWg7ILy0aOPvqMrY5QRG7X4YJRMt2jdjIUFMboAS1cDwpkBnuWj0QXrd
d86S3BPUSXX0pdx8EuA9bLGInTrzekk3TogGH1RYCTfmZipOwa9iWYhl10hm
oUy0vjkjaDRDb2Sz/ptugsvkyJuTwbvY7f6Tuir1Sjs2hvBOKW5rpLekrLLw
jnhZyhOMBlZ5M5rVxuz7lQlSRNnlyG+AHz7zEfw0b+d+guutOoAzcYIA7l3d
2gXRhD/MTl3nRTOC5feySMKA9BnBKDn1DCfHH50C53SF83ndflka5N0Asul2
TMSxD9lxoS+GLy0b2nWzv6VvrO5b2o2E3tE/+8lPZnLx+7N9CXaT7hUye99m
G7tsayPwVHqAq1MauwmDyUvXa6LTJ2d/pQlKfVsjIMcvid7xJkpAENY21xtO
vo3ahNNubu/dHFxjwsG3/gT3x6Doos5v4KGnPJaHvi/6Ttfd1M1s1Bw29XzU
pJ+qslpuRuF+a1PwKETPF9xH+Qat5uD+5j6+rG1LE3IOz91xo9p1zLjkKkPf
PSI6O0T4sL4jtluxhymYyEWTj/iiFNlSOeqINNIv+kPAdPi2NZi+jmUWfJiZ
ajaz3ECXrsEgagSgijCbCGYXL6TK9Qvpki0tKKw7TO4apMdtGAYV1d/3XMK/
HBzrqjuRwy/5/E2sEWFHeLwPY6RWx9cgaLPFLxDUZziOHdzciMYb++b7ejLp
8bizGVOULPUzWsqQvbCtd0cUHyY3U7chcnA/oStSb0VCt6xJkz961sZXB+8a
sos9KrBxQQRta4URieh6HgwHO1/zVrL4sZOehZHUbsNg6saulq1FcSLt8LX5
JUkFUqHd7bR8m2t4rQtnqmmHGOLFRh1aLsTFEXB01QfLWfK6VfFC+3Iu4OQc
566RBlyPtWir8SBrFLJr2yykP1oTOP9brDRSAEYIxKisOlcfKidhBwZCF/Ui
8JeTxWkc/bIBTzv5v2ir1bbVuEvQ+ngnUUvc1/vXOWhBdp9bq/ecbWm51rbH
aP/14kAbGJkSD8PXWIHYTgZ+P4JefpKF0c+RxfcaZES69AdYYD+qu9xjewBY
wAMwgmCid+fsdfPStu+pSDU4zOtpaBdj2K3HSxKX1rUaCtnkuzFz94MDchLh
bXrueoTbdjsdXpDtz7+5pqtug5kZwth94xr0R7eJdWaSfOL+iYK7R3YtB0++
dhSTbCfydx1PMaRD81AuBF5Qz2qbyf5lr6z2pNMgx0KsNBrim4ZQ8qclhw19
p3KxyXOdhyI/N7m5tUfJE7J3TDYAwiPFFvXl/aPk1H6skjf5v4MtfQWLnyf/
I0/JABj8X9FFZrXhsQAA

-->

</rfc>
