<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.21 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-brski-cloud-03" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" obsoletes="" updates="" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.5.0 -->
  <front>
    <title abbrev="BRSKI-CLOUD">BRSKI Cloud Registrar</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-anima-brski-cloud-03"/>
    <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>Auth0</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="2022" month="March" day="06"/>
    <abstract>
      <t>This document specifies the behaviour of a BRSKI Cloud Registrar, and how a
pledge can interact with a BRSKI Cloud Registrar when bootstrapping.</t>
      <t>RFCED REMOVE: It is being actively worked on at https://github.com/anima-wg/brski-cloud</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Bootstrapping Remote Secure Key Infrastructures <xref target="BRSKI" format="default"/> specifies automated bootstrapping of an Autonomic Control Plane.
BRSKI Section 2.7 describes how a pledge "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".</t>
      <t>This document further specifies use of a BRSKI cloud registrar and clarifies operations that are not sufficiently specified in BRSKI.</t>
      <section anchor="terminology" numbered="true" toc="default">
        <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&nbsp;14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>This document uses the terms Pledge, Registrar, MASA, and Voucher from <xref target="BRSKI" format="default"/> and <xref target="RFC8366" format="default"/>.</t>
        <ul spacing="normal">
          <li>Local Domain: The domain where the pledge is physically located and bootstrapping from.
This may be different to the pledge owner's domain.</li>
          <li>Owner Domain: The domain that the pledge needs to discover and bootstrap with.</li>
          <li>Cloud Registrar: The default Registrar that is deployed at a URI that is well known to the pledge.</li>
          <li>Owner Registrar: The Registrar that is operated by the Owner, or the Owner's delegate.
There may not be an Owner Registrar in all deployment scenarios.</li>
          <li>Local Domain Registrar: The Registrar discovered on the Local Domain.
There may not be a Local Domain Registrar in all deployment scenarios.</li>
        </ul>
      </section>
      <section anchor="target-use-cases" numbered="true" toc="default">
        <name>Target Use Cases</name>
        <t>Two high level use cases are documented here.
There are more details provided in sections <xref target="redirect2Registrar" format="default"/> and <xref target="voucher2EST" format="default"/>.
While both use cases aid with incremental deployment of BRSKI infrastructure, for many smaller sites (such as teleworkers) no further infrastructure are expected.</t>
        <t>The pledge is not expected to know which of these two situations it is in.
The pledge determines this based upon signals that it receives from the Cloud Registrar.
The Cloud Registrar is expected to make the determination based upon the identity presented by the pledge.</t>
        <t>While a Cloud Registrar will typically handle all the devices of a particular product line from a  particular manufacturer there are no restrictions on how the Cloud Registrar is horizontally (many sites) or vertically (more equipment at one site) scaled.
