<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-westerbaan-alldispatch-mpic-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="MPIC">Multi-Perspective Issuance Corroboration (MPIC) Service</title>
    <seriesInfo name="Internet-Draft" value="draft-westerbaan-alldispatch-mpic-00"/>
    <author fullname="Syed Suleman Ahmad">
      <organization>Cloudflare</organization>
      <address>
        <email>suleman@cloudflare.com</email>
      </address>
    </author>
    <author fullname="Bas Westerbaan">
      <organization>Cloudflare</organization>
      <address>
        <email>bas@cloudflare.com</email>
      </address>
    </author>
    <author fullname="Henry Birge-Lee">
      <organization>Princeton University</organization>
      <address>
        <email>birgelee@princeton.edu</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <area>Security</area>
    <workgroup>Security Dispatch</workgroup>
    <keyword>dcv</keyword>
    <keyword>mpic</keyword>
    <abstract>
      <?line 46?>

<t>This memo defines an API for Multi-Perspective Issuance Corroboration (MPIC) services to facilitate domain control validation (DCV) from multiple network perspectives. MPIC enhances the security of publicly-trusted certificate issuance by mitigating the risk of localized, equally-specific BGP hijacking attacks that can undermine traditional DCV methods permitted by the CA/Browser Forum Baseline Requirements for TLS Server Certificates. This API enables Certification Authorities (CAs) to more reliably integrate with external MPIC providers, promoting a more robust and resilient Web PKI ecosystem. The API design prioritizes flexibility, scalability, and interoperability, allowing for diverse implementations and deployment models. This standardization effort is driven by the need to consistently address vulnerabilities in the domain validation process highlighted by recent research and real-world attacks, as reflected in Ballot SC-067 V3 of the CA/Browser Forum's Server Certificate Working Group.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://open-mpic.github.io/draft-mpic/draft-westerbaan-alldispatch-mpic.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-westerbaan-alldispatch-mpic/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        All Dispatch Working Group mailing list (<eref target="mailto:alldispatch@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/alldispatch/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/alldispatch/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/open-mpic/draft-mpic"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="dcv">
        <name>DCV</name>
        <t>Before issuing a certificate to a subscriber,
certificate authorities are required to validate that the subscriber
indeed controls the domains on the certificate.
For this purpose certificate authorities use various methods
of domain control validation (DCV), including
but not limited to via HTTP, DNS, and ALPN.</t>
      </section>
      <section anchor="mpic">
        <name>MPIC</name>
        <t>Several, but not all, CAs use the specific DCV methods of ACME <xref target="RFC8555"/>.
Domain control validation is vulnerable to DNS and BGP hijacks.
These can be partially mitigated by performing DCV from multiple
network perspectives, which is dubbed "multiple perspective issuance corroboration" (MPIC).
corroboration (MPIC) for domain control validation.
Ballot SC-67 v3 of CA/B forum requires MPIC to be performed
by all certification authorities (CAs) in the future.</t>
      </section>
      <section anchor="mpic-service">
        <name>MPIC service</name>
        <t>Running MPIC requires maintaining a presence across the globe.
For smaller CAs it may make sense to run a shared MPIC service
or outsource it to a third party.
This memo specifies a standardised API for such a usecase.
Another usecase is for a CA to have a standby MPIC service
in case its primary fails.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" 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>
      <?line -18?>

</section>
    <section anchor="api-structure">
      <name>API Structure</name>
      <t>The MPIC API implements a system for domain validation and CAA record checking
using multiple perspectives across different regions.</t>
      <t>An MPIC service can accept JSON requests over an arbitrary communication channel with an MPIC client. The MPIC service then produces MPIC responses which are sent back to the MPIC client over the communication channel. The communication channel may be synchronous (i.e., stall open on each MPIC request until an MPIC response is generated) or asynchronous (i.e., send a message to the MPIC service, close, and then receive a future message from the MPIC service containing a corresponding MPIC response). The MPIC service protocol does not provide any form of matching between MPIC requests and MPIC responses. A communication channel is responsible for ensuring that a client can match requests with corresponding responses.
The communication channel <bcp14>MUST</bcp14> provide confidentiality and integrity as well as support for authentication of the MPIC service.</t>
      <t>This document describes communication with an MPIC service using HTTPS POST as the communication channel. Alternate communication channels include gRPC, Apache Kafka, RabbitMQ, etc...</t>
      <t>A MPIC service running over the HTTPS POST communication channel is identified by a HTTPS url.
As a running example, say <tt>https://mpc.example.com/staging</tt>.</t>
      <t>A client requests a MPIC validation from the service
