<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wing-settle-referee-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Local Domain Referee">A Referee to Authenticate Servers in Local Domains</title>
    <seriesInfo name="Internet-Draft" value="draft-wing-settle-referee-01"/>
    <author initials="D." surname="Wing" fullname="Dan Wing">
      <organization abbrev="Citrix">Citrix</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>danwing@gmail.com</email>
      </address>
    </author>
    <date year="2025" month="June" day="29"/>
    <keyword>local domain</keyword>
    <keyword>tls</keyword>
    <keyword>certificate</keyword>
    <keyword>allow-list</keyword>
    <keyword>allow list</keyword>
    <keyword>whitelist</keyword>
    <abstract>
      <?line 46?>

<t>Obtaining and maintaining PKI certificates for devices in a local
domain network is difficult for both technical and human factors
reasons. This document describes an alternative approach to securely
identify and authenticate servers in the local domain using a
HTTPS-based trust anchor system, called a Referee.  The Referee allows
bootstrapping a network of devices by trusting only the Referee trust
anchor in the local domain.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://danwing.github.io/referee/draft-wing-settle-referee.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wing-settle-referee/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        SETTLE  mailing list (<eref target="mailto:settle@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/settle/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/settle/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/danwing/referee"/>.</t>
    </note>
  </front>
  <middle>
    <?line 56?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Most existing TLS communications require the server obtaining a
certificate signed by a Certification Authority trusted by the client.
Within a local domain network this is fraught with complications of both
human factors and technical natures (e.g., local domain firewall,
lack of domain name).</t>
      <t>This document describes a trust anchor system to authorize the
legitimate servers on the local domain.  The trust anchor host, called a
Referee, helps clients identify and authenticate previously-enrolled
servers within the local domain.  The Referee system purposefully
avoids Public Key Infrastructure using X.509 <xref target="PKIX"/>,
instead using an "allow list" of public keys.</t>
      <t>When clients TLS connect to a server on the local domain and encounter a
self-signed certificate that might otherwise cause an authentication
failure (typically, a warning to the user), the client can send an
HTTP query the local domain's pre-authorized Referee system to learn
if that server has been enrolled with the Referee.  If so, it
indicates the server was enrolled in the Referee trust anchor and the
TLS connection can continue.</t>
    </section>
    <section anchor="unique-characteristics">
      <name>Unique Characteristics</name>
      <t>The system described in this draft has several characteristics that
differ from other trust anchor systems:</t>
      <ul spacing="normal">
        <li>
          <t>requires an always-on Referee server to authenticate servers on
the local domain,</t>
        </li>
        <li>
          <t>the client validates a server is authorized on the local domain via
an HTTPS query to the (Referee) server on the local domain, rather than
a signed certificate,</t>
        </li>
        <li>
          <t>can use raw public keys, as the dates and certificate signatures of
servers on the local domain are ignored by this system, in favor of
consulting the Referee,</t>
        </li>
        <li>
          <t>handles name collisions for servers on different networks, so two
different networks can both have servers with the same name (e.g.,
router.local),</t>
        </li>
        <li>
          <t>handles unique names for servers (e.g., router-abcdef123456.local),</t>
        </li>
        <li>
          <t>servers that participate in the Referee system can change their
public keys periodically and inform the Referee, which allows
clients to automatically handle those public key changes, and</t>
        </li>
        <li>
          <t>can operate without changes to non-Referee servers on the local
domain, provided such servers do not change their public
keys.</t>
        </li>
      </ul>
    </section>
    <section anchor="requirements-evaluation">
      <name>Requirements Evaluation</name>
      <t>Using requirements from <xref target="I-D.rbw-home-servers"/>, the proposal in this
document has the following summarized characteristics:</t>
      <table anchor="table1">
        <name>Summary of Referee Against Requirements</name>
        <thead>
          <tr>
            <th align="right">Solution Name</th>
            <th align="center">Reduce CA</th>
            <th align="center">Eliminate CA</th>
            <th align="center">Existing CA Support</th>
            <th align="center">Existing Client Support</th>
            <th align="center">Revoke Auth</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="right">Referee</td>
            <td align="center">Yes</td>
            <td align="center">Yes</td>
            <td align="center">N/A</td>
            <td align="center">No</td>
            <td align="center">Yes</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="operation">
      <name>Operation</name>
      <t><xref target="_figure-new-referee"/> shows a client receiving the DHCP message of
