<?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-rfc2629 version 1.6.4 (Ruby 2.6.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-anima-brski-cloud-04" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.4 -->
  <front>
    <title abbrev="BRSKI-CLOUD">BRSKI Cloud Registrar</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-anima-brski-cloud-04"/>
    <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="May" day="24"/>
    <abstract>
      <t>This document specifies the behavior 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">
      <name>Introduction</name>
      <t>Bootstrapping Remote Secure Key Infrastructures <xref target="BRSKI"/> 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">
        <name>Terminology</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <t>This document uses the terms Pledge, Registrar, MASA, and Voucher from <xref target="BRSKI"/> and <xref target="RFC8366"/>.</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">
        <name>Target Use Cases</name>
        <t>Two high level use cases are documented here.
There are more details provided in sections <xref target="redirect2Registrar"/> and <xref target="voucher2EST"/>.
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"/> process.</t>
        <section anchor="owner-registrar-discovery">
          <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">
          <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 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 <xref target="EST"/> 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 organization's 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">
      <name>Architecture</name>
      <t>The high level architecture is illustrated in <xref target="architecture-figure"/>.</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><![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">
        <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">
        <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">
        <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 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>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.richardson-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>
      <section anchor="pledge-requests-voucher-from-cloud-registrar">
        <name>Pledge Requests Voucher from 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 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">
          <name>Pledge - Cloud Registrar TLS Establishment Details</name>
          <t>The pledge MUST use an Implicit Trust Anchor database (see <xref target="EST"/>) 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"/> 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"/> certificates.</t>
        </section>
        <section anchor="pledge-issues-voucher-request">
          <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">
        <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">
          <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">
          <name>Cloud Registrar Redirects to 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.
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">
          <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">
        <name>Pledge Handles Cloud Registrar Response</name>
        <section anchor="redirect-response">
          <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"/> 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">
          <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">
      <name>Protocol Details</name>
      <section anchor="redirect2Registrar">
        <name>Voucher Request Redirected to Local Domain Registrar</name>
        <t>This flow illustrates 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><![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"/>, 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 registrar 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">
        <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"/> 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><![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 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"/> 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"/> 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"/> 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">
      <name>YANG extension for Voucher based redirect</name>
      <t>An extension to the <xref target="RFC8366"/> voucher is needed for the case where the client will be redirected to a local EST Registrar.</t>
      <section anchor="yang-tree">
        <name>YANG Tree</name>
        <artwork><![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">
        <name>YANG Voucher</name>
        <sourcecode markers="true" name="ietf-voucher-redirected@2020-09-23.yang"><![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">
      <name>IANA Considerations</name>
      <section anchor="the-ietf-xml-registry">
        <name>The IETF XML Registry</name>
        <t>This document registers one URI in the IETF XML registry <xref target="RFC3688"/>.
Following the format in <xref target="RFC3688"/>, the following registration is requested:</t>
        <artwork><![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">
        <name>The YANG Module Names Registry</name>
        <t>This document registers two YANG modules in the YANG Module Names registry <xref target="RFC6020"/>.  Following the format defined in <xref target="RFC6020"/>, the the following registration is requested:</t>
        <artwork><![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">
      <name>Security Considerations</name>
      <t>The Cloud-Registrar described in this document inherits all of the 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 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">
        <name>Issues with Security of HTTP Redirect</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 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"/> 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 its 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"/> 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"/> attributes in DHCP, and if present, use the <xref target="RFC8908"/> API to learn if it is captive.</t>
      </section>
      <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 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">
        <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 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"/> in sections 3 and 5.</t>
      </section>
      <section anchor="issues-with-redirect-via-voucher">
        <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"/>.
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"/> 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="RFC7030" 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="I-D.richardson-lamps-rfc7030-csrattrs" target="https://www.ietf.org/archive/id/draft-richardson-lamps-rfc7030-csrattrs-02.txt">
          <front>
            <title>Clarification of RFC7030 CSR Attributes definition</title>
            <author fullname="Michael Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Owen Friel">
              <organization>Cisco</organization>
            </author>
            <author fullname="Dr. David von Oheimb">
              <organization>Siemens</organization>
            </author>
            <author fullname="Dan Harkins">
              <organization>The Industrial Lounge</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   Enrollment over Secure Transport (EST) is ambiguous in specification
   of the CSR Attributes Response.  This has resulted in implementation
   challenges and implementor confusion.  This document updates 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 that the server expects the client to include in its CSR
   request.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-richardson-lamps-rfc7030-csrattrs-02"/>
        </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:
H4sIAEU3jWIAA+09a3PbSHLf8Ssm8oezyyQtyfauzco9eBIdq86WFD28d0ml
tkBiKCIGAS4GlKzYvt+S35Jfln7NCwAl2Xu5Sqqiqq2lCcxMT0+/u6c5HA6T
pMmbQo/Vzh/Pzv90pA6KapOpM32Vm6ZO650knc1qfT1W9Hh48O7k8jDJqnmZ
rmBQVqeLZpjrZjFMy3yVDme1+ZgP5zjJcPdFMk8bfVXVt2NlmizJ1/VYNfXG
NPu7u69395PENGmZ/ZwWVQmT3WqTrPOx+temmg+Uqeqm1gsDn25X+OHfkiTd
NMuqHidqmCj4y0szVicj9abOdUHfMFQnN7oMvqzqq7E6yM28on/qVZoXY1Ut
8IU/zPH70bxaRZOejdT5Un9cDv+yMXoRTH2WL9K06TykJSYA3W64RE0vj8wI
EfSHK/yys9L7Ecw5X6Z1ZqoyWOg9fqmL9kNa6ByQpotVWqrzatHcpLVWP1X1
RxOuvZrXT2lZY18ezdMkKat6lTb5tQYkqrM3B6+e//DDWH04uTx4Oz2Dr+iU
x/Tk9euX8MX0/GKs6NUfd5/vJkleLlpT/LC3/1I+Pv/h1Sv77e7+Ln48Gh6O
areHYbPf1FfDPNPXeTacV6WBjzXMBp/o7el0+mp3f7Q3ORvTbpq0vtINUOey
adbjZ8+IYHAuwKnWI0DHs0VeZkBdxj17JjMM93f3Xo2WzarY4bmE0HERJe+o
cz3fAP4OAaC5VkeZLpt8keuahziCU+7AePi5rMWvZUDmY4XLJclwOFTpDJln
3iTJxTI3Cthls4KJlVnrOc5uVLPUaqaX6XVe1UCKKlW97DdQsIxaVjcqTdaF
zq60msOx52WjcX51kzfLbWPVzRLYYFZVDf5zvc7Lq1GSwNFMD9XZ9P3Jh+lY
HTUK4JtpeKZgPjjU4lbdAC3pTFWlAkpHvBtA/BWstJkh+T5jTr+5ehYwO+97
lWdZoZPkkToqm7rKNnM82ST5YwgEQLiqGm0x/yd9C28v6hRegPfhK6M+f6Yd
ff0aYAyOogK6A8CiLRHySuS9qqxW+VwdVLh0oU6LtNSjhFEDayEkan/0o8q0
mdf5DKYkvCrB6877yV8UUGSDeE3VjS6K4ceyuinV5dkRHxHtVNUOwTl+WVTz
tAi+hPMpqwZwqjIULde6RlzSy3jovNpvjFC2AhECQ4xGKlE4MC/nxSbT3Zl3
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
uO/A59/H53pGWvdv5Xj9Kr/rme+HR/Fwmwb2E7leVmkZ9sVTnMVw87c7Xckm
W10eGrJ7uRwpMJQlD+I1lLcdsRCr4aw44PlKx5t0t51sUjiMufeeAa7aasMV
+BzcGeC6Kq7h67oyzrI8kui5hOQ5w4wXGcUbdWV0ktDGOzpk6dPNCWw9NfN9
KOV6ZAs50dVJVeTYH6AI6mao5xoX1e693nslDdqOTq9/UJdljndjOPUy4Rl4
b9F20Zi2Lld2tzPFl9fa+XnnWRkVdXrsJoRfjn4Y7dsSeUYoei/a51wt4XcW
6YEG8+ZRTo4pVjLgks2O0qTxvoU4qdMRJYOxRptdGG4LklJDl7CPUReInN0F
TgojoqdlNpxyreTj6fRJJEtT00dtR420IfvEGWq8FRX6ji0g4k1Q9UBU0Ded
hmty5VDeIrkS34or/7gc016/BKLEVoNU+zxyFVTBALkqGC+NLm00b+Dcx3du
sBzntu82hs3BV6XlnnDV0C3FqzltKumXFQJ+8PAmDZoeYiEd1XP1sZqv+6AC
4yL/iI3ibO2GVDs79nEyk9u8Ud0ID/Ut/PCJzqnIIt1aiYn3FDuHRPVfM0uG
8V0mOtqlEJi9XAVLu2ZTgThkncJyObiGa+9YizIA9zEqBu5rFhnnqa3OeRGJ
41gT3q8CpfXr2t5bCwMWcZmFAD6gVQ04OCkNfT6aDXo1Gl9WpYKCvPHpU4ET
aaJPYRhuo/wQvREeCJENB/ZYpntz4eXAEZyzCIu4dtKeDaFixsETjnrRSzG1
RBeuuL7ASz3ZpFwFCcnJUosjzeAWJa+ps20a3G7lOVUE/GVy/E9Yk6BLY5ts
WVeTSciV1PqEv86+ghIvg2FyZKE54dt8ESEjPNLAqyUU5QKv5ZA6Kj6wGrZ9
Wo8E8otaa6De4/Pp2cXPF9M/X/z85uzk/c9vjt5NFbXeFzCGftohaC09aj41
anp86GfyNaffMtkfDicX09Ftii2PaDZ1NDmedDoCYP9XNDqmF2/Un9+/s1u5
bbc7thXAhq4KYQmkcKobKQEqEcDYVB67W70hYrWaWCy5vAxfGsgj+2JU1Zwb
T57jxLbyKPUNhuN/uwOaGpt0ADzjZKw2dTlGdIyxm9DKjD+tinFpxoiE8RY0
JYk9PNjkAd+cxakQKZPjo/cT9dM/WTMYtwonDJvFN46fuVsEln0ILWReIULQ
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
39VGlKtZeAAA

-->

</rfc>