by sending a POST request to the resource <tt>/mpic/draft-00</tt>
below the service URL.
In the running example <tt>https://mpc.example.com/staging/mpic/draft-00</tt>.</t>
      <t>[[ The final version of the API will use <tt>/mpic/v1</tt>. Incompatible
   versions of the draft will bump the <tt>-00</tt>. ]]</t>
      <t>The body of the HTTP POST is a JSON object that describs the MPIC request.
The service will respond with a JSON object containing MPIC results.</t>
      <t>There are three different MPIC validation methods, described below. The request
object has a <tt>method</tt> field that allows to distinguish between each.</t>
      <section anchor="caa-api">
        <name><tt>caa</tt> validation method</name>
        <t>A <tt>caa</tt> requests asks the MPIC service to retrieve the relevant CAA DNS
records for a given domain from multiple perspectives.</t>
        <t>This method has the following specific fields.</t>
        <ul spacing="normal">
          <li>
            <t><tt>domain</tt> (required, string): The domain to check the CAA records for.</t>
          </li>
        </ul>
        <t>An example request is given below.</t>
        <artwork><![CDATA[
POST /staging/mpic/draft-00
Host: mpc.example.com
Content-Type: application/json

{
 "method": "caa",
 "domain": "some.example.com"
}
]]></artwork>
        <t>If successful (described in TODO REF below), the response object contains a
<tt>success</tt> field set to <tt>true</tt>, and an <tt>caa</tt> field, which itself is an object
with two fields:</t>
        <ul spacing="normal">
          <li>
            <t><tt>domain</tt> The domain on which the CAA records were found. This could be
a parent domain of the requested <tt>domain</tt>.</t>
          </li>
          <li>
            <t><tt>records</tt> A list of base64 encoded CAA records.</t>
          </li>
        </ul>
        <t>An example of a response for a succesful validation.</t>
        <artwork><![CDATA[
{
 "success": true,
 "caa": {
  "domain": "example.com",
  "records": ["AAVpc3N1ZWxldHNlbmNyeXB0Lm9yZw=="]
 },
 "perspectives": {
  "jfk": {"success": true},
  "fra":  {"success": true},
  "lis": {"success": true}
 }
}
]]></artwork>
        <t>On failure, the response object will have the <tt>success</tt> field set to <tt>false</tt>,