the local network's Referee, connecting to that Referee and, because
this Referee has never been seen before by this client, prompting the
user if this Referee is to be trusted.</t>
      <figure anchor="_figure-new-referee">
        <name>Message Sequence Diagram with New Referee</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="384" viewBox="0 0 384 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 48,80 L 48,144" fill="none" stroke="black"/>
              <path d="M 48,224 L 48,240" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
              <path d="M 128,48 L 128,80" fill="none" stroke="black"/>
              <path d="M 160,80 L 160,96" fill="none" stroke="black"/>
              <path d="M 160,128 L 160,208" fill="none" stroke="black"/>
              <path d="M 160,256 L 160,288" fill="none" stroke="black"/>
              <path d="M 160,320 L 160,336" fill="none" stroke="black"/>
              <path d="M 200,48 L 200,80" fill="none" stroke="black"/>
              <path d="M 264,32 L 264,80" fill="none" stroke="black"/>
              <path d="M 264,224 L 264,240" fill="none" stroke="black"/>
              <path d="M 304,80 L 304,144" fill="none" stroke="black"/>
              <path d="M 304,192 L 304,336" fill="none" stroke="black"/>
              <path d="M 344,32 L 344,80" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 264,32 L 344,32" fill="none" stroke="black"/>
              <path d="M 128,48 L 200,48" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 128,80 L 200,80" fill="none" stroke="black"/>
              <path d="M 264,80 L 344,80" fill="none" stroke="black"/>
              <path d="M 56,96 L 152,96" fill="none" stroke="black"/>
              <path d="M 40,144 L 56,144" fill="none" stroke="black"/>
              <path d="M 160,144 L 296,144" fill="none" stroke="black"/>
              <path d="M 64,208 L 248,208" fill="none" stroke="black"/>
              <path d="M 64,256 L 248,256" fill="none" stroke="black"/>
              <path d="M 64,288 L 248,288" fill="none" stroke="black"/>
              <path d="M 64,320 L 248,320" fill="none" stroke="black"/>
              <path d="M 64,208 C 55.16936,208 48,215.16936 48,224" fill="none" stroke="black"/>
              <path d="M 248,208 C 256.83064,208 264,215.16936 264,224" fill="none" stroke="black"/>
              <path d="M 64,256 C 55.16936,256 48,248.83064 48,240" fill="none" stroke="black"/>
              <path d="M 248,256 C 256.83064,256 264,248.83064 264,240" fill="none" stroke="black"/>
              <path d="M 64,288 C 55.16936,288 48,295.16936 48,304" fill="none" stroke="black"/>
              <path d="M 248,288 C 256.83064,288 264,295.16936 264,304" fill="none" stroke="black"/>
              <path d="M 64,320 C 55.16936,320 48,312.83064 48,304" fill="none" stroke="black"/>
              <path d="M 248,320 C 256.83064,320 264,312.83064 264,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="304,144 292,138.4 292,149.6" fill="black" transform="rotate(0,296,144)"/>
              <polygon class="arrowhead" points="160,96 148,90.4 148,101.6" fill="black" transform="rotate(0,152,96)"/>
              <polygon class="arrowhead" points="64,96 52,90.4 52,101.6" fill="black" transform="rotate(180,56,96)"/>
              <g class="text">
                <text x="44" y="52">DHCP</text>
                <text x="304" y="52">Referee</text>
                <text x="44" y="68">Server</text>
                <text x="164" y="68">Client</text>
                <text x="300" y="68">Server</text>
                <text x="60" y="116">1.</text>
                <text x="92" y="116">DHCP</text>
                <text x="180" y="116">request/response</text>
                <text x="172" y="164">2.</text>
                <text x="212" y="164">HTTPS:</text>
                <text x="268" y="164">obtain</text>
                <text x="328" y="164">Referee</text>
                <text x="232" y="180">certificate</text>
                <text x="296" y="180">and</text>
                <text x="348" y="180">complete</text>
                <text x="200" y="196">TLS</text>
                <text x="256" y="196">handshake</text>
                <text x="60" y="228">3.</text>
                <text x="104" y="228">Referee</text>
                <text x="152" y="228">not</text>
                <text x="212" y="228">previously</text>
                <text x="116" y="244">authorized</text>
                <text x="60" y="308">4.</text>
                <text x="100" y="308">Prompt</text>
                <text x="148" y="308">user</text>
                <text x="184" y="308">for</text>
                <text x="228" y="308">action</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
+--------+                      +---------+
|  DHCP  |     +--------+       | Referee |
| Server |     | Client |       | Server  |
+----+---+     +---+----+       +----+----+
     |<----------->|                 |
     |1. DHCP request/response       |
     |             |                 |
    -+-            +---------------->|
                   |2. HTTPS: obtain Referee
                   |   certificate and complete
                   |   TLS handshake |
      .------------+-----------.     |
     |3. Referee not previously |    |
     |   authorized             |    |
      '------------+-----------'     |
                   |                 |
      .------------+-----------.     |
     |4. Prompt user for action |    |
      '------------+-----------'     |
                   |                 |
]]></artwork>
        </artset>
      </figure>
      <t><xref target="_figure-auth-referee"/> shows a client connecting to a Referee that
