<?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-secdispatch-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-secdispatch-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-secdispatch-mpic.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-westerbaan-secdispatch-mpic/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Security Dispatch Working Group mailing list (<eref target="mailto:secdispatch@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/secdispatch/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/secdispatch/"/>.
      </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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
uvWHq3YlJPd/yddnLCouAAA=

-->

</rfc>