and an <tt>error</tt> field describing the error.</t>
        <t>[[ TODO do we to define the possible errors, or at least assign
        some codes? ]]</t>
        <t>An example of a response for an unsuccesful validation.</t>
        <artwork><![CDATA[
{
 "success": false,
  "perspectives": {
  "jfk": {"success": true},
  "fra":  {"success": true},
  "lis": {"success": false}
 },
 "error": "LIS saw record 'xyz' on example.com which was not present from perspective LIS"
}
]]></artwork>
        <t>[[ TODO How much information to return on error to help debug, and how
   structured should it be? I'd say it's good to be helpful, but it's bad
   to be structured as it's less readable. ]]</t>
      </section>
      <section anchor="http-acme-method">
        <name><tt>http-acme</tt> method</name>
        <t><tt>http-acme</tt> requests the MPIC server to perform ACME http-01 challenge validation
<xref target="RFC8555"/> for the domain's HTTP server from each distributed perspectives.</t>
        <t>Performs a GET from multiple perspectives, and checks whether the body matches
expectation. Optionally, it allows performing an additional CAA record lookup
for the domain.</t>
        <t>The request JSON object has the following specific fields.</t>
        <ul spacing="normal">
          <li>
            <t><tt>domain_or_ip</tt> (required, string): The domain name or IP address being verified.</t>
          </li>
          <li>
            <t><tt>token</tt> (required, string): The token value defined in <xref target="RFC8555"/>  Section 8.3.</t>
          </li>
          <li>
            <t><tt>key_authorization</tt> (required, string): The Key Authorization defined in <xref target="RFC8555"/>  Section 8.1.</t>
          </li>
          <li>
            <t><tt>caa_check</tt> (optional, boolean): Performs CAA validation at the same time for the domain as described above. Defaults to true unless <tt>domain_or_ip</tt> is an IP address.</t>
          </li>
        </ul>
        <artwork><![CDATA[
POST /staging/mpic/draft-00
Host: mpc.example.com
Content-Type: application/json

{
 "method": "http-acme",
 "domain_or_ip": "some.example.com",
 "token": "base64_url_token",
 "key_authorization": "base64_url_token.base64url_Thumbprint_accountKey"
 "caa_check": false,
}
]]></artwork>
        <t>The MPIC server constructs a URL by populating the URL template
<xref target="RFC6570"/>, <tt>http://{domain_or_ip}/.well-known/acme-challenge/{token}</tt>, and verifies that the resulting URL is
well-formed, before making a HTTP GET request to the URL from each vantage
point. Each perspective <bcp14>SHOULD</bcp14> follow redirects when dereferencing the URL.
The MPIC server verifies that the <tt>key_authorization</tt> value provided by the client matches
with the body of the response received from each perspective.</t>
        <t>If the above verifications succeeds, then the validation is successful. If
the request fails, or the body does not pass these checks, then it has failed.</t>
        <t>Along side, the MPIC server queries for the CAA records for the
<tt>domain_or_ip</tt> if the <tt>caa_check</tt> request parameter is set to "true".</t>
        <t>If either HTTP or CAA validation (when requested) fail,
the response objects contains a top-level
<tt>success</tt> field set to <tt>false</tt>, and contains an <tt>error</tt> field
that describes the error.</t>
        <t>If both succeed, the response object contains a top-level <tt>success</tt> field set to <tt>true</tt>.</t>
        <t>The response also contains an object (located under the key <tt>perspectives</tt>) with keys that uniquiely identify the perspectives used in the reqest.
Each perspective is associated with an object that contains <tt>success</tt> key pointing to a boolean value of <tt>true</tt> or <tt>false</tt> to indicate whether validation was successful at that perspective or not.</t>
        <t>If a CAA check was requested, the response object will contain a top
level <tt>caa</tt> field as described in <xref target="caa-api"/>.</t>
        <t>An example of a response for a succesful validation with <tt>caa-check</tt> set to
false.</t>
        <artwork><![CDATA[
{
 "success": true,
 "perspectives": {
  "jfk": {"success": true},
  "fra":  {"success": true},
  "lis": {"success": true}
 }
}
]]></artwork>
        <t>An example of a response for a succesful validation with <tt>caa-check</tt> set to
true.</t>
        <artwork><![CDATA[
{
 "success": true,
 "perspectives": {
  "jfk": {"success": true},
  "fra":  {"success": true},
  "lis": {"success": true}
 }
 "caa": {
   "domain": "example.com",
   "records": ["AAVpc3N1ZWxldHNlbmNyeXB0Lm9yZw=="]
 }
}
]]></artwork>
        <t>An example of a response where the validation failed with caa_check set
to true, and the <tt>caa</tt> method being successful.</t>
        <artwork><![CDATA[
{
 "success": false,
 "perspectives": {
  "jfk": {"success": true},
  "fra":  {"success": true},
  "lis": {"success": false}
 }
 "error": "HTTP found unexpected value at LIS perspective",
}
]]></artwork>
        <t>Similarly example of a response where caa_check set to true, and both
methods fail.</t>
        <t>{
 "success": false,
 "perspectives": {
  "jfk": {"success": false},
  "fra":  {"success": true},
  "lis": {"success": false}
 }
 "caa": {
   "domain": "example.com",
   "records": ["AAVpc3N1ZWxldHNlbmNyeXB0Lm9yZw=="]
 }
 "error": "HTTP found unexpected value at LIS perspective. CAA check failed at the JFK perspective.",
}</t>
      </section>
      <section anchor="dns-method">
        <name><tt>dns</tt> method</name>
        <t>Required request fields</t>
        <ul spacing="normal">
          <li>
            <t><tt>domain</tt></t>
          </li>
          <li>
            <t><tt>record-type</tt></t>
          </li>
          <li>
            <t><tt>prefix</tt></t>
          </li>
          <li>
            <t><tt>expected</tt></t>
          </li>
        </ul>
        <t>Optional</t>
        <ul spacing="normal">
          <li>
            <t><tt>caa</tt> Defaults to true.</t>
          </li>
        </ul>
        <t>Response is same as with <tt>http</tt>.</t>
      </section>
    </section>
    <section anchor="operation">
      <name>Operation</name>
      <t>TODO describe operation of each.</t>
    </section>
    <section anchor="authentication">
      <name>Authentication</name>
      <t>Describe usage of <tt>Authorization</tt> header.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO Security</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8555">
          <front>
            <title>Automatic Certificate Management Environment (ACME)</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
            <author fullname="D. McCarney" initials="D." surname="McCarney"/>
            <author fullname="J. Kasten" initials="J." surname="Kasten"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names. Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate. As of this writing, this verification is done through a collection of ad hoc mechanisms. This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance. The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8555"/>
          <seriesInfo name="DOI" value="10.17487/RFC8555"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
      </references>
    </references>
    <?line 354?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
rdMvRmxvozt/uOpWQnL/Bw3kAU4lLgAA

-->

</rfc>