was previously authorized by the client.  In this case, the user is
not prompted to re-authorize the Referee.</t>
      <figure anchor="_figure-auth-referee">
        <name>Message Sequence Diagram with Previously-Authorized Referee</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="384" viewBox="0 0 384 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
              <path d="M 48,80 L 48,144" fill="none" stroke="black"/>
              <path d="M 48,224 L 48,240" fill="none" stroke="black"/>
              <path d="M 80,32 L 80,80" fill="none" stroke="black"/>
              <path d="M 128,48 L 128,80" fill="none" stroke="black"/>
              <path d="M 160,80 L 160,96" fill="none" stroke="black"/>
              <path d="M 160,128 L 160,208" fill="none" stroke="black"/>
              <path d="M 160,256 L 160,272" fill="none" stroke="black"/>
              <path d="M 200,48 L 200,80" fill="none" stroke="black"/>
              <path d="M 240,224 L 240,240" fill="none" stroke="black"/>
              <path d="M 264,32 L 264,80" fill="none" stroke="black"/>
              <path d="M 304,80 L 304,144" fill="none" stroke="black"/>
              <path d="M 304,192 L 304,272" fill="none" stroke="black"/>
              <path d="M 344,32 L 344,80" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 264,32 L 344,32" fill="none" stroke="black"/>
              <path d="M 128,48 L 200,48" fill="none" stroke="black"/>
              <path d="M 8,80 L 80,80" fill="none" stroke="black"/>
              <path d="M 128,80 L 200,80" fill="none" stroke="black"/>
              <path d="M 264,80 L 344,80" fill="none" stroke="black"/>
              <path d="M 56,96 L 152,96" fill="none" stroke="black"/>
              <path d="M 40,144 L 56,144" fill="none" stroke="black"/>
              <path d="M 160,144 L 296,144" fill="none" stroke="black"/>
              <path d="M 64,208 L 224,208" fill="none" stroke="black"/>
              <path d="M 64,256 L 224,256" fill="none" stroke="black"/>
              <path d="M 64,208 C 55.16936,208 48,215.16936 48,224" fill="none" stroke="black"/>
              <path d="M 224,208 C 232.83064,208 240,215.16936 240,224" fill="none" stroke="black"/>
              <path d="M 64,256 C 55.16936,256 48,248.83064 48,240" fill="none" stroke="black"/>
              <path d="M 224,256 C 232.83064,256 240,248.83064 240,240" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="304,144 292,138.4 292,149.6" fill="black" transform="rotate(0,296,144)"/>
              <polygon class="arrowhead" points="160,96 148,90.4 148,101.6" fill="black" transform="rotate(0,152,96)"/>
              <polygon class="arrowhead" points="64,96 52,90.4 52,101.6" fill="black" transform="rotate(180,56,96)"/>
              <g class="text">
                <text x="44" y="52">DHCP</text>
                <text x="304" y="52">Referee</text>
                <text x="44" y="68">Server</text>
                <text x="164" y="68">Client</text>
                <text x="300" y="68">Server</text>
                <text x="60" y="116">1.</text>
                <text x="92" y="116">DHCP</text>
                <text x="180" y="116">request/response</text>
                <text x="172" y="164">2.</text>
                <text x="212" y="164">HTTPS:</text>
                <text x="268" y="164">obtain</text>
                <text x="328" y="164">Referee</text>
                <text x="232" y="180">certificate</text>
                <text x="296" y="180">and</text>
                <text x="348" y="180">complete</text>
                <text x="200" y="196">TLS</text>
                <text x="256" y="196">handshake</text>
                <text x="60" y="228">3.</text>
                <text x="104" y="228">Referee</text>
                <text x="180" y="228">previously</text>
                <text x="116" y="244">authorized</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
+--------+                      +---------+
|  DHCP  |     +--------+       | Referee |
| Server |     | Client |       | Server  |
+----+---+     +---+----+       +----+----+
     |<----------->|                 |
     |1. DHCP request/response       |
     |             |                 |
    -+-            +---------------->|
                   |2. HTTPS: obtain Referee
                   |   certificate and complete
                   |   TLS handshake |
      .------------+--------.        |
     |3. Referee previously  |       |
     |   authorized          |       |
      '------------+--------'        |
                   |                 |
]]></artwork>
        </artset>
      </figure>
      <t><xref target="_figure-connect-server"/> shows a client, after performing the above