It is also entirely possible that all devices sold by through a particular VAR might be preloaded with a configuration that changes the Cloud Registrar URL to point to a VAR.
Such an effort would require unboxing each device in a controlled environment, but the provisioning could occur using a regular BRSKI or SZTP <xref target="RFC8572" format="default"/> process.</t>
        <section anchor="owner-registrar-discovery" numbered="true" toc="default">
          <name>Owner Registrar Discovery</name>
          <t>A pledge is bootstrapping from a remote location with no local domain registrar (specifically: 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 enduser deploying a pledge in a home or small branch office, where the pledge belongs to the enduser's employer.
There is no local domain registrar, and the pledge needs to discover and bootstrap with the employer's registrar which is deployed in headquarters.
For example, an enduser 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>
        </section>
        <section anchor="bootstrapping-with-no-owner-registrar" numbered="true" toc="default">
          <name>Bootstrapping with no Owner Registrar</name>
          <t>A pledge is bootstrapping where the owner organization does not yet have an owner registrar deployed.
The cloud registrer 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 <xref target="EST" format="default"/> service the pledge should use for certificate enrollment.</t>
          <t>In one use case, an organization has an EST service deployed, but does not have yet a BRSKI capable Registrar service deployed.
The pledge is deployed in the organizations domain, but does not discover a local domain, 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>
        </section>
      </section>
    </section>
    <section anchor="architecture" numbered="true" toc="default">
      <name>Architecture</name>
      <t>The high level architecture is illustrated in <xref target="architecture-figure" format="default"/>.</t>
      <t>The pledge connects to the cloud registrar during bootstrap.</t>
      <t>The cloud registrar may redirect the pledge to an owner registrar in order to complete bootstrap against the owner registrar.</t>
      <t>If 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.</t>
      <t>Finally, when bootstrapping against an owner registrar, this registrar may interact with a backend CA to assist in issuing certificates to the pledge.
The mechanisms and protocols by which the registrar interacts with the CA are transparent to the pledge and are out-of-scope of this document.</t>
      <t>The architecture shows the cloud registrar and MASA as being logically separate entities.
The two functions could of course be integrated into a single service.</t>
      <t>TWO CHOICES:
1. Cloud Registrar redirects to Owner Registrar
2. Cloud Registrar returns VOUCHER pinning Owner Register.</t>
      <figure anchor="architecture-figure">
        <name>High Level Architecture</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
|<--------------OWNER------------------------>|     MANUFACTURER

 On-site                Cloud
+--------+                                         +-----------+
| Pledge |---------------------------------------->| Cloud     |
+--------+                                         | Registrar |
    |                                              +---+  +----+
    |                                                  |??|
    |                 +-----------+                +---+  +----+
    +---------------->|  Owner    |--------------->|   MASA    |
    |   VR-sign(N)    | Registrar |sign(VR-sign(N))+-----------+
    |                 +-----------+
    |                       |    +-----------+
    |                       +--->|    CA     |
    |                            +-----------+
    |
    |                 +-----------+
    +---------------->| Services  |
                      +-----------+
]]></artwork>
      </figure>
      <section anchor="interested-parties" numbered="true" toc="default">
        <name>Interested Parties</name>
        <ol spacing="normal" type="1"><li>OEM - Equipment manufacturer.  Operate the MASA.</li>
          <li>Network operator. Operate the Owner Registrar.
Often operated by end owner (company), or by outsourced IT entity.</li>
          <li>Network integrator. They operate a Cloud Registrar.</li>
        </ol>
      </section>
      <section anchor="network-connectivity" numbered="true" toc="default">
        <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, must be able to make DNS queries, and must be able to send HTTP requests to the cloud registrar.
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.</t>
      </section>
      <section anchor="pledge-certificate-identity-considerations" numbered="true" toc="default">
        <name>Pledge Certificate Identity Considerations</name>
        <t>BRSKI section 5.9.2 specifies that the pledge MUST send a CSR Attributes request to the registrar. The registrar 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 registrar 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>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" numbered="true" toc="default">
      <name>Protocol Operation</name>
      <section anchor="pledge-requests-voucher-from-cloud-registrar" numbered="true" toc="default">
        <name>Pledge Requests Voucher from Cloud Registrar</name>
        <section anchor="cloud-registrar-discovery" numbered="true" toc="default">
          <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 may never attempt to discover a local domain registrar and may 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 URL of the Cloud Registrar, including the path component, which is typically "/.well-known/brski/requestvoucher", but may be another value.</t>
        </section>
        <section anchor="pledge-cloud-registrar-tls-establishment-details" numbered="true" toc="default">
          <name>Pledge - Cloud Registrar TLS Establishment Details</name>
          <t>The pledge MUST use an Implicit Trust Anchor database (see <xref target="EST" format="default"/>) to authenticate the cloud registrar service.
The Pledge can be done with pre-loaded trust-anchors that are used to validate the TLS connection.
This can be using a public Web PKI trust anchors using <xref target="RFC6125" format="default"/> DNS-ID mechanisms, a pinned certification authority, or even a pinned raw public key.
This is a local implementation decision.</t>
          <t>The pledge MUST NOT establish a provisional TLS connection (see BRSKI section 5.1) with the cloud registrar.</t>
          <t>The cloud registrar MUST validate 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>The cloud registrar MAY only allow connections from pledges that have an IDevID that is signed by one of a specific set of CAs, e.g. IDevIDs issued by certain manufacturers.</t>
          <t>The cloud registrar MAY allow pledges to connect using self-signed identity certificates or using Raw Public Key <xref target="RFC7250" format="default"/> certificates.</t>
        </section>
        <section anchor="pledge-issues-voucher-request" numbered="true" toc="default">
          <name>Pledge Issues Voucher Request</name>
          <t>After the pledge has established a full TLS connection with the cloud registrar and has verified the cloud registrar PKI identity, 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-handles-voucher-request" numbered="true" toc="default">
        <name>Cloud Registrar Handles Voucher Request</name>
        <t>The cloud registrar must determine pledge ownership.
