<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' []>
<rfc ipr="trust200902" category="info" docName="draft-latour-dnsoperator-to-rrr-protocol-00.txt">
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc private=""?>
<?rfc topblock="yes"?>
<?rfc comments="no"?>
<front>
<title abbrev="3-DNS-RRR">Third Party DNS operator to Registrars/Registries Protocol</title>

<author initials="J." surname="Latour" fullname="Jacques Latour">
<organization>CIRA</organization>
<address>
<postal>
<street></street>
<city></city>
<code></code>
<country></country>
<region></region>
</postal>
<phone></phone>
<email>jacques.latour@cira.ca</email>
<uri></uri>
</address>
</author>
<author initials="O." surname="Gudmundsson" fullname="Olafur Gudmundsson">
<organization>Cloudflare, Inc.</organization>
<address>
<postal>
<street></street>
<city></city>
<code></code>
<country></country>
<region></region>
</postal>
<phone></phone>
<email>olafur+ietf@cloudflare.com</email>
<uri></uri>
</address>
</author>
<author initials="P." surname="Wouters" fullname="Paul Wouters">
<organization>Red Hat</organization>
<address>
<postal>
<street></street>
<city></city>
<code></code>
<country></country>
<region></region>
</postal>
<phone></phone>
<email>paul@nohats.ca</email>
<uri></uri>
</address>
</author>
<author initials="M." surname="Pounsett" fullname="Matthew Pounsett">
<organization>Rightside</organization>
<address>
<postal>
<street></street>
<city></city>
<code></code>
<country></country>
<region></region>
</postal>
<phone></phone>
<email>matt@conundrum.com</email>
<uri></uri>
</address>
</author>
<date year="2015" month="October" day="19"/>

<area>Applications</area>
<workgroup></workgroup>
<keyword>dnssec</keyword>
<keyword>delegation maintainance</keyword>
<keyword>trust anchors</keyword>


<abstract>
<t>There are several problems that arise in the standard
Registrant/Registrar/Registry model when the operator of a zone is
neither the Registrant nor the Registrar for the delegation.  Historically
the issues have been minor, and limited to difficulty guiding the
Registrant through the initial changes to the NS records for the
delegation.  As this is usually a one time activity when the operator first
takes charge of the zone it has not been treated as a serious issue.
</t>
<t>When the domain on the other hand uses DNSSEC it necessary for the Registrant in this
situation to make regular (sometimes annual) changes to the delegation in
order to track KSK rollover, by updating the delegation's DS record(s).
Under the current model this is prone to Registrant error and significant
delays. Even when the Registrant has outsourced the operation of DNS to a third party
the registrant still has to be in the loop to update the DS record.
</t>
<t>There is a need for a simple protocol that allows a third party DNS
operator to update DS and NS records for a delegation without involving
the registrant for each operation.
</t>
<t>The protocol described in this draft is REST based, and when used through
an authenticated channel can be used to bootstrap DNSSEC.  Once DNSSEC is
established this channel can be used to trigger maintenance of delegation
records such as DS, NS, and glue records.   The protocol is kept as simple as possible.
</t>
</abstract>

</front>

<middle>

<section anchor="introduction" title="Introduction">
<t>Why is this needed ?
DNS registration systems today are designed around making
registrations easy and fast. After the domain has been registered the
there are really three options on who maintains the DNS zone that is
loaded on the &quot;primary&quot; DNS servers for the domain this can be the
Registrant, Registrar, or a third party.
</t>
<t>Unfortunately the ease to make changes differs for each one of these
options. The Registrant needs to use the interface that the registrar
provides to update NS and DS records. The Registrar on the other hand
can make changes directly into the registration system. The third
party operator on the hand needs to go through the Registrant to
update any delegation information.
</t>
<t>Current system does not work well, there are many examples of failures
including the inability to upload DS records du to non-support by
Registrar interface, the registrant forgets/does-not perform action but
tools proceed with key rollover without checking that the new DS is in
place. Another common failure is the DS record is not removed when the
DNS operator changes from one that supports DNSSEC signing to one that
does not.
</t>
<t>The failures result either inability to use DNSSEC or in validation
failures that case the domain to become invalid and all users that are
behind validating resolvers will not be able to to access the domain.
</t>
</section>

<section anchor="notational-conventions" title="Notational Conventions">

<section anchor="definitions" title="Definitions">
<t>For the purposes of this draft, a third-party DNS operator is any
DNS operator responsible for a zone where the operator is neither
the Registrant nor the Registrar of record for the delegation.
</t>
<t>When we say Registrar that can in many cases be applied to a Reseller
i.e. an entity that sells delegations but registrations are processed
through the Registrar.
</t>
</section>

<section anchor="rfc2119-keywords" title="RFC2119 Keywords">
<t>The key words &quot;MUST&quot;, &quot;MUST NOT&quot;, &quot;REQUIRED&quot;, &quot;SHALL&quot;,
&quot;SHALL NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;, &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and
&quot;OPTIONAL&quot; in this document are to be interpreted as described
in <xref target="RFC2119"/>.
</t>
</section>
</section>