steps with its Referee, connecting to a server on the local domain and
then validating that server's public key with its Referee. The
validation with the Referee is done in lieu of validating the
certificate of that server on the local domain.</t>
      <figure anchor="_figure-connect-server">
        <name>Message Sequence Diagram to Server on Local Domain</name>
        <artset>
          <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="480" viewBox="0 0 480 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,160 L 8,176" fill="none" stroke="black"/>
              <path d="M 88,48 L 88,80" fill="none" stroke="black"/>
              <path d="M 120,80 L 120,144" fill="none" stroke="black"/>
              <path d="M 120,192 L 120,288" fill="none" stroke="black"/>
              <path d="M 120,320 L 120,352" fill="none" stroke="black"/>
              <path d="M 160,48 L 160,80" fill="none" stroke="black"/>
              <path d="M 200,160 L 200,176" fill="none" stroke="black"/>
              <path d="M 224,32 L 224,80" fill="none" stroke="black"/>
              <path d="M 264,80 L 264,104" fill="none" stroke="black"/>
              <path d="M 264,144 L 264,208" fill="none" stroke="black"/>
              <path d="M 264,240 L 264,288" fill="none" stroke="black"/>
              <path d="M 304,32 L 304,80" fill="none" stroke="black"/>
              <path d="M 320,32 L 320,80" fill="none" stroke="black"/>
              <path d="M 384,80 L 384,208" fill="none" stroke="black"/>
              <path d="M 384,240 L 384,352" fill="none" stroke="black"/>
              <path d="M 440,32 L 440,80" fill="none" stroke="black"/>
              <path d="M 224,32 L 304,32" fill="none" stroke="black"/>
              <path d="M 320,32 L 440,32" fill="none" stroke="black"/>
              <path d="M 88,48 L 160,48" fill="none" stroke="black"/>
              <path d="M 88,80 L 160,80" fill="none" stroke="black"/>
              <path d="M 224,80 L 304,80" fill="none" stroke="black"/>
              <path d="M 320,80 L 440,80" fill="none" stroke="black"/>
              <path d="M 120,112 L 376,112" fill="none" stroke="black"/>
              <path d="M 24,144 L 184,144" fill="none" stroke="black"/>
              <path d="M 24,192 L 184,192" fill="none" stroke="black"/>
              <path d="M 120,208 L 256,208" fill="none" stroke="black"/>
              <path d="M 128,256 L 264,256" fill="none" stroke="black"/>
              <path d="M 24,288 L 184,288" fill="none" stroke="black"/>
              <path d="M 256,288 L 272,288" fill="none" stroke="black"/>
              <path d="M 24,320 L 184,320" fill="none" stroke="black"/>
              <path d="M 128,336 L 200,336" fill="none" stroke="black"/>
              <path d="M 312,336 L 376,336" fill="none" stroke="black"/>
              <path d="M 24,144 C 15.16936,144 8,151.16936 8,160" fill="none" stroke="black"/>
              <path d="M 184,144 C 192.83064,144 200,151.16936 200,160" fill="none" stroke="black"/>
              <path d="M 24,192 C 15.16936,192 8,184.83064 8,176" fill="none" stroke="black"/>
              <path d="M 184,192 C 192.83064,192 200,184.83064 200,176" fill="none" stroke="black"/>
              <path d="M 24,288 C 15.16936,288 8,295.16936 8,304" fill="none" stroke="black"/>
              <path d="M 184,288 C 192.83064,288 200,295.16936 200,304" fill="none" stroke="black"/>
              <path d="M 24,320 C 15.16936,320 8,312.83064 8,304" fill="none" stroke="black"/>
              <path d="M 184,320 C 192.83064,320 200,312.83064 200,304" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="384,336 372,330.4 372,341.6" fill="black" transform="rotate(0,376,336)"/>
              <polygon class="arrowhead" points="384,112 372,106.4 372,117.6" fill="black" transform="rotate(0,376,112)"/>
              <polygon class="arrowhead" points="264,208 252,202.4 252,213.6" fill="black" transform="rotate(0,256,208)"/>
              <polygon class="arrowhead" points="136,336 124,330.4 124,341.6" fill="black" transform="rotate(180,128,336)"/>
              <polygon class="arrowhead" points="136,256 124,250.4 124,261.6" fill="black" transform="rotate(180,128,256)"/>
              <g class="text">
                <text x="264" y="52">Referee</text>
                <text x="352" y="52">Local</text>
                <text x="404" y="52">Domain</text>
                <text x="124" y="68">Client</text>
                <text x="260" y="68">Server</text>
                <text x="380" y="68">Server</text>
                <text x="132" y="132">4.</text>
                <text x="180" y="132">complete</text>
                <text x="232" y="132">TLS</text>
                <text x="288" y="132">handshake</text>
                <text x="20" y="164">5.</text>
                <text x="64" y="164">unknown</text>
                <text x="124" y="164">public</text>
                <text x="168" y="164">key</text>
                <text x="44" y="180">so</text>
                <text x="80" y="180">query</text>
                <text x="136" y="180">Referee</text>
                <text x="132" y="228">6.</text>
                <text x="168" y="228">HTTPS</text>
                <text x="208" y="228">GET</text>
                <text x="260" y="228">server's</text>
                <text x="324" y="228">public</text>
                <text x="368" y="228">key</text>
                <text x="432" y="228">fingerprint</text>
                <text x="132" y="276">7.</text>
                <text x="168" y="276">HTTPS</text>
                <text x="228" y="276">response</text>
                <text x="20" y="308">8.</text>
                <text x="52" y="308">keys</text>
                <text x="100" y="308">match;</text>
                <text x="164" y="308">continue</text>
                <text x="220" y="340">9.</text>
                <text x="248" y="340">TLS</text>
                <text x="284" y="340">data</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art" align="center"><![CDATA[
                                +---------+ +--------------+
               +--------+       | Referee | | Local Domain |
               | Client |       | Server  | |    Server    |
               +---+----+       +----+----+ +-------+------+
                   |                 |              |
                   +------------------------------->|
                   |4. complete TLS handshake       |
      .------------+--------.        |              |
     |5. unknown public key  |       |              |
     |   so query Referee    |       |              |
      '------------+--------'        |              |
                   +---------------->|              |
                   |6. HTTPS GET server's public key fingerprint
                   |                 |              |
                   |<----------------+              |
                   |7. HTTPS response|              |
      .------------+--------.       -+-             |
     |8. keys match; continue|                      |
      '------------+--------'                       |
                   |<--------- 9. TLS data -------->|
                   |                                |
]]></artwork>
        </artset>
      </figure>
      <section anchor="referee">
        <name>Referee</name>
        <t>The Referee trust anchor function is implemented within any always-on
device within the local domain (e.g., router, smart home hub, NAS, or
a virtualized CPE).  The Referee runs HTTPS and serves files
containing public key fingerprints indexed by each server's local
domain name.  These files are populated by servers on the local domain
that support Referee or manually as described in <xref target="server-bootstrapping"/>.</t>
        <t>Clients authenticate the Referee and use HTTP GET to fetch the
named public key fingerprint from the Referee server using a
well-known URI.  The Referee returns the SHA-256 fingerprint of the server's public
key as an octet-stream.</t>
        <t>For example if the server's name is "smarttv-abcdef123.internal" the
following HTTP GET would be issued by the client to retrieve that
server's public key fingerprint:</t>
        <artwork><![CDATA[
  GET /.well-known/referee/sha256/smarttv-abcdef123.internal
]]></artwork>
      </section>
      <section anchor="servers">
        <name>Servers</name>
        <t>A server supporting this specification is expected to be a printer