Once ownership is determined, or if no owner can be determined, then the registrar may:</t>
        <ul spacing="normal">
          <li>return a suitable 4xx or 5xx error response to the pledge if the registrar is unwilling or unable to handle the voucher request</li>
          <li>redirect the pledge to an owner register via 307 response code</li>
          <li>issue a voucher and return a 200 response code</li>
        </ul>
        <section anchor="pledgeOwnershipLookup" numbered="true" toc="default">
          <name>Pledge Ownership Lookup</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 lookup a database of pledge IDevID serial numbers to owners.</t>
          <t>Alternatively, if the cloud registrar allows pledges to connect using self-signed certificates, the registrar could use the thumbprint of the self-signed certificate to lookup a database of pledge self-signed certificate thumbprints to owners.</t>
          <t>The mechanism by which the cloud registrar determines pledge ownership is out-of-scope of this document.</t>
        </section>
        <section anchor="cloud-registrar-redirects-to-owner-registrar" numbered="true" toc="default">
          <name>Cloud Registrar Redirects to Owner Registrar</name>
          <t>Once the cloud registar has determined pledge ownership, the cloud registrar may redirect the pledge to the owner registrar in order to complete bootstrap.
Ownership registration will require the owner to register their local domain.
The mechanism by which pledge owners register their domain with the cloud registrar is out-of-scope of this document.</t>
          <t>The cloud registrar replies to the voucher request with a suitable HTTP 307 response code, including the owner's local domain in the HTTP Location header.</t>
        </section>
        <section anchor="cloud-registrar-issues-voucher" numbered="true" toc="default">
          <name>Cloud Registrar Issues Voucher</name>
          <t>If the cloud registrar issues a voucher, it returns the voucher in a 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 "est-domain" field as defined below.
This tells the pledge where the domain of the EST service to use for completing certificate enrollment.</t>
          <t>The voucher MAY include the "additional-configuration" field..
This points the pledge to a URI where application specific additional configuration information may be retrieved.
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" numbered="true" toc="default">
        <name>Pledge Handles Cloud Registrar Response</name>
        <section anchor="redirect-response" numbered="true" toc="default">
          <name>Redirect Response</name>
          <t>The cloud registrar returned a 307 response to the voucher request.</t>
          <t>The pledge should restart the process using a new voucher request using the location provided in the HTTP redirect.
Note if the pledge is able to validate the new server using a trust anchor found in its Implicit Trust Anchor database, then it MAY accept another 307 redirect.
The pledge MUST never visit a location that it has already been to.
If that happens then the pledge MUST fail the onboarding attempt and go back to the beginning, which includes listening to other sources of onboarding information as specified in <xref target="BRSKI" format="default"/> section 4.1 and 5.0.</t>
          <t>The pledge should establish a provisional TLS connection with specified local domain registrar.
The pledge should not use its Implicit Trust Anchor database for validating the local domain registrar identity.
The pledge should send a voucher request message via the local domain registrar.
When the pledge downloads a voucher, it can validate the TLS connection to the local domain registrar and continue with enrollment and bootstrap as per standard BRSKI operation.</t>
        </section>
        <section anchor="voucher-response" numbered="true" toc="default">
          <name>Voucher Response</name>
          <t>The cloud registrar returned a voucher to the pledge.
The pledge should perform voucher verification as per standard BRSKI operation.
The pledge should verify the voucher signature using the manufacturer-installed trust anchor(s), should verify the serial number in teh voucher, and must verify any nonce information in the voucher.</t>
          <t>The pledge should extract the "est-domain" field from the voucher, and should continue with EST enrollment as per standard BRSKI operation.</t>
        </section>
      </section>
    </section>
    <section anchor="protocol-details" numbered="true" toc="default">
      <name>Protocol Details</name>
      <section anchor="redirect2Registrar" numbered="true" toc="default">
        <name>Voucher Request Redirected to Local Domain Registrar</name>
        <t>This flow illlustrates the Owner Registrar Discovery flow. 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 registrar on the public internet.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