<section anchor="what-is-the-goal-" title="What is the goal ?">
<t>The primary goal is to use the DNS protocol to provide information from
child zone to the parent zone, this is a way to maintain the
delegation information. The precondition for this to be practical is
that the domain is DNSSEC signed.
</t>
<t>IN the general case there should be a way to find the right
Registrar/Registry entity to talk to but that does not exist. Whois[]
is the natural protocol to carry such information but that protocol is
unreliable and hard to parse. Its proposed successor RDAP <xref target="RFC7480"/>
has yet be deployed on any TLD.
</t>
<t>The preferred communication mechanism is to use is to use a REST <xref target="RFC6690"/>
call to start processing of the requested delegation information.
</t>

<section anchor="why-dnssec-" title="Why DNSSEC ?">
<t>DNSSEC <xref target="RFC4035"/> provides data authentication for DNS answers,
having DNSSEC enabled makes it possible to trust the answers. The
biggest stumbling block is deploying DNSSEC is the initial
configuration of the DNSSEC domain trust anchor in the parent, DS
record.
</t>
</section>

<section anchor="how-does-domain-signal-to-parent-it-wants-dnssec-trust-anchor-" title="How does Domain signal to parent it wants DNSSEC Trust Anchor ?">
<t>The child needs first to sign the domain, then the child can &quot;upload&quot;
the DS record. The &quot;normal&quot; way to upload is to go through
registration interface, but that fails frequently. The DNS operator
may not have access to the interface thus the registrant needs to
relay the information. For large operations this does not scale, as
evident in lack of Trust Anchors for signed deployments that are
operated by third parties.
</t>
<t>The child can signal its desire to have DNSSEC validation enabled by
publishing one of the special DNS records CDS and/or
CDNSKEY<xref target="RFC7344"/>. Once the &quot;parent&quot; &quot;sees&quot; these records it SHOULD
start acceptance processing. This document will cover below how to
make the CDS records visible to the right parental agent.
</t>
<t>We argue that the publication of CDS/CDNSKEY record is sufficient for
the parent to start acceptance processing. The main point is to
provide authentication thus if the child is in &quot;good&quot; state then the DS
upload should be simple to accept and publish. If there is a problem
the parent has ability to remove the DS at any time.
</t>
</section>

<section anchor="what-checks-are-needed-by-parent-" title="What checks are needed by parent ?">
<t>The parent upon receiving a signal that it check the child for desire
for DS record publication. The basic tests include,
</t>

<figure align="center"><artwork align="center">
1. All the nameservers for the zone agree on zone contents 
2. The zone is signed 
3. The zone has a CDS signed by the KSK referenced i the CDS 
</artwork></figure>
<t>Parents can have additional tests, defined delays, and even ask the
DNS operator to prove they can add data to the zone, or provide a code
that is tied to the affected zone.
</t>
</section>
</section>

<section anchor="op3dnsrr-protocol" title="OP-3-DNS-RR Protocol">

<section anchor="command" title="Command">
<t>The basic call is
</t>

<figure align="center"><artwork align="center">
  https://&lt;SERVER-name&gt;/Update/&lt;domain&gt;/
</artwork></figure>
<t>The following options to the commands are specified
</t>
<t>&quot;auth=&quot;   an authentication token
</t>
<t>&quot;debug=&quot;  request a debug session
</t>
<t>The service above is defined on standard https port but it could run
on any port as specified by an URI.
</t>
</section>

<section anchor="answers" title="Answers">
<t>The basic answer is a jason blob the these are some possible blocks in
the response:
</t>
<t>&quot;refer:&quot;  will contain an URI; this is an referral to an URI that is better able to do execute the command
</t>
<t>&quot;refused:&quot;  This command can not be executed, and the reason is inside the block
</t>
<t>&quot;debug:&quot;  list of debug messages normally empty unless debug flag is
present, this section should be ignored in normal processing
</t>
<t>&quot;error:&quot;  if there was one look inside debug for more details
</t>
<t>&quot;domain:&quot; what domain this is an answer for this section MUST be included in all answers
</t>
<t>&quot;rr:&quot;  the new list of rrs &quot;can be empty&quot;
</t>
<t>&quot;id:&quot;  An identifier for the transaction
</t>
<t>If ``refer'' block is present in answer then the client is instructed to
connect to that URI and retry the command there. Client SHOULD
always honor the refer command over all other answers it gets in
the answer.
</t>
</section>
</section>

<section anchor="authorization" title="Authorization">
<t>The authorization can be either based on Token (like auth code) or buy
challenge i.e. inserting a blob into the zone.  It is up to registrars
to register the referral URI with registries, or block the access to
updating DS and NS.
</t>
<t>OAUTH??? how that would work  ???
</t>
</section>

<section anchor="security-considerations" title="Security considerations">
<t>TBD This will hopefully get more zones to become validated thus
overall the security gain out weights the possible drawbacks.
</t>
</section>

<section anchor="iana-actions" title="IANA Actions">
<t>URI ??? TBD
</t>
</section>

<section anchor="internationalization-considerations" title="Internationalization Considerations">
<t>This protcol is designed for machine to machine communications
</t>
</section>

</middle>
<back>
<references title="Normative References">
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4035.xml"?>
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7344.xml"?>
</references>
<references title="Informative References">
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"?>
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6690.xml"?>
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7480.xml"?>
</references>

<section anchor="document-history" title="Document History">
<t>First rough version
</t>
</section>

</back>
</rfc>