(using IPPS or HTTPS), file server (e.g., NAS or laptop), IoT device,
router (especially its HTTPS-based management console), scanner,
Smart TV, or similar.</t>
        <t>Each local domain device supporting Referee has a public key.  During
installation of the device to a Referee network, the device's hostname
and public key fingerprint are stored into the Referee Server.
Several options exist for this step, detailed in <xref target="bootstrapping"/>.</t>
        <t>If a server's public key changes (e.g., factory reset, key rotation,
public key algorithm change) the new key needs to be enrolled with the
Referee and the old key removed (see <xref target="key-lifetime"/>). Clients will
notice the mismatch and will query the Referee, which provides the
new key's fingerprint, authenticating the server (with its new
key) to the client.</t>
      </section>
      <section anchor="clients">
        <name>Clients</name>
        <t>A client supporting this specification is first configured with the
DNS name of its Referee server, which might occur via service discovery
(see <xref target="discovery"/>).  The client authenticates and authorizes the
Referee server using one of the bootstrapping mechanisms (see
<xref target="bootstrapping"/>). This step occurs only once for each home network
the client joins, as each home network is responsible for being a
Referee for its own local domain.  A quality implementation may reduce
user prompting by sharing known Referee server identities across a
user's various devices, or by other means.</t>
        <t>On a connection to a server on the local domain (see <xref target="local"/>) the
client includes the server's local domain name in the TLS Server Name
Indication (SNI) extension of its ClientHello.  A client may additionally
cache the association of authorized servers to that same local domain, after the client has
completed a TLS handshake to the Referee to verify the client is
connected to that Referee's network.  Upon disconnection from that
network, the client invalidates its cache until connected to a new
network and validating that network's Referee.</t>
        <t>On receiving the server's certificate in the TLS exchange, the
client will have previously cached that server+Referee combination,
or not, as discussed below:</t>
        <ul spacing="normal">
          <li>
            <t>If not previously cached, the client queries that network's Referee
with the DNS name of the server (e.g., printer.internal).  The Referee
responds with the public key fingerprint of that server.  The client
checks if the public key fingerprint (from the Referee) matches the
public key of the server (from the TLS handshake). If they match,
communication with the server continues and the server name and its
public key might be cached by the client.  If they do not match, the
client aborts this communication session; further actions by the
client are an implementation detail.</t>
          </li>
          <li>
            <t>If previously cached, the client determines if the cached public key
matches the public key obtained from the TLS handshake with the
server.  If they match, communication continues.  If they do not
match, the queries the Referee to learn if a new key fingerprint is
available for that server.  If a different fingerprint is returned by
the Referee, the client verifies it matches the public key from the
TLS handshake.  If they match, the client replaces the information in
its cache.</t>
          </li>
        </ul>
        <t>Internally, a client might form a unique identity for a local domain
server as hostname (e.g., printer.local) combined with the identity of
the Referee, such as the Referee's public key fingerprint (if not
signed by a global Certification Authority) or the Referee's name (if
signed by a global Certification Authority).  In this way, when the
client is on a different network (which will have a different
Referee), a server name collision (e.g., router.local) will result in
a unique internal identity for that server -- keeping all the
server-specific data separate for those two servers on different
networks (e.g., web forms, passwords, local storage, etc.)</t>
      </section>
      <section anchor="revoking-authorization">
        <name>Revoking Authorization</name>
        <t>When the administrator revokes authorization for a server (e.g., replacement
of a server), the administrator removes the old public key from the Referee
and installs the new key in the Referee.</t>
        <t>When this replacement occurs, the clients that have not already cached
the server's public key will simply query the Referee, which has the server's
new public key.  The clients that have cached the server's previous public
key will notice the mismatch, pause their communication with the server, and
validate with the Referee that the new key is legitimate, and continue their
communication with the server.</t>
        <t>Thus, revoking authentication has immediate effect because the clients
immediately validate a mismatch with the Referee.</t>
      </section>
    </section>
    <section anchor="bootstrapping">
      <name>Bootstrapping the Referee</name>
      <section anchor="clients-to-referee">
        <name>Clients to Referee</name>
        <t>The clients have to be configured to trust their Referee. This is
a one time activity, for each home network the client joins.  This
can be somewhat automated using service discovery (<xref target="discovery"/>).</t>
        <t>The client is configured to trust the Referee server's public key.  If
this key changes, session resumption might be useful to avoid having
the client re-configured to trust that new public key, see
<xref target="referee-public-key-change"/>.</t>
      </section>
      <section anchor="server-bootstrapping">
        <name>Servers to Referee</name>
        <t>Server names and their associated public key fingerprints have to
be enrolled with the Referee.  This can be automated by servers
that support Referee, or can be done manually for servers that do not
(yet) support Referee -- providing immediate value to Referee clients
without waiting for server Referee support.</t>
        <section anchor="short-code-or-scan-code">
          <name>Short Code or Scan Code</name>
          <t>Short code printed on the Referee-capable server which can be scanned
by a smartphone application by the home administrator which is
authorized to push new associations to the Referee.</t>
        </section>
        <section anchor="incremental-deployment-and-manual-referee-configuration">
          <name>Incremental Deployment and Manual Referee Configuration</name>
          <t>It is useful for a Referee server to provide immediate value on its