+--------+                                       +----------+
| Pledge |                                       | Cloud RA |
|        |                                       |          |
+--------+                                       +----------+
    |                                                 |
    | 1. Mutual-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. Validate TLS      |                          |
    |<-------------------->|                          |
    |                      |                          |
    | 10. etc.             |                          |
    |--------------------->|                          |
]]></artwork>
        <t>The process starts, in step 1, when the Pledge establishes a Mutual TLS channel with the Cloud RA using artifacts created during the manufacturing process of the Pledge.</t>
        <t>In step 2, the Pledge sends a voucher request to the Cloud RA.</t>
        <t>The Cloud RA completes pledge ownership lookup as outlined in <xref target="pledgeOwnershipLookup" format="default"/>, and determines the owner registrar domain.
In step 3, the Cloud RA 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 registar forwards the voucher request to the MASA.
Assuming the MASA issues a voucher, then the pledge validates the TLS connection with the registrar using the pinned-domain-cert from the voucher and completes the BRSKI flow.</t>
      </section>
      <section anchor="voucher2EST" numbered="true" toc="default">
        <name>Voucher Request Handled by Cloud Registrar</name>
        <t>The Voucher includes the EST domain to use for EST enroll.
It is assumed services are accessed at that domain too.
As trust is already established via the Voucher, the pledge does a full TLS handshake against the local RA indicated by the voucher response.</t>
        <t>The returned voucher contains an attribute, "est-domain", defined in <xref target="redirected" format="default"/> below.
The pledge is directed to continue enrollment using the EST registrar found at that URI.
The pledge uses the pinned-domain-cert from the voucher to authenticate the EST registrar.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
+--------+                                       +----------+
| Pledge |                                       | Cloud RA |
|        |                                       | / MASA   |
+--------+                                       +----------+
    |                                                 |
    | 1. Mutual TLS                                   |
    |<----------------------------------------------->|
    |                                                 |
    | 2. Voucher Request                              |
    |------------------------------------------------>|
    |                                                 |
    | 3. Voucher Response  {est-domain:fqdn}          |
    |<------------------------------------------------|
    |                                                 |
    |                 +----------+                    |
    |                 | RFC7030  |                    |
    |                 |  EST     |                    |
    |                 | Registrar|                    |
    |                 +----------+                    |
    |                      |                          |
    | 4. Full TLS          |                          |
    |<-------------------->|                          |
    |                                                 |
    |     3a. /voucher_status POST  success           |
    |------------------------------------------------>|
    |     ON FAILURE 3b. /voucher_status POST         |
    |                                                 |
    | 5. EST Enrol         |                          |
    |--------------------->|                          |
    |                      |                          |
    | 6. Certificate       |                          |
    |<---------------------|                          |
    |                      |                          |
    | 7. /enrollstatus     |                          |
    |--------------------->|                          |
]]></artwork>
        <t>The process starts, in step 1, when the Pledge establishes a Mutual TLS channel with the Cloud RA/MASA using artifacts created during the manufacturing process of the Pledge.
In step 2, the Pledge sends a voucher request to the Cloud RA/MASA, and in response the Pledge receives an <xref target="RFC8366" format="default"/> format voucher from the Cloud RA/MASA that includes its assigned EST domain in the est-domain attribute.</t>
        <t>At this stage, the Pledge should be able to establish a TLS channel with the EST Registrar.
The connection may involve crossing the Internet requiring a DNS lookup on the provided name.
It may also be a local address that includes an IP address literal including both <xref target="RFC1918" format="default"/> and IPv6 Unique Local Address.
The EST Registrar is validated using the pinned-domain-cert value provided in the voucher as described in <xref target="BRSKI" format="default"/> section 5.6.2.
This involves treating the artifact provided in the pinned-domain-cert as a trust anchor, and attempting to validate the EST Registrar from this anchor only.</t>
        <t>There is a case where the pinned-domain-cert is the identical End-Entity (EE) Certificate as the EST Registrar.
It also explicitly includes the case where the EST Registrar 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" format="default"/> DNS-ID validation on the certificate against the URL 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 validated, and in that case, it is expected that either a self-signed certificate or an EE certificate will be pinned.</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 step 4, the Pledge establishes a TLS channel with the Cloud RA/MASA, and optionally the pledge should send a request, steps 3.a and 3.b, to the Cloud RA/MASA to inform it that the Pledge was able to establish a secure TLS channel with the EST Registrar.</t>
        <t>The Pledge then follows that, in step 5, with an EST Enroll request with the CSR and obtains the requested certificate.