installation, even when servers do not (yet) support Referee.  The
Referee system requires support of both the client (to ask the Referee
for mediation) and installation of a Referee -- which could be in the
home router, NAS, or other always-on device.  This section explores
how to bootstrap Referee system when servers on the local domain
do not (yet) support Referee.</t>
          <t>The Referee has a user interface for manual addition of a
server.  For example the user might cause the Referee to connect to a
server on the local domain using TLS, extract its public key, and
create the hostname and public key fingerprint association on the
Referee.  Additionally, the Referee might also scan the local domain
network looking for TLS servers on common ports (e.g., HTTPS, IMAPS,
IPPS, NNTPS, IMAPS, POP3S) to enumerate a list of servers for the
user to approve the same association on the Referee.</t>
          <t>To accommodate servers that change their public key but do not (yet)
register that change with the Referee, the Referee can refresh its
server fingerprints at user request.  The user request might be
initiated by the administrator or an HTTP message from the client
to the Referee of a key mismatch.</t>
        </section>
      </section>
    </section>
    <section anchor="local">
      <name>Identifying Servers as Local</name>
      <t>This section defines the domain names and IP addresses considered
"local".</t>
      <section anchor="local-domain-names">
        <name>Local Domain Names</name>
        <t>The following domain name suffixes are considered "local":</t>
        <ul spacing="normal">
          <li>
            <t>".local" (from <xref target="mDNS"/>)</t>
          </li>
          <li>
            <t>".home-arpa" (from <xref target="Homenet"/>)</t>
          </li>
          <li>
            <t>".internal" (from <xref target="I-D.davies-internal-tld"/>)</t>
          </li>
          <li>
            <t>both ".localhost" and "localhost" (Section 6.3 of <xref target="RFC6761"/>)</t>
          </li>
        </ul>
      </section>
      <section anchor="local-ip-addresses">
        <name>Local IP Addresses</name>
        <t>Additionally, if any host resolves to a local IP address and
connection is made to that address, those are also considered
"local":</t>
        <ul spacing="normal">
          <li>
            <t>10/8, 172.16/12, and 192.168/16 (from <xref target="RFC1918"/>)</t>
          </li>
          <li>
            <t>169.254/16 and fe80::/10 (from <xref target="RFC3927"/> and <xref target="RFC4291"/>)</t>
          </li>
          <li>
            <t>fc00::/7 (from <xref target="RFC4193"/>)</t>
          </li>
          <li>
            <t>127/8 and ::1/128 (from <xref section="3.2.1.3" sectionFormat="of" target="RFC1122"/> and <xref target="RFC4291"/>)</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="discovery">
      <name>Service Discovery</name>
      <t>To ease initial bootstrapping the client, the local domain can
advertise its Referee server using a new DHCP option (see <xref target="iana"/>).
The client connects to that server using HTTPS and extracts the public
key.  Each local domain has its own Referee which only has purview
over servers in its same local domain.  The Referee's public key has
either not been seen before or has been seen before:</t>
      <ul spacing="normal">
        <li>
          <t>If the public key has not been seen before, the user needs to
approve use of that Referee trust anchor for this local domain; the
exact method is out of scope of this document.</t>
        </li>
        <li>
          <t>If the public key has been seen before, and was previously approved
(or previously rejected) by the user, that same user decision is
applied again.</t>
        </li>
      </ul>
    </section>
    <section anchor="operational">
      <name>Operational Considerations</name>
      <t>The Referee has to always be available.  The client cache helps reduce
load on the Referee but new clients (e.g., new devices, guest users, restored
devices) and client cache invalidation will always cause some traffic to
the Referee.</t>
      <t>When the Referee is unavailable, clients behavior devolves to what
we have today:  servers will need to obtain a real PKI certificate
signed by a Certification Authority already trusted by the clients, or
else clients will need to manually trust individual certificates.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO: expand security considerations.</t>
      <t>See <xref target="operational"/> describing client behavior when the Referee
is unavailable.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>Register new .well_known URI for Referee server.</t>
      <t>Register new DHCP option for Referee server.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-informative-references">
      <name>Informative References</name>
      <reference anchor="PKIX">
        <front>
          <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
          <author fullname="D. Cooper" initials="D." surname="Cooper"/>
          <author fullname="S. Santesson" initials="S." surname="Santesson"/>
          <author fullname="S. Farrell" initials="S." surname="Farrell"/>
          <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
          <author fullname="R. Housley" initials="R." surname="Housley"/>
          <author fullname="W. Polk" initials="W." surname="Polk"/>
          <date month="May" year="2008"/>
          <abstract>
            <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5280"/>
        <seriesInfo name="DOI" value="10.17487/RFC5280"/>
      </reference>
      <reference anchor="I-D.rbw-home-servers">
        <front>
          <title>Identifying and Authenticating Home Servers: Requirements and Solution Analysis</title>
          <author fullname="Tirumaleswar Reddy.K" initials="T." surname="Reddy.K">
            <organization>Nokia</organization>
          </author>
          <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
            <organization>Orange</organization>
          </author>
          <author fullname="Dan Wing" initials="D." surname="Wing">
            <organization>Cloud Software Group Holdings, Inc.</organization>
          </author>
          <date day="19" month="September" year="2024"/>
          <abstract>
            <t>   Obtaining CA-signed certificates for servers within a home network is
   difficult and causes problems at scale.  This document explores
   requirements to improve this situation and analyzes existing
   solutions.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-rbw-home-servers-00"/>
      </reference>
      <reference anchor="mDNS">
        <front>
          <title>Multicast DNS</title>
          <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
          <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
          <date month="February" year="2013"/>
          <abstract>
            <t>As networked devices become smaller, more portable, and more ubiquitous, the ability to operate with less configured infrastructure is increasingly important. In particular, the ability to look up DNS resource record data types (including, but not limited to, host names) in the absence of a conventional managed DNS server is useful.</t>
            <t>Multicast DNS (mDNS) provides the ability to perform DNS-like operations on the local link in the absence of any conventional Unicast DNS server. In addition, Multicast DNS designates a portion of the DNS namespace to be free for local use, without the need to pay any annual fee, and without the need to set up delegations or otherwise configure a conventional DNS server to answer for those names.</t>
            <t>The primary benefits of Multicast DNS names are that (i) they require little or no administration or configuration to set them up, (ii) they work when no infrastructure is present, and (iii) they work during infrastructure failures.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6762"/>
        <seriesInfo name="DOI" value="10.17487/RFC6762"/>
      </reference>
      <reference anchor="Homenet">
        <front>
          <title>Special-Use Domain 'home.arpa.'</title>
          <author fullname="P. Pfister" initials="P." surname="Pfister"/>
          <author fullname="T. Lemon" initials="T." surname="Lemon"/>
          <date month="May" year="2018"/>
          <abstract>
            <t>This document specifies the behavior that is expected from the Domain Name System with regard to DNS queries for names ending with '.home.arpa.' and designates this domain as a special-use domain name. 'home.arpa.' is designated for non-unique use in residential home networks. The Home Networking Control Protocol (HNCP) is updated to use the 'home.arpa.' domain instead of '.home'.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8375"/>
        <seriesInfo name="DOI" value="10.17487/RFC8375"/>
      </reference>
      <reference anchor="I-D.davies-internal-tld">
        <front>
          <title>A Top-level Domain for Private Use</title>
          <author fullname="Kim Davies" initials="K." surname="Davies">
            <organization>Internet Assigned Numbers Authority</organization>
          </author>
          <author fullname="Andrew McConachie" initials="A." surname="McConachie">
            <organization>Internet Corporation for Assigned Names and Numbers</organization>
          </author>
          <author fullname="Warren Kumari" initials="W." surname="Kumari">
            <organization>Google</organization>
          </author>
          <date day="3" month="March" year="2025"/>
          <abstract>
            <t>   This document describes the "internal" top-level domain for use in
   private applications.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-davies-internal-tld-03"/>
      </reference>
      <reference anchor="RFC6761">
        <front>
          <title>Special-Use Domain Names</title>
          <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
          <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
          <date month="February" year="2013"/>
          <abstract>
            <t>This document describes what it means to say that a Domain Name (DNS name) is reserved for special use, when reserving such a name is appropriate, and the procedure for doing so. It establishes an IANA registry for such domain names, and seeds it with entries for some of the already established special domain names.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6761"/>
        <seriesInfo name="DOI" value="10.17487/RFC6761"/>
      </reference>
      <reference anchor="RFC1918">
        <front>
          <title>Address Allocation for Private Internets</title>
          <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
          <author fullname="B. Moskowitz" initials="B." surname="Moskowitz"/>
          <author fullname="D. Karrenberg" initials="D." surname="Karrenberg"/>
          <author fullname="G. J. de Groot" initials="G. J." surname="de Groot"/>
          <author fullname="E. Lear" initials="E." surname="Lear"/>
          <date month="February" year="1996"/>
          <abstract>
            <t>This document describes address allocation for private internets. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="5"/>
        <seriesInfo name="RFC" value="1918"/>
        <seriesInfo name="DOI" value="10.17487/RFC1918"/>
      </reference>
      <reference anchor="RFC3927">
        <front>
          <title>Dynamic Configuration of IPv4 Link-Local Addresses</title>
          <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
          <author fullname="B. Aboba" initials="B." surname="Aboba"/>
          <author fullname="E. Guttman" initials="E." surname="Guttman"/>
          <date month="May" year="2005"/>
          <abstract>
            <t>To participate in wide-area IP networking, a host needs to be configured with IP addresses for its interfaces, either manually by the user or automatically from a source on the network such as a Dynamic Host Configuration Protocol (DHCP) server. Unfortunately, such address configuration information may not always be available. It is therefore beneficial for a host to be able to depend on a useful subset of IP networking functions even when no address configuration is available. This document describes how a host may automatically configure an interface with an IPv4 address within the 169.254/16 prefix that is valid for communication with other devices connected to the same physical (or logical) link.</t>
            <t>IPv4 Link-Local addresses are not suitable for communication with devices not directly connected to the same physical (or logical) link, and are only used where stable, routable addresses are not available (such as on ad hoc or isolated networks). This document does not recommend that IPv4 Link-Local addresses and routable addresses be configured simultaneously on the same interface. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3927"/>
        <seriesInfo name="DOI" value="10.17487/RFC3927"/>
      </reference>
      <reference anchor="RFC4291">
        <front>
          <title>IP Version 6 Addressing Architecture</title>
          <author fullname="R. Hinden" initials="R." surname="Hinden"/>
          <author fullname="S. Deering" initials="S." surname="Deering"/>
          <date month="February" year="2006"/>
          <abstract>
            <t>This specification defines the addressing architecture of the IP Version 6 (IPv6) protocol. The document includes the IPv6 addressing model, text representations of IPv6 addresses, definition of IPv6 unicast addresses, anycast addresses, and multicast addresses, and an IPv6 node's required addresses.</t>
            <t>This document obsoletes RFC 3513, "IP Version 6 Addressing Architecture". [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4291"/>
        <seriesInfo name="DOI" value="10.17487/RFC4291"/>
      </reference>
      <reference anchor="RFC4193">
        <front>
          <title>Unique Local IPv6 Unicast Addresses</title>
          <author fullname="R. Hinden" initials="R." surname="Hinden"/>
          <author fullname="B. Haberman" initials="B." surname="Haberman"/>
          <date month="October" year="2005"/>
          <abstract>
            <t>This document defines an IPv6 unicast address format that is globally unique and is intended for local communications, usually inside of a site. These addresses are not expected to be routable on the global Internet. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4193"/>
        <seriesInfo name="DOI" value="10.17487/RFC4193"/>
      </reference>
      <reference anchor="RFC1122">
        <front>
          <title>Requirements for Internet Hosts - Communication Layers</title>
          <author fullname="R. Braden" initials="R." role="editor" surname="Braden"/>
          <date month="October" year="1989"/>
          <abstract>
            <t>This RFC is an official specification for the Internet community. It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="3"/>
        <seriesInfo name="RFC" value="1122"/>
        <seriesInfo name="DOI" value="10.17487/RFC1122"/>
      </reference>
      <reference anchor="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
    </references>
    <?line 446?>

<section anchor="issues-for-further-discussion">
      <name>Issues for Further Discussion</name>
      <section anchor="pki-fallback">
        <name>PKI Fallback</name>
        <t>Currently the text suggests clients should fallback to PKI if Referee
validation fails.  This means certificate warnings for self-signed
certificates.  Is such fallback harmful or is it worthwhile?</t>
      </section>
      <section anchor="distinct-local-domain-with-its-own-referee">
        <name>Distinct Local Domain with its Own Referee</name>
        <t>Each local domain is anticipated to have its own Referee.  Thus, when
a client visits another network, that network will have its own
Referee which is learned via service discovery.  That Referee is
bootstrapped same as the 'home' network's Referee (see <xref target="bootstrapping"/>).</t>
      </section>
      <section anchor="redundant-referees-on-one-local-domain">
        <name>Redundant Referees on One Local Domain</name>
        <t>This draft only discusses a single Referee on each Local Domain.
Multiple Referees may well be desirable for redundancy but are out of
scope of this draft.</t>
      </section>
      <section anchor="unique-names">
        <name>Unique Names</name>
        <t>Printer.internal or printer.local are handy names and can be used
with a Referee system.</t>
        <t>Unfortunately existing browsers have state that is tied to names --
web forms, cookies, and passwords.  Thus, those existing systems need names that contain a
unique identifier like a UUID, e.g.,
printer.2180be87-3e00-4c7f-a366-5b57fce4cbf7.internal.  Or perhaps
embedding part/all of the public key into the name itself, for
example:</t>
        <artwork><![CDATA[
  printer.2180be87-3e00-4c7f-a366-5b57fce4cbf7.internal
  nas.103a40ee-c76f-46da-84a1-054b8f18ae33.internal
  router.fb5f73ed-275a-431e-aecf-436f0c54d69d.local
]]></artwork>
        <t>The Referee system is ambivalent about the host name -- the Referee's
name and each server's name need only be unique on the current local
domain. Name collisions that occur between local domains are handled
by the client querying the other network's trusted Referee to check
legitimacy.</t>
        <t>The Referee system allows keeping the unique name the same for the
lifetime of the device while allowing changing its public key, as
discussed in the following section.</t>
      </section>
      <section anchor="key-lifetime">
        <name>Key Lifetime (Rotating Public Key)</name>
        <t>For security hygiene, the public keys in a server and the Referee may
be occasionally changed. This section discusses how such changes are
handled by a Referee system.</t>
        <section anchor="server">
          <name>Server</name>
          <t>If a server's public key changes the new key has to be installed
into the network's Referee.  To automate such changes, the server could connect to the
Referee and prove possession of its (old) private key (using TLS
client authentication or using application-layer mechanism such as
JSON Web Signature) and publish its new public key using an HTTP PUT.</t>
          <ul empty="true">
            <li>
              <t>Note: such a PUT mechanism also means an attacker in possession of
the server's private key can change the legitimate server's public key
fingerprint in the Referee to now point at an attacker-controlled
system, denying access to the legitimate server. It is still better than
unencrypted connections, which is the case today.</t>
            </li>
          </ul>
        </section>
        <section anchor="referee-public-key-change">
          <name>Referee</name>
          <t>If the Referee's public key changes all the clients have to
re-authenticate the Referee's new public key.  This is uncool.</t>
          <t>To allow changing the Referee's public key without needing the client
to re-authenticate the Referee, the client and Referee could do
session resumption for its subsequent connections to the Referee
(Section 2.2 of <xref target="RFC8446"/>).  If session resumption succeeds, the
client can query a the Referee's own well-known URI to determine if
the Referee's public key has changed, and update itself accordingly.</t>
          <t>With the above technique, the client will only have to (manually)
re-authenticate the Referee when the Referee cannot perform session
resumption.  As session resumption is usually implemented using the
server's private key, the Referee would need to remember its previous
private key (or two or three).</t>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Sridharan Rajagopalan for reviews and feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