The Pledge must validate that the issued certificate has the expected identifier obtained from the Cloud RA/MASA in step 3.</t>
      </section>
    </section>
    <section anchor="redirected" numbered="true" toc="default">
      <name>YANG extension for Voucher based redirect</name>
      <t>An extension to the <xref target="RFC8366" format="default"/> voucher is needed for the case where the client will be redirected to a local EST Registrar.</t>
      <section anchor="yang-tree" numbered="true" toc="default">
        <name>YANG Tree</name>
        <artwork name="" type="" align="left" alt=""><![CDATA[
module: ietf-voucher-redirected

  grouping voucher-redirected-grouping
    +-- voucher
       +-- created-on                       yang:date-and-time
       +-- expires-on?                      yang:date-and-time
       +-- assertion                        enumeration
       +-- serial-number                    string
       +-- idevid-issuer?                   binary
       +-- pinned-domain-cert               binary
       +-- domain-cert-revocation-checks?   boolean
       +-- nonce?                           binary
       +-- last-renewal-date?               yang:date-and-time
       +-- est-domain?                      ietf:uri
       +-- additional-configuration?        ietf:uri
]]></artwork>
      </section>
      <section anchor="yang-voucher" numbered="true" toc="default">
        <name>YANG Voucher</name>
        <sourcecode name="ietf-voucher-redirected@2020-09-23.yang" type="" markers="true"><![CDATA[
module ietf-voucher-redirected {
  yang-version 1.1;

  namespace
    "urn:ietf:params:xml:ns:yang:ietf-voucher-redirected";
  prefix "redirected";

  import ietf-restconf {
    prefix rc;
    description
      "This import statement is only present to access
       the yang-data extension defined in RFC 8040.";
    reference "RFC 8040: RESTCONF Protocol";
  }

  import ietf-inet-types {
    prefix ietf;
    reference "RFC 6991: Common YANG Data Types";
  }

  import ietf-voucher {
    prefix "v";
  }

  organization
   "IETF ANIMA Working Group";

  contact
   "WG Web:   <http://tools.ietf.org/wg/anima/>
    WG List:  <mailto:anima@ietf.org>
    Author:   Michael Richardson
              <mailto:mcr+ietf@sandelman.ca>
    Author:   Owen Friel
              <mailto: ofriel@cisco.com>
    Author:   Rifaat Shekh-Yusef
              <mailto: rifaat.ietf@gmail.com>";
description
  "This module extendes the base RFC8366 voucher format to
   include a redirect to an EST server to which enrollment
   should continue.

   The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
   'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY',
   and 'OPTIONAL' in the module text are to be interpreted as
   described in BCP14, RFC 2119, and RFC8174.";

  revision "2020-09-23" {
    description
     "Initial version";
    reference
     "RFC XXXX: Voucher Profile for Cloud redirected Devices";
  }

  rc:yang-data voucher-redirected-artifact {
    // YANG data template for a voucher.
    uses voucher-redirected-grouping;
  }

  // Grouping defined for future usage
  grouping voucher-redirected-grouping {
    description
      "Grouping to allow reuse/extensions in future work.";

    uses v:voucher-artifact-grouping {

      augment "voucher" {
        description "Base the constrained voucher
                     upon the regular one";
        leaf est-domain {
          type ietf:uri;
          description
            "The est-domain is a URL to which the Pledge should
             continue doing enrollment rather than with the
             Cloud Registrar.
             The pinned-domain-cert contains a trust-anchor
             which is to be used to authenticate the server
             found at this URI.
            ";
        }
        leaf additional-configuration {
          type ietf:uri;
          description
            "The additional-configuration attribute contains a
             URL to which the Pledge can retrieve additional
             configuration information.
             The contents of this URL are vendor specific.
             This is intended to do things like configure
             a VoIP phone to point to the correct hosted
             PBX, for example.";
        }
      }
    }
  }
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="the-ietf-xml-registry" numbered="true" toc="default">
        <name>The IETF XML Registry</name>
        <t>This document registers one URI in the IETF XML registry <xref target="RFC3688" format="default"/>.
Following the format in <xref target="RFC3688" format="default"/>, the following registration is requested:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
{: newline="true"}
URI:
: urn:ietf:params:xml:ns:yang:ietf-voucher-redirected

Registrant Contact:
: The ANIMA WG of the IETF.

XML:
: N/A, the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="the-yang-module-names-registry" numbered="true" toc="default">
        <name>The YANG Module Names Registry</name>
        <t>This document registers two YANG modules in the YANG Module Names registry <xref target="RFC6020" format="default"/>.  Following the format defined in <xref target="RFC6020" format="default"/>, the the following registration is requested:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
{: newline="true"}
name:
: ietf-voucher-redirected

namespace:
: urn:ietf:params:xml:ns:yang:ietf-voucher-redirected

prefix:
: vch

reference:
: THIS DOCUMENT
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The Cloud-Registrar described in this document inherits all of the issues that are described in <xref target="BRSKI" format="default"/>.
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 of the considerations for operation of the MASA also apply to operation of the Cloud Registrar.</t>
      <section anchor="issues-with-security-of-http-redirect" numbered="true" toc="default">
        <name>Issues with Security of HTTP Redirect</name>
        <t>If the Redirect to Registrar method is used, as described in <xref target="redirect2Registrar" format="default"/>,
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 can not process the device.
This will force the device to stop, timeout, and then try all mechanisms again.</t>
        <t>There is another case where a connection problem may occur: when the pledge is behind a captive portal or an intelligent home gateway that provides access control on all connections.
Captive portals that do not follow the requirements of <xref target="RFC8952" format="default"/> 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>On the first connection, the incorrect connection will be discovered because the Pledge will be unable to validate the connection to it's cloud registrar via DNS-ID.
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, either via 307, or 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 target="RFC6125" format="default"/> DNS-ID validation 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.
As the connection is provisional, the pledge will be unable to determine this.</t>
        <t>It is RECOMMENDED therefore that the pledge look for <xref target="RFC8910" format="default"/> attributes in DHCP, and if present, use the <xref target="RFC8908" format="default"/> API to learn if it is captive.</t>
      </section>
      <section anchor="security-updates-for-the-pledge" numbered="true" toc="default">
        <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 on which there is addressing and connectivity, but there is no other local configuration available.</t>
        <t>There is another advantage to being online: the pledge may be able to contact the manufacturer before onboarding 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 onboarding.</t>
      </section>
      <section anchor="trust-anchors-for-cloud-registrar" numbered="true" toc="default">
        <name>Trust Anchors for Cloud Registrar</name>
        <t>The Implicit TA 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 does not have have a certificate that can be validated using a public (WebPKI) anchor.
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 addresses in part in <xref target="I-D.richardson-t2trg-idevid-considerations" format="default"/> in sections 3 and 5.</t>
      </section>
      <section anchor="issues-with-redirect-via-voucher" numbered="true" toc="default">
        <name>Issues with Redirect via Voucher</name>
        <t>The second redirect case is handled by returning a special extension in the voucher.
The Cloud Registrar actually does all of the voucher processing as specified in <xref target="BRSKI" format="default"/>.
In this case, the Cloud Registrar may be operated by the same entity as the MASA, and it might even be combined into a single server.
Whether or not this is the case, it behaves as if it was separate.</t>
        <t>It may be the case that one or more 307-Redirects have taken the Pledge from the built-in Cloud Registrar to one operated by a VAR.</t>
        <t>When the Pledge is directed to the Owner's <xref target="EST" format="default"/> Registrar, the Pledge validates the TLS connection with this server using the "pinned-domain-cert" attribute in the voucher.
There is no provisional TLS connection, and therefore there are no risks associated with being behind a captive portal.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC8366" target="https://www.rfc-editor.org/info/rfc8366">
          <front>
            <title>A Voucher Artifact for Bootstrapping Protocols</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <author fullname="M. Richardson" initials="M." surname="Richardson">
              <organization/>
            </author>
            <author fullname="M. Pritikin" initials="M." surname="Pritikin">
              <organization/>
            </author>
            <author fullname="T. Eckert" initials="T." surname="Eckert">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8995">
          <front>
            <title>Bootstrapping Remote Secure Key Infrastructure (BRSKI)</title>
            <author fullname="M. Pritikin" initials="M." surname="Pritikin">
              <organization/>
            </author>
            <author fullname="M. Richardson" initials="M." surname="Richardson">
              <organization/>
            </author>
            <author fullname="T. Eckert" initials="T." surname="Eckert">
              <organization/>
            </author>
            <author fullname="M. Behringer" initials="M." surname="Behringer">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <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="EST" target="https://www.rfc-editor.org/info/rfc7030">
          <front>
            <title>Enrollment over Secure Transport</title>
            <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin">
              <organization/>
            </author>
            <author fullname="P. Yee" initials="P." role="editor" surname="Yee">
              <organization/>
            </author>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC6125" target="https://www.rfc-editor.org/info/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">
              <organization/>
            </author>
            <author fullname="J. Hodges" initials="J." surname="Hodges">
              <organization/>
            </author>
            <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="RFC3688" target="https://www.rfc-editor.org/info/rfc3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020" target="https://www.rfc-editor.org/info/rfc6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="I-D.richardson-t2trg-idevid-considerations" target="https://www.ietf.org/archive/id/draft-richardson-t2trg-idevid-considerations-06.txt">
          <front>
            <title>A Taxonomy of operational security considerations for manufacturer installed keys and Trust Anchors</title>
            <author fullname="Michael Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <date day="3" month="February" year="2022"/>
            <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-richardson-t2trg-idevid-considerations-06"/>
        </reference>
        <reference anchor="IEEE802.1AR" target="http://standards.ieee.org/findstds/standard/802.1AR-2018.html">
          <front>
            <title>IEEE 802.1AR Secure Device Identifier</title>
            <author initials="." surname="IEEE Standard">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="RFC8572" target="https://www.rfc-editor.org/info/rfc8572">
          <front>
            <title>Secure Zero Touch Provisioning (SZTP)</title>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <author fullname="I. Farrer" initials="I." surname="Farrer">
              <organization/>
            </author>
            <author fullname="M. Abrahamsson" initials="M." surname="Abrahamsson">
              <organization/>
            </author>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document presents a technique to securely provision a networking device when it is booting in a factory-default state.  Variations in the solution enable it to be used on both public and private networks.  The provisioning steps are able to update the boot image, commit an initial configuration, and execute arbitrary scripts to address auxiliary needs.  The updated device is subsequently able to establish secure connections with other systems.  For instance, a device may establish NETCONF (RFC 6241) and/or RESTCONF (RFC 8040) connections with deployment-specific network management systems.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8572"/>
          <seriesInfo name="DOI" value="10.17487/RFC8572"/>
        </reference>
        <reference anchor="RFC7250" target="https://www.rfc-editor.org/info/rfc7250">
          <front>
            <title>Using Raw Public Keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters">
              <organization/>
            </author>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig">
              <organization/>
            </author>
            <author fullname="J. Gilmore" initials="J." surname="Gilmore">
              <organization/>
            </author>
            <author fullname="S. Weiler" initials="S." surname="Weiler">
              <organization/>
            </author>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>This document specifies a new certificate type and two TLS extensions for exchanging raw public keys in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS).  The new certificate type allows raw public keys to be used for authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7250"/>
          <seriesInfo name="DOI" value="10.17487/RFC7250"/>
        </reference>
        <reference anchor="RFC1918" target="https://www.rfc-editor.org/info/rfc1918">
          <front>
            <title>Address Allocation for Private Internets</title>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter">
              <organization/>
            </author>
            <author fullname="B. Moskowitz" initials="B." surname="Moskowitz">
              <organization/>
            </author>
            <author fullname="D. Karrenberg" initials="D." surname="Karrenberg">
              <organization/>
            </author>
            <author fullname="G. J. de Groot" initials="G. J." surname="de Groot">
              <organization/>
            </author>
            <author fullname="E. Lear" initials="E." surname="Lear">
              <organization/>
            </author>
            <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="RFC8952" target="https://www.rfc-editor.org/info/rfc8952">
          <front>
            <title>Captive Portal Architecture</title>
            <author fullname="K. Larose" initials="K." surname="Larose">
              <organization/>
            </author>
            <author fullname="D. Dolson" initials="D." surname="Dolson">
              <organization/>
            </author>
            <author fullname="H. Liu" initials="H." surname="Liu">
              <organization/>
            </author>
            <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="RFC8910" target="https://www.rfc-editor.org/info/rfc8910">
          <front>
            <title>Captive-Portal Identification in DHCP and Router Advertisements (RAs)</title>
            <author fullname="W. Kumari" initials="W." surname="Kumari">
              <organization/>
            </author>
            <author fullname="E. Kline" initials="E." surname="Kline">
              <organization/>
            </author>
            <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" target="https://www.rfc-editor.org/info/rfc8908">
          <front>
            <title>Captive Portal API</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly">
              <organization/>
            </author>
            <author fullname="D. Thakore" initials="D." role="editor" surname="Thakore">
              <organization/>
            </author>
            <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:
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

-->

</rfc>
