<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.9 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-acme-acme-18" category="std">

  <front>
    <title abbrev="ACME">Automatic Certificate Management Environment (ACME)</title>

    <author initials="R." surname="Barnes" fullname="Richard Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="J." surname="Hoffman-Andrews" fullname="Jacob Hoffman-Andrews">
      <organization>EFF</organization>
      <address>
        <email>jsha@eff.org</email>
      </address>
    </author>
    <author initials="D." surname="McCarney" fullname="Daniel McCarney">
      <organization>Let's Encrypt</organization>
      <address>
        <email>cpu@letsencrypt.org</email>
      </address>
    </author>
    <author initials="J." surname="Kasten" fullname="James Kasten">
      <organization>University of Michigan</organization>
      <address>
        <email>jdkasten@umich.edu</email>
      </address>
    </author>

    <date year="2018" month="December" day="20"/>

    
    <workgroup>ACME Working Group</workgroup>
    

    <abstract>


<t>Public Key Infrastructure 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.
Today, 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>

<t>RFC EDITOR: PLEASE REMOVE THE FOLLOWING PARAGRAPH: The source for this draft is
maintained in GitHub. Suggested changes should be submitted as pull requests at
<eref target="https://github.com/ietf-wg-acme/acme">https://github.com/ietf-wg-acme/acme</eref>. Instructions are on that page as well.
Editorial changes can be managed in GitHub, but any substantive change should be
discussed on the ACME mailing list (acme@ietf.org).</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>Certificates <xref target="RFC5280"/> in the Web PKI are most commonly used to authenticate
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.</t>

<t>Different types of certificates reflect different kinds of CA verification of
information about the certificate subject.  “Domain Validation” (DV)
certificates are by far the most common type.  The only validation
the CA is required to perform in the DV issuance process is to
verify that the requester has effective control of the domain <xref target="CABFBR"></xref>.  The CA is not
required to attempt to verify the requester’s
real-world identity.  (This is as opposed to “Organization Validation” (OV) and
“Extended Validation” (EV) certificates, where the process is intended to also
verify the real-world identity of the requester.)</t>

<t>Existing Web PKI certificate authorities tend to use a set of ad hoc
protocols for certificate issuance and identity verification.  In the case of DV
certificates, a typical user experience is something like:</t>

<t><list style="symbols">
  <t>Generate a PKCS#10 <xref target="RFC2986"/> Certificate Signing Request (CSR).</t>
  <t>Cut-and-paste the CSR into a CA’s web page.</t>
  <t>Prove ownership of the domain by one of the following methods:
  <list style="symbols">
      <t>Put a CA-provided challenge at a specific place on the web server.</t>
      <t>Put a CA-provided challenge in a DNS record corresponding to the target
domain.</t>
      <t>Receive a CA-provided challenge at a (hopefully) administrator-controlled email
address corresponding to the domain and then respond to it on the CA’s web
page.</t>
    </list></t>
  <t>Download the issued certificate and install it on their Web Server.</t>
</list></t>

<t>With the exception of the CSR itself and the certificates that are issued, these
are all completely ad hoc procedures and are accomplished by getting the human
user to follow interactive natural-language instructions from the CA rather than
by machine-implemented published protocols.  In many cases, the instructions are
difficult to follow and cause significant frustration and confusion.  Informal usability tests
by the authors indicate that webmasters often need 1-3 hours to obtain and
install a certificate for a domain.  Even in the best case, the lack of
published, standardized mechanisms presents an obstacle to the wide deployment
of HTTPS and other PKIX-dependent systems because it inhibits mechanization of
tasks related to certificate issuance, deployment, and revocation.</t>

<t>This document describes an extensible framework for automating the issuance and
domain validation procedure, thereby allowing servers and infrastructure
software to obtain certificates without user interaction.  Use of this protocol
should radically simplify the deployment of HTTPS and the practicality of PKIX-based
authentication for other protocols based on Transport Layer Security (TLS)
<xref target="RFC5246"/>.</t>

<t>It should be noted that while the focus of this document is on validating
domain names for purposes of issuing certificates in the Web PKI, ACME supports
extensions for uses with other identifiers in other PKI contexts.  For example,
as of this writing, there is ongoing work to use ACME for issuance of Web PKI
certificates attesting to IP addresses <xref target="I-D.ietf-acme-ip"/> and STIR
certificates attesting to telephone numbers <xref target="I-D.ietf-acme-telephone"/>.</t>

<t>ACME can also be used to automate some aspects of certificate management even
where non-automated processes are still needed.  For example, the external
account binding feature (see <xref target="external-account-binding"/>) can allow an ACME
account to use authorizations that have been granted to an external, non-ACME
account.  This allows ACME to address issuance scenarios that cannot yet be
fully automated, such as the issuance of Extended Validation certificates.</t>

</section>
<section anchor="deployment-model-and-operator-experience" title="Deployment Model and Operator Experience">

<t>The guiding use case for ACME is obtaining certificates for websites
(HTTPS <xref target="RFC2818"/>).  In this case, a web server is intended to speak
for one or more domains, and the process of certificate issuance is intended to
verify that this web server actually speaks for the domain(s).</t>

<t>DV certificate validation commonly checks claims about properties related to
control of a domain name – properties that can be observed by the certificate
issuer in an interactive process that can be conducted purely online.  That
means that under typical circumstances, all steps in the request, verification,
and issuance process can be represented and performed by Internet protocols with
no out-of-band human intervention.</t>

<t>Prior to ACME, when deploying an HTTPS server, a server operator typically gets a
prompt to generate a self-signed certificate.  If the operator were instead
deploying an HTTPS server using ACME, the experience would be something like this:</t>

<t><list style="symbols">
  <t>The operator’s ACME client prompts the operator for the intended domain name(s) that the
web server is to stand for.</t>
  <t>The ACME client presents the operator with a list of CAs from which it could
get a certificate.  (This list will change over time based on the capabilities
of CAs and updates to ACME configuration.) The ACME client might prompt the
operator for payment information at this point.</t>
  <t>The operator selects a CA.</t>
  <t>In the background, the ACME client contacts the CA and requests that it
issue a certificate for the intended domain name(s).</t>
  <t>The CA verifies that the client controls the requested domain name(s) by
having the ACME client perform some action(s) that can only be done
with control of the domain name(s).
For example, the CA might require a client requesting example.com
to provision DNS record under example.com or an HTTP resource
under http://example.com.</t>
  <t>Once the CA is satisfied, it issues the certificate and the ACME client
automatically downloads and installs it, potentially notifying the operator
via email, SMS, etc.</t>
  <t>The ACME client periodically contacts the CA to get updated certificates,
stapled OCSP responses, or whatever else would be required to keep the web
server functional and its credentials up-to-date.</t>
</list></t>

<t>In this way, it would be nearly as easy to deploy with a CA-issued certificate
as with a self-signed certificate. Furthermore, the maintenance of that
CA-issued certificate would require minimal manual intervention.  Such close
integration of ACME with HTTPS servers allows the immediate and automated
deployment of certificates as they are issued, sparing the human administrator
from much of the time-consuming work described in the previous section.</t>

</section>
<section anchor="terminology" title="Terminology">

<t>The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”,
“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and
“OPTIONAL” in this document are to be interpreted as described in BCP
14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all
capitals, as shown here.</t>

<t>The two main roles in ACME are “client” and “server”.  The ACME client uses the
protocol to request certificate management actions, such as issuance or
revocation.  An ACME client may run on a web server, mail server, or some other
server system which requires valid X.509 certificates.  Or, it may run on a separate
server that does not consume the certificate, but is authorized to respond to a
CA-provided challenge.  The ACME server runs at a certification authority,
and responds to client requests, performing the requested actions if the client is
authorized.</t>

<t>An ACME client authenticates to the server by means of an “account key pair”.  The client uses the
private key of this key pair to sign all messages sent to the server.  The
server uses the public key to verify the authenticity and integrity of messages
from the client.</t>

</section>
<section anchor="protocol-overview" title="Protocol Overview">

<t>ACME allows a client to request certificate management actions using a set of
JavaScript Object Notation (JSON) messages carried over HTTPS <xref target="RFC7159"/> <xref target="RFC2818"/>.
Issuance using ACME resembles a traditional CA’s issuance process, in which a user creates an account,
requests a certificate, and proves control of the domain(s) in that certificate in
order for the CA to issue the requested certificate.</t>

<t>The first phase of ACME is for the client to request an account with the
ACME server.  The client generates an asymmetric key pair and requests a
new account, optionally providing contact information, agreeing to terms
of service, and/or associating the account with an existing account
in another system. The creation request is signed with the generated
private key to prove that the client controls it.</t>

<figure title="Account Creation"><artwork><![CDATA[
      Client                                                   Server

      [Contact Information]
      [ToS Agreement]
      [Additional Data]
      Signature                     ------->
                                                          Account URL
                                    <-------           Account Object


                [] Information covered by request signatures
]]></artwork></figure>

<t>Once an account is registered, there are four major steps the client needs to take to
get a certificate:</t>

<t><list style="numbers">
  <t>Submit an order for a certificate to be issued</t>
  <t>Prove control of any identifiers requested in the certificate</t>
  <t>Finalize the order by submitting a CSR</t>
  <t>Await issuance and download the issued certificate</t>
</list></t>

<t>The client’s order for a certificate describes the desired identifiers
plus a few additional fields that
capture semantics that are not supported in the CSR format.  If the server is
willing to consider issuing such a certificate, it responds with a list of
requirements that the client must satisfy before the certificate will be issued.</t>

<t>For example, in most cases, the server will require the client to demonstrate
that it controls the identifiers in the requested certificate.  Because there
are many different ways to validate possession of different types of
identifiers, the server will choose from an extensible set of challenges that
are appropriate for the identifier being claimed.  The client responds with a
set of responses that tell the server which challenges the client has completed.
The server then validates that the client has completed the challenges.</t>

<t>Once the validation process is complete and the server is satisfied that the
client has met its requirements, the client finalizes the order by submitting
a PKCS#10 Certificate Signing Request (CSR). The server will issue the requested
certificate and make it available to the client.</t>

<figure title="Certificate Issuance"><artwork><![CDATA[
      Client                                                   Server

      [Order]
      Signature                     ------->
                                    <-------  Required Authorizations

      [Responses]
      Signature                     ------->

                          <~~~~~~~~Validation~~~~~~~~>

      [CSR]
      Signature                     ------->
                                    <-------          Acknowledgement

                          <~~~~~~Await issuance~~~~~~>

      POST-as-GET request           ------->
                                    <-------              Certificate

                [] Information covered by request signatures
]]></artwork></figure>

<t>To revoke a certificate, the client sends a signed revocation request indicating
the certificate to be revoked:</t>

<figure title="Certificate Revocation"><artwork><![CDATA[
      Client                                                 Server

      [Revocation request]
      Signature                    -------->

                                   <--------                 Result

                [] Information covered by request signatures
]]></artwork></figure>

<t>Note that while ACME is defined with enough flexibility to handle different
types of identifiers in principle, the primary use case addressed by this
document is the case where domain names are used as identifiers.  For example,
all of the identifier validation challenges described in
<xref target="identifier-validation-challenges"/> below address validation of domain names.
The use of ACME for other identifiers will require further specification in order
to describe how these identifiers are encoded in the protocol and what types of
validation challenges the server might require.</t>

</section>
<section anchor="character-encoding" title="Character Encoding">

<t>All requests and responses sent via HTTP by ACME clients, ACME servers, and
validation servers as well as any inputs for digest computations MUST be encoded
using the UTF-8 <xref target="RFC3629"/> character set. Note that identifiers that appear in
certificates may have their own encoding considerations (e.g., DNS names containing
non-ASCII characters are expressed as A-labels rather than U-labels). Any such
encoding considerations are to be applied prior to the aforementioned UTF-8
encoding.</t>

</section>
<section anchor="message-transport" title="Message Transport">

<t>Communications between an ACME client and an ACME server are done over HTTPS,
using JSON Web Signature (JWS) <xref target="RFC7515"/> to provide some additional security
properties for messages sent from
the client to the server.  HTTPS provides server authentication and
confidentiality.  With some ACME-specific extensions, JWS provides
authentication of the client’s request payloads, anti-replay protection, and
integrity for the HTTPS request URL.</t>

<section anchor="https-requests" title="HTTPS Requests">

<t>Each ACME function is accomplished by the client sending a sequence of HTTPS
requests to the server, carrying JSON messages <xref target="RFC2818"/><xref target="RFC7159"/>.  Use of
HTTPS is REQUIRED. Each subsection of
<xref target="certificate-management"/> below describes the message formats used by the
function and the order in which messages are sent.</t>

<t>In most HTTPS transactions used by ACME, the ACME client is the HTTPS client
and the ACME server is the HTTPS server. The ACME server acts as a
client when validating challenges: an HTTP client when
validating an ‘http-01’ challenge, a DNS client with ‘dns-01’, etc.</t>

<t>ACME servers SHOULD follow the recommendations of <xref target="RFC7525"/> when configuring
their TLS implementations.  ACME servers that support TLS 1.3 MAY allow clients
to send early data (0-RTT).  This is safe because the ACME protocol itself
includes anti-replay protections (see <xref target="replay-protection"/>) in all cases where
they are required.  For this reason, there are no restrictions on what ACME
data can be carried in 0-RTT.</t>

<t>ACME clients MUST send a User-Agent header field, in accordance with
<xref target="RFC7231"/>. This header field SHOULD include the name and version of the
ACME software in addition to the name and version of the underlying
HTTP client software.</t>

<t>ACME clients SHOULD send an Accept-Language header field in accordance with
<xref target="RFC7231"/> to enable localization of error messages.</t>

<t>ACME servers that are intended to be generally accessible need to use
Cross-Origin Resource Sharing (CORS) in order to be accessible from
browser-based clients <xref target="W3C.REC-cors-20140116"/>.  Such servers SHOULD set the
Access-Control-Allow-Origin header field to the value “*”.</t>

<t>Binary fields in the JSON objects used by ACME are encoded using base64url
encoding described in <xref target="RFC4648"/> Section 5, according to the profile specified
in JSON Web Signature <xref target="RFC7515"/> Section 2. This encoding uses a URL safe
character set. Trailing ‘=’ characters MUST be stripped. Encoded
values that include trailing ‘=’ characters MUST be rejected as
improperly encoded.</t>

</section>
<section anchor="request-authentication" title="Request Authentication">

<t>All ACME requests with a non-empty body MUST encapsulate their payload
in a JSON Web Signature (JWS) <xref target="RFC7515"/> object, signed using the account’s
private key unless otherwise specified.  The server MUST verify the JWS before
processing the request. Encapsulating request bodies in JWS provides
authentication of requests.</t>

<t>JWS objects sent in ACME requests MUST meet the following additional criteria:</t>

<t><list style="symbols">
  <t>The JWS MUST be in the  Flattened JSON Serialization <xref target="RFC7515"/></t>
  <t>The JWS MUST NOT have multiple signatures</t>
  <t>The JWS Unencoded Payload Option <xref target="RFC7797"/> MUST NOT be used</t>
  <t>The JWS Unprotected Header <xref target="RFC7515"/> MUST NOT be used</t>
  <t>The JWS Payload MUST NOT be detached</t>
  <t>The JWS Protected Header MUST include the following fields:
  <list style="symbols">
      <t>“alg” (Algorithm)
      <list style="symbols">
          <t>This field MUST NOT contain “none” or a Message Authentication Code (MAC)-based algorithm (e.g. one in which the algorithm registry description mentions MAC/HMAC).</t>
        </list></t>
      <t>“nonce” (defined in <xref target="replay-protection"/> below)</t>
      <t>“url” (defined in <xref target="request-url-integrity"/> below)</t>
      <t>Either “jwk” (JSON Web Key) or “kid” (Key ID) as specified below</t>
    </list></t>
</list></t>

<t>An ACME server MUST implement the “ES256” signature algorithm <xref target="RFC7518"/> and SHOULD implement the “EdDSA” signature algorithm using the “Ed25519” variant (indicated by “crv”) <xref target="RFC8037"/>.</t>

<t>The “jwk” and “kid” fields are mutually exclusive. Servers MUST reject requests
that contain both.</t>

<t>For newAccount requests, and for revokeCert requests authenticated by a certificate
key, there MUST be a “jwk” field. This field MUST contain the public key
corresponding to the private key used to sign the JWS.</t>

<t>For all other requests, the request is signed using an existing account and
there MUST be a “kid” field. This field MUST contain the account URL received by
POSTing to the newAccount resource.</t>

<t>If the client sends a JWS signed with an algorithm that the server does not
support, then the server MUST return an error with status code 400 (Bad Request)
and type “urn:ietf:params:acme:error:badSignatureAlgorithm”.  The problem
document returned with the error MUST include an “algorithms” field with an
array of supported “alg” values.  See <xref target="errors"/> for more details on
the structure of error responses.</t>

<t>Because client requests in ACME carry JWS objects in the Flattened
JSON Serialization, they must have the “Content-Type” header field
set to “application/jose+json”.  If a request does not meet this
requirement, then the server MUST return a response with status code
415 (Unsupported Media Type).</t>

</section>
<section anchor="post-as-get" title="GET and POST-as-GET Requests">

<t>Note that authentication via signed JWS request bodies implies that
requests without an entity body are not authenticated, in particular
GET requests.  Except for the cases described in this section, if
the server receives a GET request, it MUST return an error with
status code 405 “Method Not Allowed” and type “malformed”.</t>

<t>If a client wishes to fetch a resource from the server (which would
otherwise be done with a GET), then it MUST send a POST request with
a JWS body as described above, where the payload of the JWS is a
zero-length octet string.  In other words, the “payload” field of the
JWS object MUST be present and set to the empty string (“”).</t>

<t>We will refer to these as “POST-as-GET” requests. On receiving a
request with a zero-length (and thus non-JSON) payload, the server
MUST authenticate the sender and verify any access control rules.
Otherwise, the server MUST treat this request as having the same
semantics as a GET request for the same resource.</t>

<t>The server MUST allow GET requests for the directory and newNonce
resources (see <xref target="resources"/>), in addition to POST-as-GET requests
for these resources.  This enables clients to bootstrap into the
ACME authentication system.</t>

</section>
<section anchor="request-url-integrity" title="Request URL Integrity">

<t>It is common in deployment for the entity terminating TLS for HTTPS to be different
from the entity operating the logical HTTPS server, with a “request routing”
layer in the middle.  For example, an ACME CA might have a content delivery
network terminate TLS connections from clients so that it can inspect client
requests for denial-of-service protection.</t>

<t>These intermediaries can also change values in the request that are not signed
in the HTTPS request, e.g., the request URL and header fields.  ACME uses JWS to
provide an integrity mechanism, which protects against an intermediary
changing the request URL to another ACME URL.</t>

<t>As noted in <xref target="request-authentication"/> above, all ACME request objects carry a
“url” header parameter in their protected header.  This header parameter encodes
the URL to which the client is directing the request.  On receiving such an
object in an HTTP request, the server MUST compare the “url” header parameter to
the request URL.  If the two do not match, then the server MUST reject the
request as unauthorized.</t>

<t>Except for the directory resource, all ACME resources are addressed with URLs
provided to the client by the server.  In requests sent to these resources, the client MUST set
the “url” header parameter to the exact string provided by the server (rather
than performing any re-encoding on the URL).  The server SHOULD perform the
corresponding string equality check, configuring each resource with the URL
string provided to clients and having the resource check that requests have the
same string in their “url” header parameter. The server MUST reject the request
as unauthorized if the string equality check fails.</t>

<section anchor="url-url-jws-header-parameter" title="“url” (URL) JWS Header Parameter">

<t>The “url” header parameter specifies the URL <xref target="RFC3986"/> to which this JWS
object is directed.  The “url” header parameter MUST be carried in the protected
header of the JWS.  The value of the “url” header parameter MUST be a string
representing the target URL.</t>

</section>
</section>
<section anchor="replay-protection" title="Replay protection">

<t>In order to protect ACME resources from any possible replay attacks, ACME
POST requests have a mandatory anti-replay mechanism.  This mechanism is based on the
server maintaining a list of nonces that it has issued, and requiring
any signed request from the client to carry such a nonce.</t>

<t>An ACME server provides nonces to clients using the HTTP Replay-Nonce header field,
as specified in <xref target="replay-nonce"/> below.  The server MUST include a Replay-Nonce
header field in every successful response to a POST request and SHOULD provide
it in error responses as well.</t>

<t>Every JWS sent by an ACME client MUST include, in its protected header, the
“nonce” header parameter, with contents as defined in
<xref target="nonce-nonce-jws-header-parameter"/> below.  As part of JWS verification, the
ACME server MUST verify that the value of the “nonce” header is a value that the
server previously provided in a Replay-Nonce header field.  Once a nonce value
has appeared in an ACME request, the server MUST consider it invalid, in the same
way as a value it had never issued.</t>

<t>When a server rejects a request because its nonce value was unacceptable (or not
present), it MUST provide HTTP status code 400 (Bad Request), and indicate the
ACME error type “urn:ietf:params:acme:error:badNonce”.  An error response with
the “badNonce” error type MUST include a Replay-Nonce header with a
fresh nonce that the server will accept in a retry of the original
query (and possibly in other requests, according to the server’s
nonce scoping policy).
On receiving such a response, a client SHOULD retry the request using the new
nonce.</t>

<t>The precise method used to generate and track nonces is up to the server.  For
example, the server could generate a random 128-bit value for each response,
keep a list of issued nonces, and strike nonces from this list as they are used.</t>

<t>Other than the constraint above with regard to nonces issued in
“badNonce” responses, ACME does not constrain how servers
scope nonces. Clients MAY assume that nonces have broad scope,
e.g., by having a single pool of nonces used for all requests.
However, when retrying in response to a “badNonce” error, the client
MUST use the nonce provided in the error response. Servers should
scope nonces broadly enough that retries are not needed very often.</t>

<section anchor="replay-nonce" title="Replay-Nonce">

<t>The “Replay-Nonce” header field includes a server-generated value that the
server can use to detect unauthorized replay in future client requests.  The
server MUST generate the value provided in Replay-Nonce in such a way that
they are unique to each message, with high probability, and unpredictable to anyone besides the server. For instance, it is
acceptable to generate Replay-Nonces randomly.</t>

<t>The value of the Replay-Nonce field MUST be an octet string encoded according to
the base64url encoding described in Section 2 of <xref target="RFC7515"/>.  Clients MUST
ignore invalid Replay-Nonce values.  The ABNF <xref target="RFC5234"/> for the Replay-Nonce
header field follows:</t>

<figure><artwork><![CDATA[
  base64url = ALPHA / DIGIT / "-" / "_"

  Replay-Nonce = 1*base64url
]]></artwork></figure>

<t>The Replay-Nonce header field SHOULD NOT be included in HTTP request messages.</t>

</section>
<section anchor="nonce-nonce-jws-header-parameter" title="“nonce” (Nonce) JWS Header Parameter">

<t>The “nonce” header parameter provides a unique value that enables the verifier
of a JWS to recognize when replay has occurred. The “nonce” header parameter
MUST be carried in the protected header of the JWS.</t>

<t>The value of the “nonce” header parameter MUST be an octet string, encoded
according to the base64url encoding described in Section 2 of <xref target="RFC7515"/>.  If
the value of a “nonce” header parameter is not valid according to this encoding,
then the verifier MUST reject the JWS as malformed.</t>

</section>
</section>
<section anchor="rate-limits" title="Rate Limits">

<t>Creation of resources can be rate limited by ACME servers to ensure fair usage and
prevent abuse.  Once the rate limit is exceeded, the server MUST respond
with an error with the type “urn:ietf:params:acme:error:rateLimited”.
Additionally, the server SHOULD send a “Retry-After” header <xref target="RFC7231"/> indicating
when the current request may succeed again.  If multiple rate limits are
in place, that is the time where all rate limits allow access again for
the current request with exactly the same parameters.</t>

<t>In addition to the human-readable “detail” field of the error response, the
server MAY send one or multiple link relations in the “Link” header <xref target="RFC8288"/> pointing to
documentation about the specific rate limit that was hit, using the “help” link relation type.</t>

</section>
<section anchor="errors" title="Errors">

<t>Errors can be reported in ACME both at the HTTP layer and within challenge
objects as defined in <xref target="identifier-validation-challenges"/>. ACME servers can
return responses with an HTTP error response code (4XX or 5XX). For example:
If the client submits a request using a method not allowed in this document,
then the server MAY return status code 405 (Method Not Allowed).</t>

<t>When the server responds with an error status, it SHOULD provide additional
information using a problem document <xref target="RFC7807"/>.  To facilitate automatic
response to errors, this document defines the following standard tokens for use
in the “type” field (within the ACME URN namespace “urn:ietf:params:acme:error:”):</t>

<texttable>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>accountDoesNotExist</c>
      <c>The request specified an account that does not exist</c>
      <c>alreadyRevoked</c>
      <c>The request specified a certificate to be revoked that has already been revoked</c>
      <c>badCSR</c>
      <c>The CSR is unacceptable (e.g., due to a short key)</c>
      <c>badNonce</c>
      <c>The client sent an unacceptable anti-replay nonce</c>
      <c>badRevocationReason</c>
      <c>The revocation reason provided is not allowed by the server</c>
      <c>badSignatureAlgorithm</c>
      <c>The JWS was signed with an algorithm the server does not support</c>
      <c>caa</c>
      <c>Certification Authority Authorization (CAA) records forbid the CA from issuing</c>
      <c>compound</c>
      <c>Specific error conditions are indicated in the “subproblems” array.</c>
      <c>connection</c>
      <c>The server could not connect to validation target</c>
      <c>dns</c>
      <c>There was a problem with a DNS query during identifier validation</c>
      <c>externalAccountRequired</c>
      <c>The request must include a value for the “externalAccountBinding” field</c>
      <c>incorrectResponse</c>
      <c>Response received didn’t match the challenge’s requirements</c>
      <c>invalidContact</c>
      <c>A contact URL for an account was invalid</c>
      <c>malformed</c>
      <c>The request message was malformed</c>
      <c>rateLimited</c>
      <c>The request exceeds a rate limit</c>
      <c>rejectedIdentifier</c>
      <c>The server will not issue for the identifier</c>
      <c>serverInternal</c>
      <c>The server experienced an internal error</c>
      <c>tls</c>
      <c>The server received a TLS error during validation</c>
      <c>unauthorized</c>
      <c>The client lacks sufficient authorization</c>
      <c>unsupportedContact</c>
      <c>A contact URL for an account used an unsupported protocol scheme</c>
      <c>unsupportedIdentifier</c>
      <c>An identifier is of an unsupported type</c>
      <c>userActionRequired</c>
      <c>Visit the “instance” URL and take actions specified there</c>
</texttable>

<t>This list is not exhaustive. The server MAY return errors whose “type” field is
set to a URI other than those defined above.  Servers MUST NOT use the ACME URN
namespace for errors not listed in the appropriate IANA registry (see <xref target="acme-urn-space"/>).  Clients SHOULD display the
“detail” field of all errors.</t>

<t>In the remainder of this document, we use the tokens in the table above to refer
to error types, rather than the full URNs.  For example, an “error of type
‘badCSR’” refers to an error document with “type” value
“urn:ietf:params:acme:error:badCSR”.</t>

<section anchor="subproblems" title="Subproblems">

<t>Sometimes a CA may need to return multiple errors in response to a request.
Additionally, the CA may need to attribute errors to specific
identifiers.  For instance, a new-order request may contain multiple
identifiers for which the CA cannot issue. In this situation, an ACME
problem document MAY contain the “subproblems” field, containing a JSON
array of problem documents, each of which MAY contain an “identifier”
field. If present, the “identifier” field MUST contain an ACME identifier
(<xref target="iana-identifier"/>). The “identifier” field MUST NOT be present at
the top level in ACME problem documents. It can only be present in subproblems.
Subproblems need not all have the same type, and do not need to match the top level type.</t>

<t>ACME clients may choose to use the “identifier” field of a subproblem
as a hint that an operation would succeed if that identifier were omitted. For
instance, if an order contains ten DNS identifiers, and the new-order
request returns a problem document with two subproblems, referencing two
of those identifiers, the ACME client may choose to submit another order
containing only the eight identifiers not listed in the problem document.</t>

<figure><artwork><![CDATA[
HTTP/1.1 403 Forbidden
Content-Type: application/problem+json

{
    "type": "urn:ietf:params:acme:error:malformed",
    "detail": "Some of the identifiers requested were rejected",
    "subproblems": [
        {
            "type": "urn:ietf:params:acme:error:malformed",
            "detail": "Invalid underscore in DNS name \"_example.com\"",
            "identifier": {
                "type": "dns",
                "value": "_example.com"
            }
        },
        {
            "type": "urn:ietf:params:acme:error:rejectedIdentifier",
            "detail": "This CA will not issue for \"example.net\"",
            "identifier": {
                "type": "dns",
                "value": "example.net"
            }
        }
    ]
}
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="certificate-management" title="Certificate Management">

<t>In this section, we describe the certificate management functions that ACME
enables:</t>

<t><list style="symbols">
  <t>Account Creation</t>
  <t>Ordering a Certificate</t>
  <t>Identifier Authorization</t>
  <t>Certificate Issuance</t>
  <t>Certificate Revocation</t>
</list></t>

<section anchor="resources" title="Resources">

<t>ACME is structured as a REST <xref target="REST"/> application with the following types of resources:</t>

<t><list style="symbols">
  <t>Account resources, representing information about an account
(<xref target="account-objects"/>, <xref target="account-management"/>)</t>
  <t>Order resources, representing an account’s requests to issue certificates
(<xref target="order-objects"/>)</t>
  <t>Authorization resources, representing an account’s authorization to act for an
identifier (<xref target="authorization-objects"/>)</t>
  <t>Challenge resources, representing a challenge to prove control of an
identifier (<xref target="identifier-authorization"/>, <xref target="identifier-validation-challenges"/>)</t>
  <t>Certificate resources, representing issued certificates
(<xref target="downloading-the-certificate"/>)</t>
  <t>A “directory” resource (<xref target="directory"/>)</t>
  <t>A “newNonce” resource (<xref target="getting-a-nonce"/>)</t>
  <t>A “newAccount” resource (<xref target="account-management"/>)</t>
  <t>A “newOrder” resource (<xref target="applying-for-certificate-issuance"/>)</t>
  <t>A “revokeCert” resource (<xref target="certificate-revocation"/>)</t>
  <t>A “keyChange” resource (<xref target="account-key-roll-over"/>)</t>
</list></t>

<t>The server MUST provide “directory” and “newNonce” resources.</t>

<t>ACME uses different URLs for different management functions. Each function is
listed in a directory along with its corresponding URL, so clients only need to
be configured with the directory URL.  These URLs are connected by a few
different link relations <xref target="RFC5988"/>.</t>

<t>The “up” link relation is used with challenge resources to indicate the
authorization resource to which a challenge belongs.  It is also used, with some
media types, from certificate resources to indicate a resource from which the
client may fetch a chain of CA certificates that could be used to validate the
certificate in the original resource.</t>

<t>The “index” link relation is present on all resources other than the
directory and indicates the URL of the directory.</t>

<t>The following diagram illustrates the relations between resources on an ACME
server.  For the most part, these relations are expressed by URLs provided as
strings in the resources’ JSON representations.  Lines with labels in quotes
indicate HTTP link relations.</t>

<figure title="ACME Resources and Relationships"><artwork><![CDATA[
                               directory
                                   |
                                   +--> newNonce
                                   |
       +----------+----------+-----+-----+------------+
       |          |          |           |            |
       |          |          |           |            |
       V          V          V           V            V
  newAccount   newAuthz   newOrder   revokeCert   keyChange
       |          |          |
       |          |          |
       V          |          V
    account       |        order --+--> finalize
                  |          |     |
                  |          |     +--> cert
                  |          V
                  +---> authorization
                            | ^
                            | | "up"
                            V |
                          challenge
]]></artwork></figure>

<t>The following table illustrates a typical sequence of requests required to
establish a new account with the server, prove control of an identifier, issue a
certificate, and fetch an updated certificate some time after issuance.  The
“-&gt;” is a mnemonic for a Location header pointing to a created resource.</t>

<texttable>
      <ttcol align='left'>Action</ttcol>
      <ttcol align='left'>Request</ttcol>
      <ttcol align='left'>Response</ttcol>
      <c>Get directory</c>
      <c>GET  directory</c>
      <c>200</c>
      <c>Get nonce</c>
      <c>HEAD newNonce</c>
      <c>200</c>
      <c>Create account</c>
      <c>POST newAccount</c>
      <c>201 -&gt; account</c>
      <c>Submit order</c>
      <c>POST newOrder</c>
      <c>201 -&gt; order</c>
      <c>Fetch challenges</c>
      <c>POST-as-GET order’s authorization urls</c>
      <c>200</c>
      <c>Respond to challenges</c>
      <c>POST authorization challenge urls</c>
      <c>200</c>
      <c>Poll for status</c>
      <c>POST-as-GET order</c>
      <c>200</c>
      <c>Finalize order</c>
      <c>POST order’s finalize url</c>
      <c>200</c>
      <c>Poll for status</c>
      <c>POST-as-GET order</c>
      <c>200</c>
      <c>Download certificate</c>
      <c>POST-as-GET order’s certificate url</c>
      <c>200</c>
</texttable>

<t>The remainder of this section provides the details of how these resources are
structured and how the ACME protocol makes use of them.</t>

<section anchor="directory" title="Directory">

<t>In order to help clients configure themselves with the right URLs for each ACME
operation, ACME servers provide a directory object. This should be the only URL
needed to configure clients. It is a JSON object, whose field names are drawn from
the resource registry (<xref target="iana-resource"/>) and whose values are the corresponding
URLs.</t>

<texttable>
      <ttcol align='left'>Field</ttcol>
      <ttcol align='left'>URL in value</ttcol>
      <c>newNonce</c>
      <c>New nonce</c>
      <c>newAccount</c>
      <c>New account</c>
      <c>newOrder</c>
      <c>New order</c>
      <c>newAuthz</c>
      <c>New authorization</c>
      <c>revokeCert</c>
      <c>Revoke certificate</c>
      <c>keyChange</c>
      <c>Key Change</c>
</texttable>

<t>There is no constraint on the URL of the directory except that it
should be different from the other ACME server resources’ URLs, and that it
should not clash with other services. For instance:</t>

<t><list style="symbols">
  <t>a host which functions as both an ACME and a Web server may want to keep
the root path “/” for an HTML “front page”, and place the ACME
directory under the path “/acme”.</t>
  <t>a host which only functions as an ACME server could place the directory
under the path “/”.</t>
</list></t>

<t>If the ACME server does not implement pre-authorization (<xref target="pre-authorization"/>) it
MUST omit the “newAuthz” field of the directory.</t>

<t>The object MAY additionally contain a field “meta”. If present, it MUST be a
JSON object; each field in the object is an item of metadata relating to
the service provided by the ACME server.</t>

<t>The following metadata items are defined (<xref target="iana-meta"/>), all of which are OPTIONAL:</t>

<t><list style="hanging">
  <t hangText='termsOfService (optional, string):'>
  A URL identifying the current terms of service.</t>
  <t hangText='website (optional, string):'>
  An HTTP or HTTPS URL locating a website providing more
information about the ACME server.</t>
  <t hangText='caaIdentities (optional, array of string):'>
  The hostnames that the ACME server recognizes as referring to
itself for the purposes of CAA record validation as defined in
<xref target="RFC6844"/>.  Each string MUST represent the same sequence of ASCII
code points that the server will expect to see as the “Issuer Domain
Name” in a CAA issue or issuewild property tag.  This allows clients
to determine the correct issuer domain name to use when configuring
CAA records.</t>
  <t hangText='externalAccountRequired (optional, boolean):'>
  If this field is present and set to “true”, then the CA requires that all
new-account requests include an “externalAccountBinding” field associating the
new account with an external account.</t>
</list></t>

<t>Clients access the directory by sending a GET request to the directory URL.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json

{
  "newNonce": "https://example.com/acme/new-nonce",
  "newAccount": "https://example.com/acme/new-account",
  "newOrder": "https://example.com/acme/new-order",
  "newAuthz": "https://example.com/acme/new-authz",
  "revokeCert": "https://example.com/acme/revoke-cert",
  "keyChange": "https://example.com/acme/key-change",
  "meta": {
    "termsOfService": "https://example.com/acme/terms/2017-5-30",
    "website": "https://www.example.com/",
    "caaIdentities": ["example.com"],
    "externalAccountRequired": false
  }
}
]]></artwork></figure>

</section>
<section anchor="account-objects" title="Account Objects">

<t>An ACME account resource represents a set of metadata associated with an account.
Account resources have the following structure:</t>

<t><list style="hanging">
  <t hangText='status (required, string):'>
  The status of this account. Possible values are: “valid”, “deactivated”, and
“revoked”.  The value “deactivated” should be used to indicate client-initiated
deactivation whereas “revoked” should be used to indicate server-initiated
deactivation. (See <xref target="status-changes"/>)</t>
  <t hangText='contact (optional, array of string):'>
  An array of URLs that the server can use to contact the client for issues
related to this account. For example, the server may wish to notify the
client about server-initiated revocation or certificate expiration.
For information on supported URL schemes, see <xref target="account-management"/></t>
  <t hangText='termsOfServiceAgreed (optional, boolean):'>
  Including this field in a new-account request, with a value of true, indicates
the client’s agreement with the terms of service. This field is not updateable
by the client.</t>
  <t hangText='orders (required, string):'>
  A URL from which a list of orders submitted by this account can be fetched via
a POST-as-GET request, as described in <xref target="orders-list"/>.</t>
</list></t>

<figure><artwork><![CDATA[
{
  "status": "valid",
  "contact": [
    "mailto:cert-admin@example.com",
    "mailto:admin@example.com"
  ],
  "termsOfServiceAgreed": true,
  "orders": "https://example.com/acme/acct/evOfKhNU60wg/orders"
}
]]></artwork></figure>

<section anchor="orders-list" title="Orders List">

<t>Each account object includes an “orders” URL from which a list of orders created
by the account can be fetched via POST-as-GET request. The result of the request
MUST be a JSON object whose “orders” field is an array of URLs, each identifying
an order belonging to the account.  The server SHOULD include pending orders,
and SHOULD NOT include orders that are invalid in the array of URLs. The server
MAY return an incomplete list, along with a Link header field with a “next” link
relation indicating where further entries can be acquired.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Content-Type: application/json
Link: <https://example.com/acme/acct/evOfKhNU60wg/orders?cursor=2>;rel="next"

{
  "orders": [
    "https://example.com/acme/order/TOlocE8rfgo",
    "https://example.com/acme/order/4E16bbL5iSw",
    /* more URLs not shown for example brevity */
    "https://example.com/acme/order/neBHYLfw0mg"
  ]
}
]]></artwork></figure>

</section>
</section>
<section anchor="order-objects" title="Order Objects">

<t>An ACME order object represents a client’s request for a certificate and is
used to track the progress of that order through to issuance.  Thus, the object
contains information about the requested certificate, the authorizations that
the server requires the client to complete, and any certificates that have
resulted from this order.</t>

<t><list style="hanging">
  <t hangText='status (required, string):'>
  The status of this order.  Possible values are: “pending”,
“ready”, “processing”, “valid”, and “invalid”.  (See
<xref target="status-changes"/>)</t>
  <t hangText='expires (optional, string):'>
  The timestamp after which the server will consider this order invalid, encoded
in the format specified in RFC 3339 <xref target="RFC3339"/>.  This field is REQUIRED for
objects with “pending” or “valid” in the status field.</t>
  <t hangText='identifiers (required, array of object):'>
  An array of identifier objects that the order pertains to.

      <list style="hanging">
        <t hangText='type (required, string):'>
        The type of identifier.  This document defines the “dns”
identifier type.  See the registry defined in <xref target="iana-identifier"/>
for any others.</t>
        <t hangText='value (required, string):'>
        The identifier itself.</t>
      </list>
  </t>
  <t hangText='notBefore (optional, string):'>
  The requested value of the notBefore field in the certificate, in the date
format defined in <xref target="RFC3339"/>.</t>
  <t hangText='notAfter (optional, string):'>
  The requested value of the notAfter field in the certificate, in the date
format defined in <xref target="RFC3339"/>.</t>
  <t hangText='error (optional, object):'>
  The error that occurred while processing the order, if any.
This field is structured as a problem document <xref target="RFC7807"/>.</t>
  <t hangText='authorizations (required, array of string):'>
  For pending orders, the authorizations that the client needs to complete
before the requested certificate can be issued (see
<xref target="identifier-authorization"/>), including unexpired authorizations that the client has completed in the past for identifiers specified in the order. The authorizations required are dictated by server policy and there may not be a 1:1 relationship between the order identifiers and the authorizations required. For final orders (in the “valid” or “invalid” state), the authorizations that
were completed.  Each entry is a URL from which an authorization can be fetched
with a POST-as-GET request.</t>
  <t hangText='finalize (required, string):'>
  A URL that a CSR must be POSTed to once all of the order’s authorizations are
satisfied to finalize the order. The result of a successful finalization will be
the population of the certificate URL for the order.</t>
  <t hangText='certificate (optional, string):'>
  A URL for the certificate that has been issued in response to this order.</t>
</list></t>

<figure><artwork><![CDATA[
{
  "status": "valid",
  "expires": "2015-03-01T14:09:07.99Z",

  "identifiers": [
    { "type": "dns", "value": "example.com" },
    { "type": "dns", "value": "www.example.com" }
  ],

  "notBefore": "2016-01-01T00:00:00Z",
  "notAfter": "2016-01-08T00:00:00Z",

  "authorizations": [
    "https://example.com/acme/authz/PAniVnsZcis",
    "https://example.com/acme/authz/r4HqLzrSrpI"
  ],

  "finalize": "https://example.com/acme/order/TOlocE8rfgo/finalize",

  "certificate": "https://example.com/acme/cert/jWCdfHVGY2M"
}
]]></artwork></figure>

<t>Any identifier of type “dns” in a new-order request MAY have a wildcard domain
name as its value. A wildcard domain name consists of a single asterisk
character followed by a single full stop character (“*.”) followed by a domain
name as defined for use in the Subject Alternate Name Extension by RFC 5280
<xref target="RFC5280"/>. An authorization returned by the server for a wildcard domain name
identifier MUST NOT include the asterisk and full stop (“*.”) prefix in the
authorization identifier value. The returned authorization MUST include the
optional “wildcard” field, with a value of true.</t>

<t>The elements of the “authorizations” and “identifiers” array are immutable once
set.  The server MUST NOT change the contents of either array after they are
created. If a client observes a change in the contents of either array, then it
SHOULD consider the order invalid.</t>

<t>The “authorizations” array of the order SHOULD reflect all authorizations
that the CA takes into account in deciding to issue, even if some authorizations
were fulfilled in earlier orders or in pre-authorization transactions.  For
example, if a CA allows multiple orders to be fulfilled based on a single
authorization transaction, then it SHOULD reflect that authorization in all of
the orders.</t>

<t>Note that just because an authorization URL is listed in the
“authorizations” array of an order object doesn’t mean that the
client is required to take action.  There are several reasons that
the referenced authorizations may already be valid:</t>

<t><list style="symbols">
  <t>The client completed the authorization as part of a previous order</t>
  <t>The client previously pre-authorized the identifier (see <xref target="pre-authorization"/>)</t>
  <t>The server granted the client authorization based on an external account</t>
</list></t>

<t>Clients SHOULD check the “status” field of an order to determine
whether they need to take any action.</t>

</section>
<section anchor="authorization-objects" title="Authorization Objects">

<t>An ACME authorization object represents a server’s authorization for an account
to represent an identifier.  In addition to the identifier, an authorization
includes several metadata fields, such as the status of the authorization (e.g.,
“pending”, “valid”, or “revoked”) and which challenges were used to validate
possession of the identifier.</t>

<t>The structure of an ACME authorization resource is as follows:</t>

<t><list style="hanging">
  <t hangText='identifier (required, object):'>
  The identifier that the account is authorized to represent

      <list style="hanging">
        <t hangText='type (required, string):'>
        The type of identifier.  (See below and <xref target="iana-identifier"/>)</t>
        <t hangText='value (required, string):'>
        The identifier itself.</t>
      </list>
  </t>
  <t hangText='status (required, string):'>
  The status of this authorization.  Possible values are: “pending”,
“valid”, “invalid”, “deactivated”, “expired”, and “revoked”.  (See
<xref target="status-changes"/>)</t>
  <t hangText='expires (optional, string):'>
  The timestamp after which the server will consider this authorization invalid,
encoded in the format specified in RFC 3339 <xref target="RFC3339"/>.  This field is REQUIRED
for objects with “valid” in the “status” field.</t>
  <t hangText='challenges (required, array of objects):'>
  For pending authorizations, the challenges that the client can
fulfill in order to prove possession of the identifier.  For valid
authorizations, the challenge that was validated.  For invalid
authorizations, the challenge that was attempted and failed.  Each
array entry is an object with parameters required to validate the
challenge.  A client should attempt to fulfill one of these
challenges, and a server should consider any one of the challenges
sufficient to make the authorization valid.</t>
  <t hangText='wildcard (optional, boolean):'>
  For authorizations created as a result of a newOrder request containing a DNS
identifier with a value that contained a wildcard prefix this field MUST be
present, and true.</t>
</list></t>

<t>The only type of identifier defined by this specification is a fully-qualified
domain name (type: “dns”). The domain name MUST be encoded in the
form in which it would appear in a certificate.  That is, it MUST be
encoded according to the rules in Section 7 of <xref target="RFC5280"/>.  Servers MUST verify
any identifier values that begin with the ASCII Compatible Encoding prefix
“xn--” as defined in <xref target="RFC5890"/> are properly encoded. Wildcard domain names
(with “*” as the first label) MUST NOT be included in authorization objects. If
an authorization object conveys authorization for the base domain of a newOrder
DNS type identifier with a wildcard prefix then the optional authorizations
“wildcard” field MUST be present with a value of true.</t>

<t><xref target="identifier-validation-challenges"/> describes a set of challenges for domain
name validation.</t>

<figure><artwork><![CDATA[
{
  "status": "valid",
  "expires": "2015-03-01T14:09:07.99Z",

  "identifier": {
    "type": "dns",
    "value": "example.org"
  },

  "challenges": [
    {
      "url": "https://example.com/acme/chall/prV_B7yEyA4",
      "type": "http-01",
      "status": "valid",
      "token": "DGyRejmCefe7v4NfDGDKfA",
      "validated": "2014-12-01T12:05:58.16Z"
    }
  ],

  "wildcard": false
}
]]></artwork></figure>

</section>
<section anchor="challenge-objects" title="Challenge Objects">

<t>An ACME challenge object represents a server’s offer to validate a
client’s possession of an identifier in a specific way.  Unlike the
other objects listed above, there is not a single standard structure
for a challenge object.  The contents of a challenge object depend
on the validation method being used.  The general structure of
challenge objects and an initial set of validation methods are
described in <xref target="identifier-validation-challenges"/>.</t>

</section>
<section anchor="status-changes" title="Status Changes">

<t>Each ACME object type goes through a simple state machine over its
lifetime.  The “status” field of the object indicates which state
the object is currently in.</t>

<t>Challenge objects are created in the “pending” state.  They
transition to the “processing” state when the client responds to the
challenge (see <xref target="responding-to-challenges"/>) and the server begins
attempting to validate that the client has completed the challenge.
Note that within the “processing” state, the server may attempt to
validate the challenge multiple times (see <xref target="retrying-challenges"/>).
Likewise, client requests for retries do not cause a state change.
If validation is successful, the challenge moves to the “valid”
state; if there is an error, the challenge moves to the “invalid”
state.</t>

<figure title="State Transitions for Challenge Objects"><artwork><![CDATA[
         pending
            |
            | Receive
            | response
            V
        processing <-+
            |   |    | Server retry or
            |   |    | client retry request
            |   +----+
            |
            |
Successful  |   Failed
validation  |   validation
  +---------+---------+
  |                   |
  V                   V
valid              invalid
]]></artwork></figure>

<t>Authorization objects are created in the “pending” state.  If one of
the challenges listed in the authorization transitions to the
“valid” state, then the authorization also changes to the “valid”
state.  If the client attempts to fulfill a challenge and fails, or
if there is an error while the authorization is still
pending, then the authorization transitions to the “invalid” state.
Once the authorization is in the valid state, it can expire
(“expired”), be deactivated by the client (“deactivated”, see
<xref target="deactivating-an-authorization"/>), or revoked by the server
(“revoked”).</t>

<figure title="State Transitions for Authorization Objects"><artwork><![CDATA[
                   pending --------------------+
                      |                        |
    Challenge failure |                        |
           or         |                        |
          Error       |  Challenge valid       |
            +---------+---------+              |
            |                   |              |
            V                   V              |
         invalid              valid            |
                                |              |
                                |              |
                                |              |
                 +--------------+--------------+
                 |              |              |
                 |              |              |
          Server |       Client |   Time after |
          revoke |   deactivate |    "expires" |
                 V              V              V
              revoked      deactivated      expired
]]></artwork></figure>

<t>Order objects are created in the “pending” state.  Once all of the
authorizations listed in the order object are in the “valid” state,
the order transitions to the “ready” state.  The order moves to the
“processing” state after the client submits a request to the order’s
“finalize” URL and the CA begins the issuance process for the
certificate.  Once the certificate is issued, the order enters the
“valid” state.  If an error occurs at any of these stages, the
order moves to the “invalid” state.  The order also moves to the
“invalid” state if it expires, or one of its authorizations enters a
final state other than “valid” (“expired”, “revoked”, “deactivated”).</t>

<figure title="State Transitions for Order Objects"><artwork><![CDATA[
 pending --------------+
    |                  |
    | All authz        |
    | "valid"          |
    V                  |
  ready ---------------+
    |                  |
    | Receive          |
    | finalize         |
    | request          |
    V                  |
processing ------------+
    |                  |
    | Certificate      | Error or
    | issued           | Authorization failure
    V                  V
  valid             invalid
]]></artwork></figure>

<t>Account objects are created in the “valid” state, since no further
action is required to create an account after a successful
newAccount request.  If the account is deactivated by the client  or
revoked by the server, it moves to the corresponding state.</t>

<figure title="State Transitions for Account Objects"><artwork><![CDATA[
                  valid
                    |
                    |
        +-----------+-----------+
 Client |                Server |
deactiv.|                revoke |
        V                       V
   deactivated               revoked
]]></artwork></figure>

<t>Note that some of these states may not ever appear in a “status”
field, depending on server behavior.  For example, a server that
issues synchronously will never show an order in the “processing”
state.  A server that deletes expired authorizations immediately
will never show an authorization in the “expired” state.</t>

</section>
</section>
<section anchor="getting-a-nonce" title="Getting a Nonce">

<t>Before sending a POST request to the server, an ACME client needs to have a
fresh anti-replay nonce to put in the “nonce” header of the JWS.  In most cases,
the client will have gotten a nonce from a previous request.  However, the
client might sometimes need to get a new nonce, e.g., on its first request to
the server or if an existing nonce is no longer valid.</t>

<t>To get a fresh nonce, the client sends a HEAD request to the new-nonce resource
on the server.  The server’s response MUST include a Replay-Nonce header field
containing a fresh nonce, and SHOULD have status code 200 (OK).  The
server MUST also respond to GET requests for this resource, returning an empty
body (while still providing a Replay-Nonce header) with a 204 (No Content) status.</t>

<figure><artwork><![CDATA[
HEAD /acme/new-nonce HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Replay-Nonce: oFvnlFP1wIhRlYS2jTaXbA
Cache-Control: no-store
]]></artwork></figure>

<t>Proxy caching of responses from the new-nonce resource can cause
clients receive the same nonce repeatedly, leading to badNonce errors.
The server MUST include a Cache-Control header field with the “no-store”
directive in responses for the new-nonce resource, in order to prevent
caching of this resource.</t>

</section>
<section anchor="account-management" title="Account Management">

<t>In this section, we describe how an ACME client can create an
account on an ACME server, and perform some modifications to the
account after it has been created.</t>

<t>A client creates a new account with the server by sending a POST request to the
server’s new-account URL.  The body of the request is a stub account object
containing some subset of the following fields:</t>

<t><list style="hanging">
  <t hangText='contact (optional, array of string):'>
  Same meaning as the corresponding server field defined in <xref target="account-objects"/></t>
  <t hangText='termsOfServiceAgreed (optional, boolean):'>
  Same meaning as the corresponding server field defined in <xref target="account-objects"/></t>
  <t hangText='onlyReturnExisting (optional, boolean):'>
  If this field is present with the value “true”, then the server MUST NOT
create a new account if one does not already exist.  This allows a client to
look up an account URL based on an account key (see
<xref target="finding-an-account-url-given-a-key"/>).</t>
  <t hangText='externalAccountBinding (optional, object):'>
  An optional field for binding the new account with an existing non-ACME
account (see <xref target=" external-account-binding "/>).</t>
</list></t>

<figure><artwork><![CDATA[
POST /acme/new-account HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "jwk": {...},
    "nonce": "6S8IqOGY7eL2lsGoTZYifg",
    "url": "https://example.com/acme/new-account"
  }),
  "payload": base64url({
    "termsOfServiceAgreed": true,
    "contact": [
      "mailto:cert-admin@example.com",
      "mailto:admin@example.com"
    ]
  }),
  "signature": "RZPOnYoPs1PhjszF...-nh6X1qtOFPB519I"
}
]]></artwork></figure>

<t>The server MUST ignore any values provided in the “orders”
fields in account bodies sent by the client, as well as any other fields
that it does not recognize.  If new fields are specified in the future, the
specification of those fields MUST describe whether they can be provided by the
client.</t>

<t>In general, the server MUST ignore any fields in the request object that it does
not recognize.  In particular, it MUST NOT reflect unrecognized fields in the
resulting account object.  This allows clients to detect when servers do not
support an extension field.</t>

<t>The server SHOULD validate that the contact URLs in the “contact” field are
valid and supported by the server. If the server validates contact URLs it MUST
support the “mailto” scheme.  Clients MUST NOT provide a “mailto” URL in the
“contact” field that contains <spanx style="verb">hfields</spanx> <xref target="RFC6068"/>, or more than one
<spanx style="verb">addr-spec</spanx> in the <spanx style="verb">to</spanx> component.  If a server encounters a “mailto” contact
URL that does not meet these criteria, then it SHOULD reject it as invalid.</t>

<t>If the server rejects a contact URL for using an
unsupported scheme it MUST return an error of type “unsupportedContact”, with
a description describing the error and what types of contact URLs the server
considers acceptable. If the server rejects a contact URL for using a supported
scheme but an invalid value then the server MUST return an error of type
“invalidContact”.</t>

<t>If the server wishes to require the client to agree to terms under which the ACME
service is to be used, it MUST indicate the URL where such terms can be accessed
in the “termsOfService” subfield of the “meta” field in the directory object,
and the server MUST reject new-account requests that do not have the
“termsOfServiceAgreed” field set to “true”.  Clients SHOULD NOT automatically agree
to terms by default.  Rather, they SHOULD require some user interaction for
agreement to terms.</t>

<t>The server creates an account and stores the public key used to verify the
JWS (i.e., the “jwk” element of the JWS header) to authenticate future requests
from the account.  The server returns this account object in a 201 (Created)
response, with the account URL in a Location header field. The account URL is
used as the “kid” value in the JWS authenticating subsequent requests by this
account (see <xref target="request-authentication"/>).  The account URL is also used for
requests for management actions on this account, as described below.</t>

<figure><artwork><![CDATA[
HTTP/1.1 201 Created
Content-Type: application/json
Replay-Nonce: D8s4D2mLs8Vn-goWuPQeKA
Location: https://example.com/acme/acct/evOfKhNU60wg
Link: <https://example.com/acme/some-directory>;rel="index"

{
  "status": "valid",

  "contact": [
    "mailto:cert-admin@example.com",
    "mailto:admin@example.com"
  ],

  "orders": "https://example.com/acme/acct/evOfKhNU60wg/orders"
}
]]></artwork></figure>

<section anchor="finding-an-account-url-given-a-key" title="Finding an Account URL Given a Key">

<t>If the server receives a newAccount request signed with a key for which it already has an account registered with the provided account key,
then it MUST return a response with a 200 (OK) status code and provide the URL of
that account in the Location header field.  The body of this response represents the account object as it existed on the server before this request; any fields in the request object MUST be ignored.  This allows a client that has
an account key but not the corresponding account URL to recover the account URL.</t>

<t>If a client wishes to find the URL for an existing account and does not want an
account to be created if one does not already exist, then it SHOULD do so by
sending a POST request to the new-account URL with a JWS whose payload has an
“onlyReturnExisting” field set to “true” ({“onlyReturnExisting”: true}).
If a client sends such a request and an account does not exist, then the server
MUST return an error response with status code 400 (Bad Request) and type
“urn:ietf:params:acme:error:accountDoesNotExist”.</t>

</section>
<section anchor="account-update" title="Account Update">

<t>If the client wishes to update this information in the future, it sends a POST
request with updated information to the account URL.  The server MUST ignore any
updates to the “orders” field, “termsOfServiceAgreed” field (see <xref target="changes-of-terms-of-service"/>), the “status” field (except as allowed by <xref target="account-deactivation"/>), or any other fields it does not recognize. If the server
accepts the update, it MUST return a response with a 200 (OK) status code and the
resulting account object.</t>

<t>For example, to update the contact information in the above account, the client
could send the following request:</t>

<figure><artwork><![CDATA[
POST /acme/acct/evOfKhNU60wg HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "ax5RnthDqp_Yf4_HZnFLmA",
    "url": "https://example.com/acme/acct/evOfKhNU60wg"
  }),
  "payload": base64url({
    "contact": [
      "mailto:certificates@example.com",
      "mailto:admin@example.com"
    ]
  }),
  "signature": "hDXzvcj8T6fbFbmn...rDzXzzvzpRy64N0o"
}
]]></artwork></figure>

</section>
<section anchor="changes-of-terms-of-service" title="Changes of Terms of Service">

<t>As described above, a client can indicate its agreement with the CA’s terms of
service by setting the “termsOfServiceAgreed” field in its account object to
“true”.</t>

<t>If the server has changed its terms of service since a client initially agreed,
and the server is unwilling to process a request without explicit agreement to
the new terms, then it MUST return an error response with status code 403
(Forbidden) and type “urn:ietf:params:acme:error:userActionRequired”.  This
response MUST include a Link header field with link relation “terms-of-service” and
the latest terms-of-service URL.</t>

<t>The problem document returned with the error MUST also include an “instance”
field, indicating a URL that the client should direct a human user to visit in
order for instructions on how to agree to the terms.</t>

<figure><artwork><![CDATA[
HTTP/1.1 403 Forbidden
Replay-Nonce: T81bdZroZ2ITWSondpTmAw
Link: <https://example.com/acme/terms/2017-6-02>;rel="terms-of-service"
Content-Type: application/problem+json
Content-Language: en

{
  "type": "urn:ietf:params:acme:error:userActionRequired",
  "detail": "Terms of service have changed",
  "instance": "https://example.com/acme/agreement/?token=W8Ih3PswD-8"
}
]]></artwork></figure>

</section>
<section anchor="external-account-binding" title="External Account Binding">

<t>The server MAY require a value for the “externalAccountBinding” field to be
present in “newAccount” requests.  This can be used to associate an ACME account with an
existing account in a non-ACME system, such as a CA customer database.</t>

<t>To enable ACME account binding, the CA operating the ACME server needs to provide the ACME client with a
MAC key and a key identifier, using some mechanism outside of ACME. The key
identifier MUST be an ASCII string. The MAC key SHOULD be provided in
base64url-encoded form, to maximize compatibility between non-ACME provisioning systems
and ACME clients.</t>

<t>The ACME client then computes a binding JWS to indicate the external account holder’s
approval of the ACME account key.  The payload of this JWS is the ACME account key
being registered, in JWK form.  The protected header of the JWS MUST meet the
following criteria:</t>

<t><list style="symbols">
  <t>The “alg” field MUST indicate a MAC-based algorithm</t>
  <t>The “kid” field MUST contain the key identifier provided by the CA</t>
  <t>The “nonce” field MUST NOT be present</t>
  <t>The “url” field MUST be set to the same value as the outer JWS</t>
</list></t>

<t>The “signature” field of the JWS will contain the MAC value computed with the
MAC key provided by the CA.</t>

<figure><artwork><![CDATA[
POST /acme/new-account HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "jwk": /* account key */,
    "nonce": "K60BWPrMQG9SDxBDS_xtSw",
    "url": "https://example.com/acme/new-account"
  }),
  "payload": base64url({
    "contact": ["mailto:example@anonymous.invalid"],
    "termsOfServiceAgreed": true,

    "externalAccountBinding": {
      "protected": base64url({
        "alg": "HS256",
        "kid": /* key identifier from CA */,
        "url": "https://example.com/acme/new-account"
      }),
      "payload": base64url(/* same as in "jwk" above */),
      "signature": /* MAC using MAC key from CA */
    }
  }),
  "signature": "5TWiqIYQfIDfALQv...x9C2mg8JGPxl5bI4"
}
]]></artwork></figure>

<t>If such a CA requires that new-account requests contain an “externalAccountBinding”
field, then it MUST provide the value “true” in the “externalAccountRequired” subfield
of the “meta” field in the directory object.  If the CA receives a
new-account request without an “externalAccountBinding” field, then it SHOULD
reply with an error of type “externalAccountRequired”.</t>

<t>When a CA receives a new-account request containing an
“externalAccountBinding” field, it decides whether or not to verify the
binding.  If the CA does not verify the binding, then it MUST NOT reflect the
“externalAccountBinding” field in the resulting account object (if any).  To
verify the account binding, the CA MUST take the following steps:</t>

<t><list style="numbers">
  <t>Verify that the value of the field is a well-formed JWS</t>
  <t>Verify that the JWS protected field meets the above criteria</t>
  <t>Retrieve the MAC key corresponding to the key identifier in the “kid” field</t>
  <t>Verify that the MAC on the JWS verifies using that MAC key</t>
  <t>Verify that the payload of the JWS represents the same key as was used to
verify the outer JWS (i.e., the “jwk” field of the outer JWS)</t>
</list></t>

<t>If all of these checks pass and the CA creates a new account, then the CA may
consider the new account associated with the external account corresponding to
the MAC key.  The account object the CA returns MUST include an
“externalAccountBinding” field with the same value as the field in
the request.  If any of these checks fail, then the CA MUST
reject the new-account request.</t>

</section>
<section anchor="account-key-roll-over" title="Account Key Roll-over">

<t>A client may wish to change the public key that is associated with an account in
order to recover from a key compromise or proactively mitigate the impact of an
unnoticed key compromise.</t>

<t>To change the key associated with an account, the client sends a
request to the server containing signatures by both the old and new
keys.  The signature by the new key covers the account URL and the
old key, signifying a request by the new key holder to take over the
account from the old key holder.  The signature by the old key
covers this request and its signature, and indicates the old key
holder’s assent to the roll-over request.</t>

<t>To create this request object, the client first constructs a
key-change object describing the account to be updated and its
account key:</t>

<t><list style="hanging">
  <t hangText='account (required, string):'>
  The URL for the account being modified.  The content of this field MUST be the
exact string provided in the Location header field in response to the
new-account request that created the account.</t>
  <t hangText='oldKey (required, JWK):'>
  The JWK representation of the old key</t>
</list></t>

<t>The client then encapsulates the key-change object in an “inner” JWS, signed with the
requested new account key.
This “inner” JWS becomes the payload for the “outer” JWS that is the body of the ACME
request.</t>

<t>The outer JWS MUST meet the normal requirements for an ACME JWS (see
<xref target="request-authentication"/>).  The inner JWS MUST meet the normal requirements,
with the following differences:</t>

<t><list style="symbols">
  <t>The inner JWS MUST have a “jwk” header parameter, containing the public key of
the new key pair.</t>
  <t>The inner JWS MUST have the same “url” header parameter as the outer JWS.</t>
  <t>The inner JWS MUST omit the “nonce” header parameter.</t>
</list></t>

<t>This transaction has signatures from both the old and new keys so that the
server can verify that the holders of the two keys both agree to the change.
The signatures are nested to preserve the property that all signatures on POST
messages are signed by exactly one key.  The “inner” JWS effectively
represents a request by the holder of the new key to take over the
account form the holder of the old key.  The “outer” JWS represents
the current account holder’s assent to this request.</t>

<figure><artwork><![CDATA[
POST /acme/key-change HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "S9XaOcxP5McpnTcWPIhYuB",
    "url": "https://example.com/acme/key-change"
  }),
  "payload": base64url({
    "protected": base64url({
      "alg": "ES256",
      "jwk": /* new key */,
      "url": "https://example.com/acme/key-change"
    }),
    "payload": base64url({
      "account": "https://example.com/acme/acct/evOfKhNU60wg",
      "oldKey": /* old key */
    }),
    "signature": "Xe8B94RD30Azj2ea...8BmZIRtcSKPSd8gU"
  }),
  "signature": "5TWiqIYQfIDfALQv...x9C2mg8JGPxl5bI4"
}
]]></artwork></figure>

<t>On receiving key-change request, the server MUST perform the following steps in
addition to the typical JWS validation:</t>

<t><list style="numbers">
  <t>Validate the POST request belongs to a currently active account, as described
in <xref target="message-transport"/>.</t>
  <t>Check that the payload of the JWS is a well-formed JWS object (the “inner
JWS”).</t>
  <t>Check that the JWS protected header of the inner JWS has a “jwk” field.</t>
  <t>Check that the inner JWS verifies using the key in its “jwk” field.</t>
  <t>Check that the payload of the inner JWS is a well-formed key-change object
(as described above).</t>
  <t>Check that the “url” parameters of the inner and outer JWSs are the same.</t>
  <t>Check that the “account” field of the key-change object contains the URL for
the account matching the old key (i.e., the “kid” field in the
outer JWS).</t>
  <t>Check that the “oldKey” field of the key-change object is the
same as the account key for the account in question.</t>
  <t>Check that no account exists whose account key is the same as the key in the
“jwk” header parameter of the inner JWS.</t>
</list></t>

<t>If all of these checks pass, then the server updates the corresponding account
by replacing the old account key with the new public key and returns status
code 200 (OK). Otherwise, the server responds with an error status code and a
problem document describing the error.  If there is an existing account with
the new key provided, then the server SHOULD use status code 409 (Conflict) and
provide the URL of that account in the Location header field.</t>

<t>Note that changing the account key for an account SHOULD NOT have any other
impact on the account.  For example, the server MUST NOT invalidate pending
orders or authorization transactions based on a change of account key.</t>

</section>
<section anchor="account-deactivation" title="Account Deactivation">

<t>A client can deactivate an account by posting a signed update to the account URL with
a status field of “deactivated.” Clients may wish to do this when the account
key is compromised or decommissioned. A deactivated account can no longer request
certificate issuance or access resources related to the account, such as orders
or authorizations.  If a server receives a POST or POST-as-GET from
a deactivated account, it MUST return an error response with status
code 401 (Unauthorized) and type “urn:ietf:params:acme:error:unauthorized”.</t>

<figure><artwork><![CDATA[
POST /acme/acct/evOfKhNU60wg HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "ntuJWWSic4WVNSqeUmshgg",
    "url": "https://example.com/acme/acct/evOfKhNU60wg"
  }),
  "payload": base64url({
    "status": "deactivated"
  }),
  "signature": "earzVLd3m5M4xJzR...bVTqn7R08AKOVf3Y"
}
]]></artwork></figure>

<t>The server MUST verify that the request is signed by the account key. If the
server accepts the deactivation request, it replies with a 200 (OK) status code
and the current contents of the account object.</t>

<t>Once an account is deactivated, the server MUST NOT accept further requests
authorized by that account’s key. The server SHOULD cancel any pending operations authorized
by the account’s key, such as certificate orders. A server may take a variety of actions in
response to an account deactivation, e.g., deleting data related to that account
or sending mail to the account’s contacts.  Servers SHOULD NOT revoke
certificates issued by the deactivated account, since this could cause
operational disruption for servers using these certificates. ACME does not
provide a way to reactivate a deactivated account.</t>

</section>
</section>
<section anchor="applying-for-certificate-issuance" title="Applying for Certificate Issuance">

<t>The client begins the certificate issuance process by sending a POST request to the server’s
new-order resource.  The body of the POST is a JWS object whose JSON payload is
a subset of the order object defined in <xref target="order-objects"/>, containing the fields
that describe the certificate to be issued:</t>

<t><list style="hanging">
  <t hangText='identifiers (required, array of object):'>
  An array of identifier objects that the client wishes to submit an order for.

      <list style="hanging">
        <t hangText='type (required, string):'>
        The type of identifier.</t>
        <t hangText='value (required, string):'>
        The identifier itself.</t>
      </list>
  </t>
  <t hangText='notBefore (optional, string):'>
  The requested value of the notBefore field in the certificate, in the date
format defined in <xref target="RFC3339"/>.</t>
  <t hangText='notAfter (optional, string):'>
  The requested value of the notAfter field in the certificate, in the date
format defined in <xref target="RFC3339"/>.</t>
</list></t>

<figure><artwork><![CDATA[
POST /acme/new-order HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "5XJ1L3lEkMG7tR6pA00clA",
    "url": "https://example.com/acme/new-order"
  }),
  "payload": base64url({
    "identifiers": [
      { "type": "dns", "value": "example.com" }
    ],
    "notBefore": "2016-01-01T00:04:00+04:00",
    "notAfter": "2016-01-08T00:04:00+04:00"
  }),
  "signature": "H6ZXtGjTZyUnPeKn...wEA4TklBdh3e454g"
}
]]></artwork></figure>

<t>The server MUST return an error if it cannot fulfill the request as specified,
and MUST NOT issue a certificate with contents other than those requested.  If
the server requires the request to be modified in a certain way, it should
indicate the required changes using an appropriate error type and description.</t>

<t>If the server is willing to issue the requested certificate, it responds with a
201 (Created) response.  The body of this response is an order object reflecting
the client’s request and any authorizations the client must complete before the
certificate will be issued.</t>

<figure><artwork><![CDATA[
HTTP/1.1 201 Created
Replay-Nonce: MYAuvOpaoIiywTezizk5vw
Location: https://example.com/acme/order/TOlocE8rfgo

{
  "status": "pending",
  "expires": "2016-01-01T00:00:00Z",

  "notBefore": "2016-01-01T00:00:00Z",
  "notAfter": "2016-01-08T00:00:00Z",

  "identifiers": [
    { "type": "dns", "value": "example.com" },
  ],

  "authorizations": [
    "https://example.com/acme/authz/PAniVnsZcis",
  ],

  "finalize": "https://example.com/acme/order/TOlocE8rfgo/finalize"
}
]]></artwork></figure>

<t>The order object returned by the server represents a promise that if the
client fulfills the server’s requirements before the “expires” time, then the
server will be willing to finalize the order upon request and issue the
requested certificate.  In the order object, any authorization referenced in the
“authorizations” array whose status is “pending” represents an authorization
transaction that the client must complete before the server will issue the
certificate (see <xref target="identifier-authorization"/>).  If the client fails to complete
the required actions before the “expires” time, then the server SHOULD change
the status of the order to “invalid” and MAY delete the order resource. Clients
MUST NOT make any assumptions about the sort order of “identifiers” or
“authorizations” elements in the returned order object.</t>

<t>Once the client believes it has fulfilled the server’s requirements, it should
send a POST request to the order resource’s finalize URL. The POST body MUST
include a CSR:</t>

<t><list style="hanging">
  <t hangText='csr (required, string):'>
  A CSR encoding the parameters for the certificate being requested <xref target="RFC2986"/>.
The CSR is sent in the base64url-encoded version of the DER format.  (Note:
Because this field uses base64url, and does not include headers, it is different
from PEM.).</t>
</list></t>

<figure><artwork><![CDATA[
POST /acme/order/TOlocE8rfgo/finalize HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "MSF2j2nawWHPxxkE3ZJtKQ",
    "url": "https://example.com/acme/order/TOlocE8rfgo/finalize"
  }),
  "payload": base64url({
    "csr": "MIIBPTCBxAIBADBFMQ...FS6aKdZeGsysoCo4H9P",
  }),
  "signature": "uOrUfIIk5RyQ...nw62Ay1cl6AB"
}
]]></artwork></figure>

<t>The CSR encodes the client’s requests with regard to the content of the
certificate to be issued.  The CSR MUST indicate the exact same set of requested
identifiers as the initial new-order request.  Identifiers of type “dns” MUST appear either in the commonName portion
of the requested subject name, or in an extensionRequest attribute <xref target="RFC2985"/>
requesting a subjectAltName extension, or both.  (These identifiers may appear
in any sort order.)  Specifications that define
new identifier types must specify where in the certificate signing
request these
identifiers can appear.</t>

<t>A request to finalize an order will result in error if the CA is unwilling to issue a certificate corresponding to the submitted CSR.  For example:</t>

<t><list style="symbols">
  <t>If the order indicated does not have status “ready”</t>
  <t>If the CSR and order identifiers differ</t>
  <t>If the account is not authorized for the identifiers indicated in the CSR</t>
  <t>If the CSR requests extensions that the CA is not willing to include</t>
</list></t>

<t>In such cases, the problem document returned by the server SHOULD
use error code “badCSR”, and describe specific reasons the CSR was
rejected in its “details” field.  After returning such an error, the
server SHOULD leave the order in the “ready” state, to allow the
client to submit a new finalize request with an amended CSR.</t>

<t>A request to finalize an order will return the order to be finalized.
The client should begin polling the order by sending a POST-as-GET request to the order
resource to obtain its current state. The status of the order will indicate what
action the client should take:</t>

<t><list style="symbols">
  <t>“invalid”: The certificate will not be issued.  Consider this order process
abandoned.</t>
  <t>“pending”: The server does not believe that the client has fulfilled the
requirements.  Check the “authorizations” array for entries that are still
pending.</t>
  <t>“ready”: The server agrees that the requirements have been
fulfilled, and is awaiting finalization.  Submit a finalization
request.</t>
  <t>“processing”: The certificate is being issued. Send a POST-as-GET request after the
time given in the “Retry-After” header field of the response, if
any.</t>
  <t>“valid”: The server has issued the certificate and provisioned its URL to the
“certificate” field of the order.  Download the certificate.</t>
</list></t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Replay-Nonce: CGf81JWBsq8QyIgPCi9Q9X
Location: https://example.com/acme/order/TOlocE8rfgo

{
  "status": "valid",
  "expires": "2015-12-31T00:17:00.00-09:00",

  "notBefore": "2015-12-31T00:17:00.00-09:00",
  "notAfter": "2015-12-31T00:17:00.00-09:00",

  "identifiers": [
    { "type": "dns", "value": "example.com" },
    { "type": "dns", "value": "www.example.com" }
  ],

  "authorizations": [
    "https://example.com/acme/authz/PAniVnsZcis",
    "https://example.com/acme/authz/r4HqLzrSrpI"
  ],

  "finalize": "https://example.com/acme/order/TOlocE8rfgo/finalize",

  "certificate": "https://example.com/acme/cert/mAt3xBGaobw"
}
]]></artwork></figure>

<section anchor="pre-authorization" title="Pre-Authorization">

<t>The order process described above presumes that authorization objects are
created reactively, in response to a certificate order.  Some servers
may also wish to enable clients to obtain authorization for an identifier
proactively, outside of the context of a specific issuance.  For example, a
client hosting virtual servers for a collection of names might wish to obtain
authorization before any virtual servers are created and only create a certificate when
a virtual server starts up.</t>

<t>In some cases, a CA running an ACME server might have a completely external,
non-ACME process for authorizing a client to issue certificates for an identifier.  In these
cases, the CA should provision its ACME server with authorization objects
corresponding to these authorizations and reflect them as already valid in any
orders submitted by the client.</t>

<t>If a CA wishes to allow pre-authorization within ACME, it can offer a “new
authorization” resource in its directory by adding the field “newAuthz” with a
URL for the new authorization resource.</t>

<t>To request authorization for an identifier, the client sends a POST request to
the new-authorization resource specifying the identifier for which authorization
is being requested.</t>

<t><list style="hanging">
  <t hangText='identifier (required, object):'>
  The identifier to appear in the resulting authorization object
(see <xref target="authorization-objects"/>)

      <list style="hanging">
        <t hangText='type (required, string):'>
        The type of identifier.</t>
        <t hangText='value (required, string):'>
        The identifier itself.</t>
      </list>
  </t>
</list></t>

<figure><artwork><![CDATA[
POST /acme/new-authz HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "uQpSjlRb4vQVCjVYAyyUWg",
    "url": "https://example.com/acme/new-authz"
  }),
  "payload": base64url({
    "identifier": {
      "type": "dns",
      "value": "example.net"
    }
  }),
  "signature": "nuSDISbWG8mMgE7H...QyVUL68yzf3Zawps"
}
]]></artwork></figure>

<t>Note that because the identifier in a pre-authorization request is
the exact identifier to be included in the authorization object,
pre-authorization cannot be used to authorize issuance with wildcard
DNS identifiers.</t>

<t>Before processing the authorization request, the server SHOULD determine whether
it is willing to issue certificates for the identifier.  For example, the server
should check that the identifier is of a supported type.  Servers might also
check names against a blacklist of known high-value identifiers.  If the server
is unwilling to issue for the identifier, it SHOULD return a 403 (Forbidden)
error, with a problem document describing the reason for the rejection.</t>

<t>If the server is willing to proceed, it builds a pending authorization object
from the inputs submitted by the client:</t>

<t><list style="symbols">
  <t>“identifier” the identifier submitted by the client</t>
  <t>“status” MUST be “pending” unless the server has out-of-band information
about the client’s authorization status</t>
  <t>“challenges” as selected by the server’s policy for this identifier</t>
</list></t>

<t>The server allocates a new URL for this authorization, and returns a 201
(Created) response, with the authorization URL in the Location header field, and
the JSON authorization object in the body.  The client then follows the process
described in <xref target="identifier-authorization"/> to complete the authorization process.</t>

</section>
<section anchor="downloading-the-certificate" title="Downloading the Certificate">

<t>To download the issued certificate, the client simply sends a POST-as-GET request to the
certificate URL.</t>

<t>The default format of the certificate is application/pem-certificate-chain (see <xref target="iana-considerations"/>).</t>

<t>The server MAY provide one or more link relation header fields <xref target="RFC5988"/> with
relation “alternate”. Each such field SHOULD express an alternative certificate
chain starting with the same end-entity certificate. This can be used to express
paths to various trust anchors. Clients can fetch these alternates and use their
own heuristics to decide which is optimal.</t>

<figure><artwork><![CDATA[
POST /acme/cert/mAt3xBGaobw HTTP/1.1
Host: example.com
Content-Type: application/jose+json
Accept: application/pem-certificate-chain

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "uQpSjlRb4vQVCjVYAyyUWg",
    "url": "https://example.com/acme/cert/mAt3xBGaobw"
  }),
  "payload": "",
  "signature": "nuSDISbWG8mMgE7H...QyVUL68yzf3Zawps"
}

HTTP/1.1 200 OK
Content-Type: application/pem-certificate-chain
Link: <https://example.com/acme/some-directory>;rel="index"

-----BEGIN CERTIFICATE-----
[End-entity certificate contents]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Issuer certificate contents]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Other certificate contents]
-----END CERTIFICATE-----
]]></artwork></figure>

<t>A certificate resource represents a single, immutable certificate. If the client
wishes to obtain a renewed certificate, the client initiates a new order process
to request one.</t>

<t>Because certificate resources are immutable once issuance is complete, the
server MAY enable the caching of the resource by adding Expires and
Cache-Control header fields specifying a point in time in the distant future. These
header fields have no relation to the certificate’s period of validity.</t>

<t>The ACME client MAY request other formats by including an Accept
header field <xref target="RFC7231"/> in its request.  For example, the client could use the media type
<spanx style="verb">application/pkix-cert</spanx> <xref target="RFC2585"/> or <spanx style="verb">application/pkcs7-mime</spanx> <xref target="RFC5751"/> to request the end-entity certificate
in DER format. Server support for alternate formats is OPTIONAL. For
formats that can only express a single certificate, the server SHOULD
provide one or more <spanx style="verb">Link: rel="up"</spanx> header fields pointing to an issuer or
issuers so that ACME clients can build a certificate chain as defined
in TLS (see Section 4.4.2 of <xref target="RFC8446"/>).</t>

</section>
</section>
<section anchor="identifier-authorization" title="Identifier Authorization">

<t>The identifier authorization process establishes the authorization of an account
to manage certificates for a given identifier.  This process assures the
server of two things:</t>

<t><list style="numbers">
  <t>That the client controls the private key of the account key pair, and</t>
  <t>That the client controls the identifier in question.</t>
</list></t>

<t>This process may be repeated to associate multiple identifiers to a key pair
(e.g., to request certificates with multiple identifiers), or to associate
multiple accounts with an identifier (e.g., to allow multiple entities to manage
certificates).</t>

<t>Authorization resources are created by the server in response to certificate
orders or authorization requests submitted by an account key holder; their
URLs are provided to the client in the responses to these requests.  The
authorization object is implicitly tied to the account key used to sign the
request.</t>

<t>When a client receives an order from the server in reply to a new order request, it downloads the authorization
resources by sending POST-as-GET requests to the indicated URLs.  If the client
initiates authorization using a request to the new authorization resource, it
will have already received the pending authorization object in the response
to that request.</t>

<figure><artwork><![CDATA[
POST /acme/authz/PAniVnsZcis HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "uQpSjlRb4vQVCjVYAyyUWg",
    "url": "https://example.com/acme/authz/1234"
  }),
  "payload": "",
  "signature": "nuSDISbWG8mMgE7H...QyVUL68yzf3Zawps"
}

HTTP/1.1 200 OK
Content-Type: application/json
Link: <https://example.com/acme/some-directory>;rel="index"

{
  "status": "pending",
  "expires": "2018-03-03T14:09:30Z",

  "identifier": {
    "type": "dns",
    "value": "example.org"
  },

  "challenges": [
    {
      "type": "http-01",
      "url": "https://example.com/acme/chall/prV_B7yEyA4",
      "token": "DGyRejmCefe7v4NfDGDKfA"
    },
    {
      "type": "dns-01",
      "url": "https://example.com/acme/chall/Rg5dV14Gh1Q",
      "token": "DGyRejmCefe7v4NfDGDKfA"
    }
  ],

  "wildcard": false
}
]]></artwork></figure>

<section anchor="responding-to-challenges" title="Responding to Challenges">

<t>To prove control of the identifier and receive authorization, the client needs to
provision the required challenge response based on the challenge type and
indicate to the server that it is ready for the challenge validation to
be attempted.</t>

<t>The client indicates to the server it is ready for the challenge validation by
sending an empty JSON body (<spanx style="verb">{}</spanx>), carried in a POST request to the challenge
URL (not authorization URL).</t>

<t>For example, if the client were to respond to the “http-01” challenge in the
above authorization, it would send the following request:</t>

<figure><artwork><![CDATA[
POST /acme/chall/prV_B7yEyA4 HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "Q_s3MWoqT05TrdkM2MTDcw",
    "url": "https://example.com/acme/chall/prV_B7yEyA4"
  }),
  "payload": base64url({}),
  "signature": "9cbg5JO1Gf5YLjjz...SpkUfcdPai9uVYYQ"
}
]]></artwork></figure>

<t>The server updates the authorization document by updating its representation of
the challenge with the response object provided by the client.  The server MUST
ignore any fields in the response object that are not specified as response
fields for this type of challenge.  The server provides a 200 (OK) response
with the updated challenge object as its body.</t>

<t>If the client’s response is invalid for any reason or does not provide the
server with appropriate information to validate the challenge, then the server
MUST return an HTTP error.  On receiving such an error, the client SHOULD undo
any actions that have been taken to fulfill the challenge, e.g., removing files
that have been provisioned to a web server.</t>

<t>The server is said to “finalize” the authorization when it has completed
one of the validations, by assigning the authorization a status of “valid”
or “invalid”, corresponding to whether it considers the account authorized
for the identifier. If the final state is “valid”, then the server MUST include
an “expires” field. When finalizing an authorization, the server MAY remove
challenges other than the one that was completed, and may modify the “expires”
field. The server SHOULD NOT remove challenges with status “invalid”.</t>

<t>Usually, the validation process will take some time, so the client will need to
poll the authorization resource to see when it is finalized.  For challenges
where the client can tell when the server has validated the challenge (e.g., by
seeing an HTTP or DNS request from the server), the client SHOULD NOT begin
polling until it has seen the validation request from the server.</t>

<t>To check on the status of an authorization, the client sends a POST-as-GET request to
the authorization URL, and the server responds with the current authorization
object. In responding to poll requests while the validation is still in
progress, the server MUST return a 200 (OK) response and MAY include a
Retry-After header field to suggest a polling interval to the client.</t>

<figure><artwork><![CDATA[
POST /acme/authz/PAniVnsZcis HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "uQpSjlRb4vQVCjVYAyyUWg",
    "url": "https://example.com/acme/authz/PAniVnsZcis"
  }),
  "payload": "",
  "signature": "nuSDISbWG8mMgE7H...QyVUL68yzf3Zawps"
}

HTTP/1.1 200 OK
Content-Type: application/json

{
  "status": "valid",
  "expires": "2018-09-09T14:09:01.13Z",

  "identifier": {
    "type": "dns",
    "value": "example.org"
  },

  "challenges": [
    {
      "type": "http-01",
      "url": "https://example.com/acme/chall/prV_B7yEyA4",
      "status": "valid",
      "validated": "2014-12-01T12:05:13.72Z",
      "token": "IlirfxKKXAsHtmzK29Pj8A"
    }
  ],

  "wildcard": false
}
]]></artwork></figure>

</section>
<section anchor="deactivating-an-authorization" title="Deactivating an Authorization">

<t>If a client wishes to relinquish its authorization to issue certificates for an
identifier, then it may request that the server deactivates each authorization
associated with it by sending POST requests with the static object
{“status”: “deactivated”} to each authorization URL.</t>

<figure><artwork><![CDATA[
POST /acme/authz/PAniVnsZcis HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "xWCM9lGbIyCgue8di6ueWQ",
    "url": "https://example.com/acme/authz/PAniVnsZcis"
  }),
  "payload": base64url({
    "status": "deactivated"
  }),
  "signature": "srX9Ji7Le9bjszhu...WTFdtujObzMtZcx4"
}
]]></artwork></figure>

<t>The server MUST verify that the request is signed by the account key
corresponding to the account that owns the authorization. If the server accepts
the deactivation, it should reply with a 200 (OK) status code and the updated
contents of the authorization object.</t>

<t>The server MUST NOT treat deactivated authorization objects as sufficient for
issuing certificates.</t>

</section>
</section>
<section anchor="certificate-revocation" title="Certificate Revocation">

<t>To request that a certificate be revoked, the client sends a POST request to
the ACME server’s revokeCert URL.  The body of the POST is a JWS object whose
JSON payload contains the certificate to be revoked:</t>

<t><list style="hanging">
  <t hangText='certificate (required, string):'>
  The certificate to be revoked, in the base64url-encoded version of the DER
format.  (Note: Because this field uses base64url, and does not include headers,
it is different from PEM.)</t>
  <t hangText='reason (optional, int):'>
  One of the revocation reasonCodes defined in Section 5.3.1 of <xref target="RFC5280"/>
to be used when generating OCSP responses and CRLs. If this field is not set
the server SHOULD omit the reasonCode CRL entry extension when generating OCSP
responses and CRLs. The server MAY disallow a subset of reasonCodes from being
used by the user. If a request contains a disallowed reasonCode the server MUST
reject it with the error type “urn:ietf:params:acme:error:badRevocationReason”.
The problem document detail SHOULD indicate which reasonCodes are allowed.</t>
</list></t>

<t>Revocation requests are different from other ACME requests in that they can be
signed either with an account key pair or the key pair in the certificate.</t>

<t>Example using an account key pair for the signature:</t>

<figure><artwork><![CDATA[
POST /acme/revoke-cert HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "JHb54aT_KTXBWQOzGYkt9A",
    "url": "https://example.com/acme/revoke-cert"
  }),
  "payload": base64url({
    "certificate": "MIIEDTCCAvegAwIBAgIRAP8...",
    "reason": 4
  }),
  "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4"
}
]]></artwork></figure>

<t>Example using the certificate key pair for the signature:</t>

<figure><artwork><![CDATA[
POST /acme/revoke-cert HTTP/1.1
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "RS256",
    "jwk": /* certificate's public key */,
    "nonce": "JHb54aT_KTXBWQOzGYkt9A",
    "url": "https://example.com/acme/revoke-cert"
  }),
  "payload": base64url({
    "certificate": "MIIEDTCCAvegAwIBAgIRAP8...",
    "reason": 1
  }),
  "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4"
}
]]></artwork></figure>

<t>Before revoking a certificate, the server MUST verify that the key used to sign
the request is authorized to revoke the certificate.  The server MUST consider
at least the following accounts authorized for a given certificate:</t>

<t><list style="symbols">
  <t>the account that issued the certificate.</t>
  <t>an account that holds authorizations for all of the identifiers in the
certificate.</t>
</list></t>

<t>The server MUST also consider a revocation request valid if it is signed with
the private key corresponding to the public key in the certificate.</t>

<t>If the revocation succeeds, the server responds with status code 200 (OK).  If
the revocation fails, the server returns an error.  For example, if the certificate
has already been revoked the server returns an error response with status code 400
(Bad Request) and type “urn:ietf:params:acme:error:alreadyRevoked”.</t>

<figure><artwork><![CDATA[
HTTP/1.1 200 OK
Replay-Nonce: IXVHDyxIRGcTE0VSblhPzw
Content-Length: 0

--- or ---

HTTP/1.1 403 Forbidden
Replay-Nonce: IXVHDyxIRGcTE0VSblhPzw
Content-Type: application/problem+json
Content-Language: en

{
  "type": "urn:ietf:params:acme:error:unauthorized",
  "detail": "No authorization provided for name example.net"
}
]]></artwork></figure>

</section>
</section>
<section anchor="identifier-validation-challenges" title="Identifier Validation Challenges">

<t>There are few types of identifiers in the world for which there is a standardized
mechanism to prove possession of a given identifier.  In all practical cases,
CAs rely on a variety of means to test whether an entity applying for a
certificate with a given identifier actually controls that identifier.</t>

<t>Challenges provide the server with assurance that an account holder is also
the entity that controls an identifier.  For each type of challenge, it must be
the case that in order for an entity to successfully complete the challenge the
entity must both:</t>

<t><list style="symbols">
  <t>Hold the private key of the account key pair used to respond to the challenge</t>
  <t>Control the identifier in question</t>
</list></t>

<t><xref target="security-considerations"/> documents how the challenges defined in this
document meet these requirements.  New challenges will need to document how they
do.</t>

<t>ACME uses an extensible challenge/response framework for identifier validation.
The server presents a set of challenges in the authorization object it sends to a
client (as objects in the “challenges” array), and the client responds by
sending a response object in a POST request to a challenge URL.</t>

<t>This section describes an initial set of challenge types.  The definition of a
challenge type includes:</t>

<t><list style="numbers">
  <t>Content of challenge objects</t>
  <t>Content of response objects</t>
  <t>How the server uses the challenge and response to verify control of an
identifier</t>
</list></t>

<t>Challenge objects all contain the following basic fields:</t>

<t><list style="hanging">
  <t hangText='type (required, string):'>
  The type of challenge encoded in the object.</t>
  <t hangText='url (required, string):'>
  The URL to which a response can be posted.</t>
  <t hangText='status (required, string):'>
  The status of this challenge.  Possible values are: “pending”,
“processing”, “valid”, and “invalid”. (See <xref target="status-changes"/>)</t>
  <t hangText='validated (optional, string):'>
  The time at which the server validated this challenge, encoded in the
format specified in RFC 3339 <xref target="RFC3339"/>.  This field is REQUIRED if the
“status” field is “valid”.</t>
  <t hangText='error (optional, object):'>
  Error that occurred while the server was validating the challenge, if any,
structured as a problem document <xref target="RFC7807"/>. Multiple errors can be indicated
by using subproblems <xref target="subproblems"/>. A challenge object with an error MUST have
status equal to “invalid”.</t>
</list></t>

<t>All additional fields are specified by the challenge type.  If the server sets a
challenge’s “status” to “invalid”, it SHOULD also include the “error” field to
help the client diagnose why the challenge failed.</t>

<t>Different challenges allow the server to obtain proof of different aspects of
control over an identifier.  In some challenges, like HTTP and DNS, the
client directly proves its ability to do certain things related to the
identifier.  The choice of which challenges to offer to a client under which
circumstances is a matter of server policy.</t>

<t>The identifier validation challenges described in this section all relate to
validation of domain names.  If ACME is extended in the future to support other
types of identifiers, there will need to be new challenge types, and they will
need to specify which types of identifier they apply to.</t>

<section anchor="key-authorizations" title="Key Authorizations">

<t>All challenges defined in this document make use of a key authorization
string.  A key authorization is a string that concatinates the token for the
challenge with a key fingerprint, separated by a “.” character:</t>

<figure><artwork><![CDATA[
keyAuthorization = token || '.' || base64url(Thumbprint(accountKey))
]]></artwork></figure>

<t>The “Thumbprint” step indicates the computation specified in <xref target="RFC7638"/>,
using the SHA-256 digest <xref target="FIPS180-4"></xref>.  As noted in <xref target="RFC7518"/> any prepended
zero octets in the fields of a JWK object MUST be stripped before doing the computation.</t>

<t>As specified in the individual challenges below, the token for a challenge is a
string comprised entirely of characters in the URL-safe base64 alphabet.
The “||” operator indicates concatenation of strings.</t>

</section>
<section anchor="retrying-challenges" title="Retrying Challenges">

<t>ACME challenges typically require the client to set up some network-accessible
resource that the server can query in order to validate that the client
controls an identifier.  In practice it is not uncommon for the server’s
queries to fail while a resource is being set up, e.g., due to information
propagating across a cluster or firewall rules not being in place.</t>

<t>Clients SHOULD NOT respond to challenges until they believe that the server’s
queries will succeed. If a server’s initial validation query fails, the server
SHOULD retry the query after some time, in order to account for delay in setting
up responses such as DNS records or HTTP resources. The precise retry schedule
is up to the server, but server operators should keep in mind the operational
scenarios that the schedule is trying to accommodate.  Given that retries are
intended to address things like propagation delays in HTTP or DNS provisioning,
there should not usually be any reason to retry more often than every 5 or 10
seconds. While the server is still trying, the
status of the challenge remains “processing”; it is only marked “invalid” once the
server has given up.</t>

<t>The server MUST provide information about its retry state to the client via the
“error” field in the challenge and the Retry-After HTTP header field in
response to requests to the challenge resource. The server MUST add an entry to
the “error” field in the challenge after each failed validation query. The
server SHOULD set the Retry-After header field to a time after the server’s
next validation query, since the status of the challenge will not change until
that time.</t>

<t>Clients can explicitly request a retry by re-sending their response to a
challenge in a new POST request (with a new nonce, etc.). This allows clients
to request a retry when the state has changed (e.g., after firewall rules have been
updated). Servers SHOULD retry a request immediately on receiving such a POST
request. In order to avoid denial-of-service attacks via client-initiated
retries, servers SHOULD rate-limit such requests.</t>

</section>
<section anchor="http-challenge" title="HTTP Challenge">

<t>With HTTP validation, the client in an ACME transaction proves its control over
a domain name by proving that it can provision HTTP resources on a server
accessible under that domain name.
The ACME server challenges the client to
provision a file at a specific path, with a specific string as its content.</t>

<t>As a domain may resolve to multiple IPv4 and IPv6 addresses, the server will
connect to at least one of the hosts found in the DNS A and AAAA records, at its
discretion.  Because many web servers allocate a default HTTPS virtual host to a
particular low-privilege tenant user in a subtle and non-intuitive manner, the
challenge must be completed over HTTP, not HTTPS.</t>

<t><list style="hanging">
  <t hangText='type (required, string):'>
  The string “http-01”</t>
  <t hangText='token (required, string):'>
  A random value that uniquely identifies the challenge.  This value MUST have
at least 128 bits of entropy.
It MUST NOT contain any characters outside the base64url alphabet, and MUST NOT
include base64 padding characters (“=”).  See <xref target="RFC4086"/> for additional information
on randomness requirements.</t>
</list></t>

<figure><artwork><![CDATA[
{
  "type": "http-01",
  "url": "https://example.com/acme/chall/prV_B7yEyA4",
  "status": "pending",
  "token": "LoqXcYV8q5ONbJQxbmR7SCTNo3tiAXDfowyjxAjEuX0"
}
]]></artwork></figure>

<t>A client fulfills this challenge by constructing a key authorization from
the “token” value provided in the challenge and the client’s account key.  The
client then provisions the key authorization as a resource on the HTTP server
for the domain in question.</t>

<t>The path at which the resource is provisioned is comprised of the fixed prefix
“/.well-known/acme-challenge/”, followed by the “token” value in the challenge.
The value of the resource MUST be the ASCII representation of the key
authorization.</t>

<figure><artwork><![CDATA[
GET /.well-known/acme-challenge/LoqXcYV8...jxAjEuX0
Host: example.org

HTTP/1.1 200 OK
Content-Type: application/octet-stream

LoqXcYV8...jxAjEuX0.9jg46WB3...fm21mqTI
]]></artwork></figure>

<t>(In the above, “…” indicates that the token and the JWK
thumbprint in the key authorization have been truncated to fit on
the page.)</t>

<t>A client responds with an empty object ({}) to acknowledge that the challenge
can be validated by the server.</t>

<figure><artwork><![CDATA[
POST /acme/chall/prV_B7yEyA4
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "UQI1PoRi5OuXzxuX7V7wL0",
    "url": "https://example.com/acme/chall/prV_B7yEyA4"
  }),
  "payload": base64url({}),
  "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4"
}
]]></artwork></figure>

<t>On receiving a response, the server constructs and stores the key authorization
from the challenge “token” value and the current client account key.</t>

<t>Given a challenge/response pair, the server verifies the client’s control of the
domain by verifying that the resource was provisioned as expected.</t>

<t><list style="numbers">
  <t>Construct a URL by populating the URL template <xref target="RFC6570"/>
“http://{domain}/.well-known/acme-challenge/{token}”, where:
  <list style="symbols">
      <t>the domain field is set to the domain name being verified; and</t>
      <t>the token field is set to the token in the challenge.</t>
    </list></t>
  <t>Verify that the resulting URL is well-formed.</t>
  <t>Dereference the URL using an HTTP GET request.  This request MUST be sent to
TCP port 80 on the HTTP server.</t>
  <t>Verify that the body of the response is a well-formed key authorization.  The
server SHOULD ignore whitespace characters at the end of the body.</t>
  <t>Verify that key authorization provided by the HTTP server matches the key
authorization stored by the server.</t>
</list></t>

<t>The server SHOULD follow redirects when dereferencing the URL.
Clients might use redirects, for example, so that the response can
be provided by a centralized certificate management server.  See
<xref target="integrity-of-authorizations"/> for security considerations related
to redirects.</t>

<t>If all of the above verifications succeed, then the validation is successful.
If the request fails, or the body does not pass these checks, then it has
failed.</t>

<t>The client SHOULD de-provision the resource provisioned for this
challenge once the challenge is complete, i.e., once the “status”
field of the challenge has the value “valid” or “invalid”.</t>

<t>Note that becuase the token appears both in the request sent by the
ACME server and in the key authorization in the response, it is
possible to build clients that copy the token from request to
response.  Clients should avoid this behavior, because it can lead
to cross-site scripting vulnerabilities; instead, clients should be
explicitly configured on a per-challenge basis. A client that does
copy tokens from requests to responses MUST validate that the token
in the request matches the token syntax above (e.g., that it
includes only characters from the base64url alphabet).</t>

</section>
<section anchor="dns-challenge" title="DNS Challenge">

<t>When the identifier being validated is a domain name, the client can prove
control of that domain by provisioning a TXT resource record containing a designated
value for a specific validation domain name.</t>

<t><list style="hanging">
  <t hangText='type (required, string):'>
  The string “dns-01”</t>
  <t hangText='token (required, string):'>
  A random value that uniquely identifies the challenge.  This value MUST have
at least 128 bits of entropy. It MUST NOT contain any characters outside the
base64url alphabet, including padding characters (“=”). See <xref target="RFC4086"/> for
additional information on randomness requirements.</t>
</list></t>

<figure><artwork><![CDATA[
{
  "type": "dns-01",
  "url": "https://example.com/acme/chall/Rg5dV14Gh1Q",
  "status": "pending",
  "token": "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA"
}
]]></artwork></figure>

<t>A client fulfills this challenge by constructing a key authorization from the
“token” value provided in the challenge and the client’s account key.  The
client then computes the SHA-256 digest <xref target="FIPS180-4"></xref> of the key authorization.</t>

<t>The record provisioned to the DNS contains the base64url encoding of this digest.  The
client constructs the validation domain name by prepending the label
“_acme-challenge” to the domain name being validated, then provisions a TXT
record with the digest value under that name. For example, if the domain name
being validated is “example.org”, then the client would provision the following
DNS record:</t>

<figure><artwork><![CDATA[
_acme-challenge.example.org. 300 IN TXT "gfj9Xq...Rg85nM"
]]></artwork></figure>

<t>A client responds with an empty object ({}) to acknowledge that the challenge
can be validated by the server.</t>

<figure><artwork><![CDATA[
POST /acme/chall/Rg5dV14Gh1Q
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "SS2sSl1PtspvFZ08kNtzKd",
    "url": "https://example.com/acme/chall/Rg5dV14Gh1Q"
  }),
  "payload": base64url({}),
  "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4"
}
]]></artwork></figure>

<t>On receiving a response, the server constructs and stores the key authorization
from the challenge “token” value and the current client account key.</t>

<t>To validate a DNS challenge, the server performs the following steps:</t>

<t><list style="numbers">
  <t>Compute the SHA-256 digest <xref target="FIPS180-4"></xref> of the stored key authorization</t>
  <t>Query for TXT records for the validation domain name</t>
  <t>Verify that the contents of one of the TXT records match the digest value</t>
</list></t>

<t>If all of the above verifications succeed, then the validation is successful.
If no DNS record is found, or DNS record and response payload do not pass these
checks, then the validation fails.</t>

<t>The client SHOULD de-provision the resource record(s) provisioned for this
challenge once the challenge is complete, i.e., once the “status”
field of the challenge has the value “valid” or “invalid”.</t>

</section>
</section>
<section anchor="iana-considerations" title="IANA Considerations">

<section anchor="mime-type-applicationpem-certificate-chain" title="MIME Type: application/pem-certificate-chain">

<t>A file of this type contains one or more certificates encoded with
the PEM textual encoding, according to RFC 7468 <xref target="RFC7468"/>.  The
textual encoding of certificates in this file MUST use the strict
encoding and MUST NOT include explanatory text.  The ABNF for this
format is as follows, where <spanx style="verb">stricttextualmsg</spanx> and <spanx style="verb">eol</spanx> are as
defined in Section 3 of RFC 7468:</t>

<figure><artwork><![CDATA[
certchain = stricttextualmsg *(eol stricttextualmsg)
]]></artwork></figure>

<t>In order to provide easy interoperation with TLS, the first
certificate MUST be an end-entity certificate. Each following certificate
SHOULD directly certify the one preceding it. Because certificate validation
requires that trust anchors be distributed independently, a certificate
that represents a trust anchor MAY be omitted from the chain, provided
that supported peers are known to possess any omitted certificates.</t>

<t>The “Media Types” registry should be updated with the following additional
value:</t>

<t>MIME media type name: application</t>

<t>MIME subtype name: pem-certificate-chain</t>

<t>Required parameters: None</t>

<t>Optional parameters: None</t>

<t>Encoding considerations: 7bit</t>

<t>Security considerations: Carries a cryptographic certificate and its associated certificate chain.  This media type carries no active content.</t>

<t>Interoperability considerations: None</t>

<t>Published specification: draft-ietf-acme-acme
[[ RFC EDITOR: Please replace draft-ietf-acme-acme above with the RFC number assigned to this ]]</t>

<t>Applications which use this media type: ACME clients and servers, HTTP servers, other applications that need to be configured with a certificate chain</t>

<t>Additional information:</t>

<t>Deprecated alias names for this type: n/a
  Magic number(s): n/a
  File extension(s): .pem
  Macintosh file type code(s): n/a</t>

<t>Person &amp; email address to contact for further information: See Authors’ Addresses section.</t>

<t>Intended usage: COMMON</t>

<t>Restrictions on usage: n/a</t>

<t>Author: See Authors’ Addresses section.</t>

<t>Change controller: Internet Engineering Task Force <eref target="mailto:iesg@ietf.org">iesg@ietf.org</eref></t>

</section>
<section anchor="well-known-uri-for-the-http-challenge" title="Well-Known URI for the HTTP Challenge">

<t>The “Well-Known URIs” registry should be updated with the following additional
value (using the template from <xref target="RFC5785"/>):</t>

<t>URI suffix: acme-challenge</t>

<t>Change controller: IETF</t>

<t>Specification document(s): This document, Section <xref target="http-challenge"/></t>

<t>Related information: N/A</t>

</section>
<section anchor="replay-nonce-http-header" title="Replay-Nonce HTTP Header">

<t>The “Message Headers” registry should be updated with the following additional
value:</t>

<texttable>
      <ttcol align='left'>Header Field Name</ttcol>
      <ttcol align='left'>Protocol</ttcol>
      <ttcol align='left'>Status</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>Replay-Nonce</c>
      <c>http</c>
      <c>standard</c>
      <c>[[this-RFC, <xref target="replay-nonce"/>]</c>
</texttable>

</section>
<section anchor="url-jws-header-parameter" title="“url” JWS Header Parameter">

<t>The “JSON Web Signature and Encryption Header Parameters” registry should be
updated with the following additional value:</t>

<t><list style="symbols">
  <t>Header Parameter Name: “url”</t>
  <t>Header Parameter Description: URL</t>
  <t>Header Parameter Usage Location(s): JWE, JWS</t>
  <t>Change Controller: IESG</t>
  <t>Specification Document(s): <xref target="url-url-jws-header-parameter"/> of
RFC XXXX</t>
</list></t>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="nonce-jws-header-parameter" title="“nonce” JWS Header Parameter">

<t>The “JSON Web Signature and Encryption Header Parameters” registry should be
updated with the following additional value:</t>

<t><list style="symbols">
  <t>Header Parameter Name: “nonce”</t>
  <t>Header Parameter Description: Nonce</t>
  <t>Header Parameter Usage Location(s): JWE, JWS</t>
  <t>Change Controller: IESG</t>
  <t>Specification Document(s): <xref target="nonce-nonce-jws-header-parameter"/> of
RFC XXXX</t>
</list></t>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="acme-urn-space" title="URN Sub-namespace for ACME (urn:ietf:params:acme)">

<t>The “IETF URN Sub-namespace for Registered Protocol Parameter Identifiers”
registry should be updated with the following additional value, following the
template in <xref target="RFC3553"/>:</t>

<t><list style="hanging">
  <t hangText='Registry name:'>
  acme</t>
  <t hangText='Specification:'>
  RFC XXXX</t>
  <t hangText='Repository:'>
  URL-TBD</t>
  <t hangText='Index value:'>
  No transformation needed.</t>
</list></t>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document, and replace URL-TBD with the URL assigned by IANA for registries of
ACME parameters. ]]</t>

</section>
<section anchor="new-registries" title="New Registries">

<t>This document requests that IANA create the following new registries:</t>

<t><list style="numbers">
  <t>ACME Account Object Fields (<xref target="iana-account"/>)</t>
  <t>ACME Order Object Fields (<xref target="iana-order"/>)</t>
  <t>ACME Authorization Object Fields (<xref target="iana-authz"/>)</t>
  <t>ACME Error Types (<xref target="iana-error"/>)</t>
  <t>ACME Resource Types (<xref target="iana-resource"/>)</t>
  <t>ACME Directory Metadata Fields (<xref target="iana-meta"/>)</t>
  <t>ACME Identifier Types (<xref target="iana-identifier"/>)</t>
  <t>ACME Validation Methods (<xref target="iana-validation"/>)</t>
</list></t>

<t>All of these registries are under a heading of “Automated Certificate Management
Environment (ACME) Protocol” and are administered under a Specification
Required policy <xref target="RFC8126"/>.</t>

<section anchor="iana-account" title="Fields in Account Objects">

<t>This registry lists field names that are defined for use in ACME account
objects.  Fields marked as “configurable” may be included in a
new-account request.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Field name: The string to be used as a field name in the JSON object</t>
  <t>Field type: The type of value to be provided, e.g., string, boolean, array of
string</t>
  <t>Requests: Either the value “none” or a list of types of requests
where the field is allowed in a request object, taken from the
following values:
  <list style="symbols">
      <t>“new” - Requests to the “newAccount” URL</t>
      <t>“account” - Requests to an account URL</t>
    </list></t>
  <t>Reference: Where this field is defined</t>
</list></t>

<t>Initial contents: The fields and descriptions defined in <xref target="account-objects"/>.</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Field Type</ttcol>
      <ttcol align='left'>Requests</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>status</c>
      <c>string</c>
      <c>new, account</c>
      <c>RFC XXXX</c>
      <c>contact</c>
      <c>array of string</c>
      <c>new, account</c>
      <c>RFC XXXX</c>
      <c>externalAccountBinding</c>
      <c>object</c>
      <c>new</c>
      <c>RFC XXXX</c>
      <c>termsOfServiceAgreed</c>
      <c>boolean</c>
      <c>new</c>
      <c>RFC XXXX</c>
      <c>orders</c>
      <c>string</c>
      <c>none</c>
      <c>RFC XXXX</c>
</texttable>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="iana-order" title="Fields in Order Objects">

<t>This registry lists field names that are defined for use in ACME order
objects.  Fields marked as “configurable” may be included in a
new-order request.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Field name: The string to be used as a field name in the JSON object</t>
  <t>Field type: The type of value to be provided, e.g., string, boolean, array of
string</t>
  <t>Client configurable: Boolean indicating whether the server should accept
values provided by the client</t>
  <t>Reference: Where this field is defined</t>
</list></t>

<t>Initial contents: The fields and descriptions defined in <xref target="order-objects"/>.</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Field Type</ttcol>
      <ttcol align='left'>Configurable</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>status</c>
      <c>string</c>
      <c>false</c>
      <c>RFC XXXX</c>
      <c>expires</c>
      <c>string</c>
      <c>false</c>
      <c>RFC XXXX</c>
      <c>identifiers</c>
      <c>array of object</c>
      <c>true</c>
      <c>RFC XXXX</c>
      <c>notBefore</c>
      <c>string</c>
      <c>true</c>
      <c>RFC XXXX</c>
      <c>notAfter</c>
      <c>string</c>
      <c>true</c>
      <c>RFC XXXX</c>
      <c>authorizations</c>
      <c>array of string</c>
      <c>false</c>
      <c>RFC XXXX</c>
      <c>finalize</c>
      <c>string</c>
      <c>false</c>
      <c>RFC XXXX</c>
      <c>certificate</c>
      <c>string</c>
      <c>false</c>
      <c>RFC XXXX</c>
</texttable>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="iana-authz" title="Fields in Authorization Objects">

<t>This registry lists field names that are defined for use in ACME authorization
objects.  Fields marked as “configurable” may be included in a
new-authorization request.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Field name: The string to be used as a field name in the JSON object</t>
  <t>Field type: The type of value to be provided, e.g., string, boolean, array of
string</t>
  <t>Client configurable: Boolean indicating whether the server should accept
values provided by the client</t>
  <t>Reference: Where this field is defined</t>
</list></t>

<t>Initial contents: The fields and descriptions defined in <xref target="authorization-objects"/>.</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Field Type</ttcol>
      <ttcol align='left'>Configurable</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>identifier</c>
      <c>object</c>
      <c>true</c>
      <c>RFC XXXX</c>
      <c>status</c>
      <c>string</c>
      <c>false</c>
      <c>RFC XXXX</c>
      <c>expires</c>
      <c>string</c>
      <c>false</c>
      <c>RFC XXXX</c>
      <c>challenges</c>
      <c>array of object</c>
      <c>false</c>
      <c>RFC XXXX</c>
      <c>wildcard</c>
      <c>boolean</c>
      <c>false</c>
      <c>RFC XXXX</c>
</texttable>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="iana-error" title="Error Types">

<t>This registry lists values that are used within URN values that are provided in
the “type” field of problem documents in ACME.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Type: The label to be included in the URN for this error, following
“urn:ietf:params:acme:error:”</t>
  <t>Description: A human-readable description of the error</t>
  <t>Reference: Where the error is defined</t>
</list></t>

<t>Initial contents: The types and descriptions in the table in <xref target="errors"/> above,
with the Reference field set to point to this specification.</t>

</section>
<section anchor="iana-resource" title="Resource Types">

<t>This registry lists the types of resources that ACME servers may list in their
directory objects.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Field name: The value to be used as a field name in the directory object</t>
  <t>Resource type: The type of resource labeled by the field</t>
  <t>Reference: Where the resource type is defined</t>
</list></t>

<t>Initial contents:</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Resource Type</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>newNonce</c>
      <c>New nonce</c>
      <c>RFC XXXX</c>
      <c>newAccount</c>
      <c>New account</c>
      <c>RFC XXXX</c>
      <c>newOrder</c>
      <c>New order</c>
      <c>RFC XXXX</c>
      <c>newAuthz</c>
      <c>New authorization</c>
      <c>RFC XXXX</c>
      <c>revokeCert</c>
      <c>Revoke certificate</c>
      <c>RFC XXXX</c>
      <c>keyChange</c>
      <c>Key change</c>
      <c>RFC XXXX</c>
      <c>meta</c>
      <c>Metadata object</c>
      <c>RFC XXXX</c>
</texttable>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="iana-meta" title="Fields in the “meta” Object within a Directory Object">

<t>This registry lists field names that are defined for use in the JSON
object included in the “meta” field of an ACME directory object.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Field name: The string to be used as a field name in the JSON object</t>
  <t>Field type: The type of value to be provided, e.g., string, boolean, array of
string</t>
  <t>Reference: Where this field is defined</t>
</list></t>

<t>Initial contents: The fields and descriptions defined in <xref target="directory"/>.</t>

<texttable>
      <ttcol align='left'>Field Name</ttcol>
      <ttcol align='left'>Field Type</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>termsOfService</c>
      <c>string</c>
      <c>RFC XXXX</c>
      <c>website</c>
      <c>string</c>
      <c>RFC XXXX</c>
      <c>caaIdentities</c>
      <c>array of string</c>
      <c>RFC XXXX</c>
      <c>externalAccountRequired</c>
      <c>boolean</c>
      <c>RFC XXXX</c>
</texttable>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="iana-identifier" title="Identifier Types">

<t>This registry lists the types of identifiers that can be present in ACME
authorization objects.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Label: The value to be put in the “type” field of the identifier object</t>
  <t>Reference: Where the identifier type is defined</t>
</list></t>

<t>Initial contents:</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>dns</c>
      <c>RFC XXXX</c>
</texttable>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
<section anchor="iana-validation" title="Validation Methods">

<t>This registry lists identifiers for the ways that CAs can validate control of
identifiers.  Each method’s entry must specify whether it corresponds to an
ACME challenge type.  The “Identifier Type” field must be contained in the
Label column of the ACME Identifier Types registry.</t>

<t>Template:</t>

<t><list style="symbols">
  <t>Label: The identifier for this validation method</t>
  <t>Identifier Type: The type of identifier that this method applies to</t>
  <t>ACME: “Y” if the validation method corresponds to an ACME challenge type;
“N” otherwise</t>
  <t>Reference: Where the validation method is defined</t>
</list></t>

<t>This registry may also contain reserved entries (e.g., to avoid
collisions).  Such entries should have the “ACME” field set to “N”
and the “Identifier Type” set to “RESERVED”.</t>

<t>Initial Contents</t>

<texttable>
      <ttcol align='left'>Label</ttcol>
      <ttcol align='left'>Identifier Type</ttcol>
      <ttcol align='left'>ACME</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>http-01</c>
      <c>dns</c>
      <c>Y</c>
      <c>RFC XXXX</c>
      <c>dns-01</c>
      <c>dns</c>
      <c>Y</c>
      <c>RFC XXXX</c>
      <c>tls-sni-01</c>
      <c>RESERVED</c>
      <c>N</c>
      <c>RFC XXXX</c>
      <c>tls-sni-02</c>
      <c>RESERVED</c>
      <c>N</c>
      <c>RFC XXXX</c>
</texttable>

<t>When evaluating a request for an assignment in this registry, the designated
expert should ensure that the method being registered has a clear,
interoperable definition and does not overlap with existing validation methods.
That is, it should not be possible for a client and server to follow the
same set of actions to fulfill two different validation methods.</t>

<t>The values “tls-sni-01” and “tls-sni-02” are reserved because they
were used in pre-RFC versions of this specification to denote
validation methods that were removed because they were found not to be secure in some cases.</t>

<t>Validation methods do not have to be compatible with ACME in order to be
registered.  For example, a CA might wish to register a validation method in
order to support its use with the ACME extensions to CAA
<xref target="I-D.ietf-acme-caa"/>.</t>

<t>[[ RFC EDITOR: Please replace XXXX above with the RFC number assigned to this
document ]]</t>

</section>
</section>
</section>
<section anchor="security-considerations" title="Security Considerations">

<t>ACME is a protocol for managing certificates that attest to identifier/key
bindings.  Thus the foremost security goal of ACME is to ensure the integrity of
this process, i.e., to ensure that the bindings attested by certificates are
correct and that only authorized entities can manage certificates.  ACME
identifies clients by their account keys, so this overall goal breaks down into
two more precise goals:</t>

<t><list style="numbers">
  <t>Only an entity that controls an identifier can get an authorization for that
identifier</t>
  <t>Once authorized, an account key’s authorizations cannot be improperly
used by another account</t>
</list></t>

<t>In this section, we discuss the threat model that underlies ACME and the ways
that ACME achieves these security goals within that threat model.  We also
discuss the denial-of-service risks that ACME servers face, and a few other
miscellaneous considerations.</t>

<section anchor="threat-model" title="Threat Model">

<t>As a service on the Internet, ACME broadly exists within the Internet threat
model <xref target="RFC3552"/>.  In analyzing ACME, it is useful to think of an ACME server
interacting with other Internet hosts along two “channels”:</t>

<t><list style="symbols">
  <t>An ACME channel, over which the ACME HTTPS requests are exchanged</t>
  <t>A validation channel, over which the ACME server performs additional requests
to validate a client’s control of an identifier</t>
</list></t>

<figure title="Communications Channels Used by ACME"><artwork><![CDATA[
+------------+
|    ACME    |     ACME Channel
|   Client   |--------------------+
+------------+                    |
                                  V
                            +------------+
                            |    ACME    |
                            |   Server   |
                            +------------+
+------------+                    |
| Validation |<-------------------+
|   Server   |  Validation Channel
+------------+
]]></artwork></figure>

<t>In practice, the risks to these channels are not entirely separate, but they are
different in most cases.  Each channel, for example, uses a
different communications pattern: the ACME channel will comprise inbound HTTPS
connections to the ACME server and the validation channel outbound HTTP or DNS
requests.</t>

<t>Broadly speaking, ACME aims to be secure against active and passive attackers on
any individual channel.  Some vulnerabilities arise (noted below) when an
attacker can exploit both the ACME channel and one of the others.</t>

<t>On the ACME channel, in addition to network layer attackers, we also need to
account for man-in-the-middle (MitM) attacks at the application layer, and for
abusive use of the protocol itself.  Protection against application layer MitM
addresses potential attackers such as Content Distribution Networks (CDNs) and
middleboxes with a TLS MitM function.  Preventing abusive use of ACME means
ensuring that an attacker with access to the validation channel can’t obtain
illegitimate authorization by acting as an ACME client (legitimately, in terms
of the protocol).</t>

<t>ACME does not protect against other types of abuse by a MitM on the ACME channel. 
For example, such an attacker could send a bogus “badSignatureAlgorithm”
error response to downgrade a client to the lowest-quality signature algorithm that
the server supports.  A MitM that is present on all connections (such as a 
CDN), can cause denial-of-service conditions in a variety of ways.</t>

</section>
<section anchor="integrity-of-authorizations" title="Integrity of Authorizations">

<t>ACME allows anyone to request challenges for an identifier by registering an
account key and sending a new-order request using that account key.  The
integrity of the authorization process thus depends on the identifier validation
challenges to ensure that the challenge can only be completed by someone who
both (1) holds the private key of the account key pair, and (2) controls the
identifier in question.</t>

<t>Validation responses need to be bound to an account key pair in order to avoid
situations where a MitM on ACME HTTPS requests can switch out a legitimate domain holder’s
account key for one of his choosing.  Such MitMs can arise, for
example, if a CA uses a CDN or third-party reverse proxy in front of
its ACME interface.  An attack by such an MitM could have the
following form:</t>

<t><list style="symbols">
  <t>Legitimate domain holder registers account key pair A</t>
  <t>MitM registers account key pair B</t>
  <t>Legitimate domain holder sends a new-order request signed using account key A</t>
  <t>MitM suppresses the legitimate request but sends the same request signed
using account key B</t>
  <t>ACME server issues challenges and MitM forwards them to the legitimate domain
holder</t>
  <t>Legitimate domain holder provisions the validation response</t>
  <t>ACME server performs validation query and sees the response provisioned by the
legitimate domain holder</t>
  <t>Because the challenges were issued in response to a message signed account key
B, the ACME server grants authorization to account key B (the MitM) instead of
account key A (the legitimate domain holder)</t>
</list></t>

<figure title="Man-in-the-Middle Attack Exploiting a Validation Method without
Account Key Binding"><artwork><![CDATA[
Domain                                         ACME
Holder                  MitM                  Server  
  |                      |                      |
  | newAccount(A)        |                      |
  |--------------------->|--------------------->|
  |                      |                      |
  |                      | newAccount(B)        |
  |                      |--------------------->|
  | newOrder(domain, A)  |                      | 
  |--------------------->|                      |
  |                      | newOrder(domain, B)  | 
  |                      |--------------------->|
  |                      |                      |
  |   authz, challenges  |   authz, challenges  |
  |<---------------------|<---------------------|
  |                      |                      |
  | response(chall, A)   | response(chall, B)   |
  |--------------------->|--------------------->|
  |                      |                      |
  |  validation request  |                      |
  |<--------------------------------------------|
  |                      |                      |
  | validation response  |                      |
  |-------------------------------------------->|
  |                      |                      |
  |                      |                      | Considers challenge
  |                      |                      | fulfilled by B.
  |                      |                      |
]]></artwork></figure>

<t>All of the challenges defined in this document have a binding between the account private key and
the validation query made by the server, via the key authorization. The key
authorization reflects the account public key and is provided to the server in
the validation response over the validation channel.</t>

<t>The association of challenges to identifiers is typically done by requiring the
client to perform some action that only someone who effectively controls the
identifier can perform.  For the challenges in this document, the actions are:</t>

<t><list style="symbols">
  <t>HTTP: Provision files under .well-known on a web server for the domain</t>
  <t>DNS: Provision DNS resource records for the domain</t>
</list></t>

<t>There are several ways that these assumptions can be violated, both by
misconfiguration and by attacks.  For example, on a web server that allows
non-administrative users to write to .well-known, any user can claim to own the
web server’s hostname by responding to an HTTP challenge.  Similarly, if
a server that can be used for ACME
validation is compromised by a malicious actor, then that malicious actor can
use that access to obtain certificates via ACME.</t>

<t>The use of hosting providers is a particular risk for ACME validation.  If the
owner of the domain has outsourced operation of DNS or web services to a hosting
provider, there is nothing that can be done against tampering by the hosting
provider.  As far as the outside world is concerned, the zone or website
provided by the hosting provider is the real thing.</t>

<t>More limited forms of delegation can also lead to an unintended party gaining
the ability to successfully complete a validation transaction.  For example,
suppose an ACME server follows HTTP redirects in HTTP validation and a
website operator provisions a catch-all redirect rule that redirects requests
for unknown resources to a different domain.  Then the target of the redirect
could use that to get a certificate through HTTP validation since the
validation path will not be known to the primary server.</t>

<t>The DNS is a common point of vulnerability for all of these challenges.  An
entity that can provision false DNS records for a domain can attack the DNS
challenge directly and can provision false A/AAAA records to direct the ACME
server to send its HTTP validation query to a remote server of the attacker’s
choosing.  There are a few different mitigations that ACME servers
can apply:</t>

<t><list style="symbols">
  <t>Always querying the DNS using a DNSSEC-validating resolver (enhancing
security for zones that are DNSSEC-enabled)</t>
  <t>Querying the DNS from multiple vantage points to address local attackers</t>
  <t>Applying mitigations against DNS off-path attackers, e.g., adding entropy to
requests <xref target="I-D.vixie-dnsext-dns0x20"/> or only using TCP</t>
</list></t>

<t>Given these considerations, the ACME validation process makes it impossible for
any attacker on the ACME channel or a passive attacker on the validation
channel to hijack the authorization process to authorize a key of the attacker’s
choice.</t>

<t>An attacker that can only see the ACME channel would need to convince the
validation server to provide a response that would authorize the attacker’s
account key, but this is prevented by binding the validation response to the
account key used to request challenges.  A passive attacker on the validation
channel can observe the correct validation response and even replay it, but that
response can only be used with the account key for which it was generated.</t>

<t>An active attacker on the validation channel can subvert the ACME process, by
performing normal ACME transactions and providing a validation response for his
own account key.  The risks due to hosting providers noted above are a
particular case.</t>

<t>Attackers can also exploit vulnerabilities in Internet routing
protocols to gain access to the validation channel (see, e.g.,
<xref target="RFC7132"/>).  In order to make such attacks more difficult, it is
RECOMMENDED that the server perform DNS queries and make HTTP
connections from multiple points in the network.  Since routing
attacks are often localized or dependent on the position of the
attacker, forcing the attacker to attack multiple points (the
server’s validation vantage points) or a specific point (the DNS /
HTTP server) makes it more difficult to subvert ACME validation
using attacks on routing.</t>

</section>
<section anchor="denial-of-service-considerations" title="Denial-of-Service Considerations">

<t>As a protocol run over HTTPS, standard considerations for TCP-based and
HTTP-based DoS mitigation also apply to ACME.</t>

<t>At the application layer, ACME requires the server to perform a few potentially
expensive operations.  Identifier validation transactions require the ACME
server to make outbound connections to potentially attacker-controlled servers,
and certificate issuance can require interactions with cryptographic hardware.</t>

<t>In addition, an attacker can also cause the ACME server to send validation
requests to a domain of its choosing by submitting authorization requests for
the victim domain.</t>

<t>All of these attacks can be mitigated by the application of appropriate rate
limits.  Issues closer to the front end, like POST body validation, can be
addressed using HTTP request limiting.  For validation and certificate requests,
there are other identifiers on which rate limits can be keyed.  For example, the
server might limit the rate at which any individual account key can issue
certificates or the rate at which validation can be requested within a given
subtree of the DNS.  And in order to prevent attackers from circumventing these
limits simply by minting new accounts, servers would need to limit the rate at
which accounts can be registered.</t>

</section>
<section anchor="server-side-request-forgery" title="Server-Side Request Forgery">

<t>Server-Side Request Forgery (SSRF) attacks can arise when an attacker can cause
a server to perform HTTP requests to an attacker-chosen URL.  In the ACME HTTP
challenge validation process, the ACME server performs an HTTP GET request to a
URL in which the attacker can choose the domain.  This request is made before
the server has verified that the client controls the domain, so any client can
cause a query to any domain.</t>

<t>Some ACME server implementations include information from the validation server’s
response (in order to facilitate debugging).  Such implementations enable an
attacker to extract this information from any web server that is accessible to
the ACME server, even if it is not accessible to the ACME client.
For example, the ACME server might be able to access servers behind
a firewall that would prevent access by the ACME client.</t>

<t>It might seem that the risk of SSRF through this channel is limited by the fact
that the attacker can only control the domain of the URL, not the path.
However, if the attacker first sets the domain to one they control, then they
can send the server an HTTP redirect (e.g., a 302 response) which will cause the
server to query an arbitrary URL.</t>

<t>In order to further limit the SSRF risk, ACME server operators should ensure
that validation queries can only be sent to servers on the public Internet, and
not, say, web services within the server operator’s internal network.  Since the
attacker could make requests to these public servers himself, he can’t gain
anything extra through an SSRF attack on ACME aside from a layer of
anonymization.</t>

</section>
<section anchor="ca-policy-considerations" title="CA Policy Considerations">

<t>The controls on issuance enabled by ACME are focused on validating that a
certificate applicant controls the identifier he claims.  Before issuing a
certificate, however, there are many other checks that a CA might need to
perform, for example:</t>

<t><list style="symbols">
  <t>Has the client agreed to a subscriber agreement?</t>
  <t>Is the claimed identifier syntactically valid?</t>
  <t>For domain names:
  <list style="symbols">
      <t>If the leftmost label is a ‘*’, then have the appropriate checks been
applied?</t>
      <t>Is the name on the Public Suffix List?</t>
      <t>Is the name a high-value name?</t>
      <t>Is the name a known phishing domain?</t>
    </list></t>
  <t>Is the key in the CSR sufficiently strong?</t>
  <t>Is the CSR signed with an acceptable algorithm?</t>
  <t>Has issuance been authorized or forbidden by a Certificate Authority
Authorization (CAA) record?  <xref target="RFC6844"/></t>
</list></t>

<t>CAs that use ACME to automate issuance will need to ensure that their servers
perform all necessary checks before issuing.</t>

<t>CAs using ACME to allow clients to agree to terms of service should keep in mind
that ACME clients can automate this agreement, possibly not involving a human
user.</t>

<t>ACME does not specify how the server constructs the URLs that it
uses to address resources.  If the server operator uses URLs that
are predictable to third parties, this can leak information about
what URLs exist on the server, since an attacker can probe for
whether POST-as-GET request to the URL returns “Not Found” or
“Unauthorized”.</t>

<t>For example, suppose that the CA uses highly structured URLs with
guessable fields:</t>

<t><list style="symbols">
  <t>Accounts: https://example.com/:accountID</t>
  <t>Orders: https://example.com/:accountID/:domainName</t>
  <t>Authorizations: https://example.com/:accountID/:domainName</t>
  <t>Certificates: https://example.com/:accountID/:domainName</t>
</list></t>

<t>Under that scheme, an attacker could probe for which domain names are
associated with which accounts, which may allow correlation of ownership
between domain names, if the CA does not otherwise permit it.</t>

<t>To avoid leaking these correlations, CAs SHOULD assign URLs with an
unpredictable component.
For example, a CA might assign URLs for each resource type from an
independent namespace, using unpredictable IDs for each resource:</t>

<t><list style="symbols">
  <t>Accounts: https://example.com/acct/:accountID</t>
  <t>Orders: https://example.com/order/:orderID</t>
  <t>Authorizations: https://example.com/authz/:authorizationID</t>
  <t>Certificates: https://example.com/cert/:certID</t>
</list></t>

<t>Such a scheme would leak only the type of resource, hiding the
additional correlations revealed in the example above.</t>

</section>
</section>
<section anchor="operational-considerations" title="Operational Considerations">

<t>There are certain factors that arise in operational reality that operators of
ACME-based CAs will need to keep in mind when configuring their services.
For example:</t>

<section anchor="key-selection" title="Key Selection">

<t>ACME relies on two different classes of key pair:</t>

<t><list style="symbols">
  <t>Account key pairs, which are used to authenticate account holders</t>
  <t>Certificate key pairs, which are used to sign and verify CSRs (and whose
public keys are included in certificates)</t>
</list></t>

<t>Compromise of the private key of an account key pair has more serious consequences than
compromise of a private key corresponding to a certificate.  While
the compromise of a certificate key pair allows the attacker to impersonate the
entities named in the certificate for the lifetime of the certificate, the
compromise of an account key pair allows the attacker to take full control of
the victim’s ACME account, and take any action that the legitimate
account holder could take within the scope of ACME:</t>

<t><list style="numbers">
  <t>Issuing certificates using existing authorizations</t>
  <t>Revoking existing certificates</t>
  <t>Accessing and changing account information (e.g., contacts)</t>
  <t>Changing the account key pair for the account, locking out the
legitimate account holder</t>
</list></t>

<t>For this reason, it is RECOMMENDED that each account key pair be
used only for authentication of a single ACME account.  For example,
the public key of an account key pair MUST NOT be included in a
certificate.  If an ACME client receives a request from a user for
account creation or key roll-over using an account key that the
client knows to be used elsewhere, then the client MUST return an
error.  Clients MUST generate a fresh account key for every account
creation or roll-over operation.  Note that given the requirements of
<xref target="finding-an-account-url-given-a-key"/>, servers will not create
accounts with reused keys anyway.</t>

<t>ACME clients and servers MUST verify that a CSR submitted in a finalize request does not contain a
public key for any known account key pair.  In particular, when a server
receives a finalize request, it MUST verify that the public key in a CSR is not
the same as the public key of the account key pair used to authenticate that
request.  This assures that vulnerabilities in the protocols with which the
certificate is used (e.g., signing oracles in TLS <xref target="JSS15"></xref>) do not result in 
compromise of the ACME account. Because ACME accounts are uniquely identified by
their account key pair (see <xref target="finding-an-account-url-given-a-key"/>) the server
MUST not allow account key pair reuse across multiple accounts.</t>

</section>
<section anchor="dns-security" title="DNS security">

<t>As noted above, DNS forgery attacks against the ACME server can result in the
server making incorrect decisions about domain control and thus mis-issuing
certificates. Servers SHOULD perform DNS queries over TCP, which provides better
resistance to some forgery attacks than DNS over UDP.</t>

<t>An ACME-based CA will often need to make DNS queries, e.g., to validate control
of DNS names.  Because the security of such validations ultimately depends on
the authenticity of DNS data, every possible precaution should be taken to
secure DNS queries done by the CA. It is therefore RECOMMENDED that ACME-based
CAs make all DNS queries via DNSSEC-validating stub or recursive resolvers. This
provides additional protection to domains which choose to make use of DNSSEC.</t>

<t>An ACME-based CA must use only a resolver if it trusts the resolver and every
component of the network route by which it is accessed. It is therefore
RECOMMENDED that ACME-based CAs operate their own DNSSEC-validating resolvers
within their trusted network and use these resolvers both for both CAA record
lookups and all record lookups in furtherance of a challenge scheme (A, AAAA,
TXT, etc.).</t>

</section>
<section anchor="token-entropy" title="Token Entropy">

<t>The http-01 and dns-01 validation methods mandate the usage of
a random token value to uniquely identify the challenge. The value of the token
is required to contain at least 128 bits of entropy for the following security
properties. First, the ACME client should not be able to influence the ACME
server’s choice of token as this may allow an attacker to reuse a domain owner’s
previous challenge responses for a new validation request. Secondly, the entropy
requirement makes it more difficult for ACME clients to implement a “naive”
validation server that automatically replies to challenges without being 
configured per-challenge.</t>

</section>
<section anchor="malformed-certificate-chains" title="Malformed Certificate Chains">

<t>ACME provides certificate chains in the widely-used format known colloquially
as PEM (though it may diverge from the actual Privacy Enhanced Mail
specifications <xref target="RFC1421"/>, as noted in <xref target="RFC7468"/>). Some current software
will allow the configuration of a private key and a certificate in one PEM
file, by concatenating the textual encodings of the two objects. In the context
of ACME, such software might be vulnerable to “key replacement” attacks. A
malicious ACME server could cause a client to use a private key of its choosing
by including the key in the PEM file returned in response to a query for a
certificate URL.</t>

<t>When processing a file of type “application/pem-certificate-chain”, a client
SHOULD verify that the file contains only encoded certificates.  If anything
other than a certificate is found (i.e., if the string “-----BEGIN” is ever
followed by anything other than “CERTIFICATE”), then the client MUST reject the
file as invalid.</t>

</section>
</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>In addition to the editors listed on the front page, this document has benefited
from contributions from a broad set of contributors, all the way back to its
inception.</t>

<t><list style="symbols">
  <t>Andrew Ayer, SSLMate</t>
  <t>Karthik Bhargavan, INRIA</t>
  <t>Peter Eckersley, EFF</t>
  <t>Alex Halderman, University of Michigan</t>
  <t>Sophie Herold, Hemio</t>
  <t>Eric Rescorla, Mozilla</t>
  <t>Seth Schoen, EFF</t>
  <t>Martin Thomson, Mozilla</t>
  <t>Jakub Warmuz, University of Oxford</t>
</list></t>

<t>This document draws on many concepts established by Eric Rescorla’s “Automated
Certificate Issuance Protocol” draft.  Martin Thomson provided helpful guidance
in the use of HTTP.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>

<reference anchor="FIPS180-4" target="http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf">
  <front>
    <title>NIST FIPS 180-4, Secure Hash Standard</title>
    <author initials="National Institute of Standards and Technology, U.S." surname="Department of Commerce" fullname="NIST">
      <organization></organization>
    </author>
    <date year="2012" month="March"/>
  </front>
</reference>
<reference anchor="JSS15" target="https://dl.acm.org/citation.cfm?id=2813657">
  <front>
    <title>On the Security of TLS 1.3 and QUIC Against Weaknesses in PKCS#1 v1.5 Encryption</title>
    <author initials="J." surname="Somorovsky" fullname="Juraj Somorovsky">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="REST" target="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">
  <front>
    <title>Architectural Styles and the Design of Network-based Software Architectures</title>
    <author initials="R." surname="Fielding" fullname="Roy Thomas Fielding">
      <organization></organization>
    </author>
    <date year="2000"/>
  </front>
</reference>




<reference  anchor="RFC5280" target='https://www.rfc-editor.org/info/rfc5280'>
<front>
<title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
<author initials='D.' surname='Cooper' fullname='D. Cooper'><organization /></author>
<author initials='S.' surname='Santesson' fullname='S. Santesson'><organization /></author>
<author initials='S.' surname='Farrell' fullname='S. Farrell'><organization /></author>
<author initials='S.' surname='Boeyen' fullname='S. Boeyen'><organization /></author>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<author initials='W.' surname='Polk' fullname='W. Polk'><organization /></author>
<date year='2008' month='May' />
<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="RFC2986" target='https://www.rfc-editor.org/info/rfc2986'>
<front>
<title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
<author initials='M.' surname='Nystrom' fullname='M. Nystrom'><organization /></author>
<author initials='B.' surname='Kaliski' fullname='B. Kaliski'><organization /></author>
<date year='2000' month='November' />
<abstract><t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process.  The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='2986'/>
<seriesInfo name='DOI' value='10.17487/RFC2986'/>
</reference>



<reference  anchor="RFC5246" target='https://www.rfc-editor.org/info/rfc5246'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'><organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2008' month='August' />
<abstract><t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5246'/>
<seriesInfo name='DOI' value='10.17487/RFC5246'/>
</reference>



<reference  anchor="RFC2818" target='https://www.rfc-editor.org/info/rfc2818'>
<front>
<title>HTTP Over TLS</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2000' month='May' />
<abstract><t>This memo describes how to use Transport Layer Security (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Internet.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='2818'/>
<seriesInfo name='DOI' value='10.17487/RFC2818'/>
</reference>



<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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>



<reference  anchor="RFC7159" target='https://www.rfc-editor.org/info/rfc7159'>
<front>
<title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
<author initials='T.' surname='Bray' fullname='T. Bray' role='editor'><organization /></author>
<date year='2014' month='March' />
<abstract><t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format.  It was derived from the ECMAScript Programming Language Standard.  JSON defines a small set of formatting rules for the portable representation of structured data.</t><t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t></abstract>
</front>
<seriesInfo name='RFC' value='7159'/>
<seriesInfo name='DOI' value='10.17487/RFC7159'/>
</reference>



<reference  anchor="RFC3629" target='https://www.rfc-editor.org/info/rfc3629'>
<front>
<title>UTF-8, a transformation format of ISO 10646</title>
<author initials='F.' surname='Yergeau' fullname='F. Yergeau'><organization /></author>
<date year='2003' month='November' />
<abstract><t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems.  The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo.  UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values.  This memo obsoletes and replaces RFC 2279.</t></abstract>
</front>
<seriesInfo name='STD' value='63'/>
<seriesInfo name='RFC' value='3629'/>
<seriesInfo name='DOI' value='10.17487/RFC3629'/>
</reference>



<reference  anchor="RFC7515" target='https://www.rfc-editor.org/info/rfc7515'>
<front>
<title>JSON Web Signature (JWS)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='J.' surname='Bradley' fullname='J. Bradley'><organization /></author>
<author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /></author>
<date year='2015' month='May' />
<abstract><t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures.  Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification.  Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7515'/>
<seriesInfo name='DOI' value='10.17487/RFC7515'/>
</reference>



<reference  anchor="RFC7231" target='https://www.rfc-editor.org/info/rfc7231'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless \%application- level protocol for distributed, collaborative, hypertext information systems.  This document defines the semantics of HTTP/1.1 messages, as expressed by request methods, request header fields, response status codes, and response header fields, along with the payload of messages (metadata and body content) and mechanisms for content negotiation.</t></abstract>
</front>
<seriesInfo name='RFC' value='7231'/>
<seriesInfo name='DOI' value='10.17487/RFC7231'/>
</reference>



<reference  anchor="RFC4648" target='https://www.rfc-editor.org/info/rfc4648'>
<front>
<title>The Base16, Base32, and Base64 Data Encodings</title>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'><organization /></author>
<date year='2006' month='October' />
<abstract><t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes.  It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='4648'/>
<seriesInfo name='DOI' value='10.17487/RFC4648'/>
</reference>



<reference  anchor="RFC7797" target='https://www.rfc-editor.org/info/rfc7797'>
<front>
<title>JSON Web Signature (JWS) Unencoded Payload Option</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<date year='2016' month='February' />
<abstract><t>JSON Web Signature (JWS) represents the payload of a JWS as a base64url-encoded value and uses this value in the JWS Signature computation.  While this enables arbitrary payloads to be integrity protected, some have described use cases in which the base64url encoding is unnecessary and/or an impediment to adoption, especially when the payload is large and/or detached.  This specification defines a means of accommodating these use cases by defining an option to change the JWS Signing Input computation to not base64url- encode the payload.  This option is intended to broaden the set of use cases for which the use of JWS is a good fit.</t><t>This specification updates RFC 7519 by stating that JSON Web Tokens (JWTs) MUST NOT use the unencoded payload option defined by this specification.</t></abstract>
</front>
<seriesInfo name='RFC' value='7797'/>
<seriesInfo name='DOI' value='10.17487/RFC7797'/>
</reference>



<reference  anchor="RFC7518" target='https://www.rfc-editor.org/info/rfc7518'>
<front>
<title>JSON Web Algorithms (JWA)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications.  It defines several IANA registries for these identifiers.</t></abstract>
</front>
<seriesInfo name='RFC' value='7518'/>
<seriesInfo name='DOI' value='10.17487/RFC7518'/>
</reference>



<reference  anchor="RFC8037" target='https://www.rfc-editor.org/info/rfc8037'>
<front>
<title>CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JSON Object Signing and Encryption (JOSE)</title>
<author initials='I.' surname='Liusvaara' fullname='I. Liusvaara'><organization /></author>
<date year='2017' month='January' />
<abstract><t>This document defines how to use the Diffie-Hellman algorithms &quot;X25519&quot; and &quot;X448&quot; as well as the signature algorithms &quot;Ed25519&quot; and &quot;Ed448&quot; from the IRTF CFRG elliptic curves work in JSON Object Signing and Encryption (JOSE).</t></abstract>
</front>
<seriesInfo name='RFC' value='8037'/>
<seriesInfo name='DOI' value='10.17487/RFC8037'/>
</reference>



<reference  anchor="RFC3986" target='https://www.rfc-editor.org/info/rfc3986'>
<front>
<title>Uniform Resource Identifier (URI): Generic Syntax</title>
<author initials='T.' surname='Berners-Lee' fullname='T. Berners-Lee'><organization /></author>
<author initials='R.' surname='Fielding' fullname='R. Fielding'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<date year='2005' month='January' />
<abstract><t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='66'/>
<seriesInfo name='RFC' value='3986'/>
<seriesInfo name='DOI' value='10.17487/RFC3986'/>
</reference>



<reference  anchor="RFC5234" target='https://www.rfc-editor.org/info/rfc5234'>
<front>
<title>Augmented BNF for Syntax Specifications: ABNF</title>
<author initials='D.' surname='Crocker' fullname='D. Crocker' role='editor'><organization /></author>
<author initials='P.' surname='Overell' fullname='P. Overell'><organization /></author>
<date year='2008' month='January' />
<abstract><t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='68'/>
<seriesInfo name='RFC' value='5234'/>
<seriesInfo name='DOI' value='10.17487/RFC5234'/>
</reference>



<reference  anchor="RFC8288" target='https://www.rfc-editor.org/info/rfc8288'>
<front>
<title>Web Linking</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2017' month='October' />
<abstract><t>This specification defines a model for the relationships between resources on the Web (&quot;links&quot;) and the type of those relationships (&quot;link relation types&quot;).</t><t>It also defines the serialisation of such links in HTTP headers with the Link header field.</t></abstract>
</front>
<seriesInfo name='RFC' value='8288'/>
<seriesInfo name='DOI' value='10.17487/RFC8288'/>
</reference>



<reference  anchor="RFC7807" target='https://www.rfc-editor.org/info/rfc7807'>
<front>
<title>Problem Details for HTTP APIs</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='E.' surname='Wilde' fullname='E. Wilde'><organization /></author>
<date year='2016' month='March' />
<abstract><t>This document defines a &quot;problem detail&quot; as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t></abstract>
</front>
<seriesInfo name='RFC' value='7807'/>
<seriesInfo name='DOI' value='10.17487/RFC7807'/>
</reference>



<reference  anchor="RFC5988" target='https://www.rfc-editor.org/info/rfc5988'>
<front>
<title>Web Linking</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2010' month='October' />
<abstract><t>This document specifies relation types for Web links, and defines a registry for them.  It also defines the use of such links in HTTP headers with the Link header field.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5988'/>
<seriesInfo name='DOI' value='10.17487/RFC5988'/>
</reference>



<reference  anchor="RFC6844" target='https://www.rfc-editor.org/info/rfc6844'>
<front>
<title>DNS Certification Authority Authorization (CAA) Resource Record</title>
<author initials='P.' surname='Hallam-Baker' fullname='P. Hallam-Baker'><organization /></author>
<author initials='R.' surname='Stradling' fullname='R. Stradling'><organization /></author>
<date year='2013' month='January' />
<abstract><t>The Certification Authority Authorization (CAA) DNS Resource Record allows a DNS domain name holder to specify one or more Certification Authorities (CAs) authorized to issue certificates for that domain. CAA Resource Records allow a public Certification Authority to implement additional controls to reduce the risk of unintended certificate mis-issue.  This document defines the syntax of the CAA record and rules for processing CAA records by certificate issuers. [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6844'/>
<seriesInfo name='DOI' value='10.17487/RFC6844'/>
</reference>



<reference  anchor="RFC3339" target='https://www.rfc-editor.org/info/rfc3339'>
<front>
<title>Date and Time on the Internet: Timestamps</title>
<author initials='G.' surname='Klyne' fullname='G. Klyne'><organization /></author>
<author initials='C.' surname='Newman' fullname='C. Newman'><organization /></author>
<date year='2002' month='July' />
<abstract><t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t></abstract>
</front>
<seriesInfo name='RFC' value='3339'/>
<seriesInfo name='DOI' value='10.17487/RFC3339'/>
</reference>



<reference  anchor="RFC5890" target='https://www.rfc-editor.org/info/rfc5890'>
<front>
<title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
<author initials='J.' surname='Klensin' fullname='J. Klensin'><organization /></author>
<date year='2010' month='August' />
<abstract><t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version.  It describes the document collection and provides definitions and other material that are common to the set.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5890'/>
<seriesInfo name='DOI' value='10.17487/RFC5890'/>
</reference>



<reference  anchor="RFC6068" target='https://www.rfc-editor.org/info/rfc6068'>
<front>
<title>The 'mailto' URI Scheme</title>
<author initials='M.' surname='Duerst' fullname='M. Duerst'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<author initials='J.' surname='Zawinski' fullname='J. Zawinski'><organization /></author>
<date year='2010' month='October' />
<abstract><t>This document defines the format of Uniform Resource Identifiers (URIs) to identify resources that are reached using Internet mail. It adds better internationalization and compatibility with Internationalized Resource Identifiers (IRIs; RFC 3987) to the previous syntax of 'mailto' URIs (RFC 2368).  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6068'/>
<seriesInfo name='DOI' value='10.17487/RFC6068'/>
</reference>



<reference  anchor="RFC2985" target='https://www.rfc-editor.org/info/rfc2985'>
<front>
<title>PKCS #9: Selected Object Classes and Attribute Types Version 2.0</title>
<author initials='M.' surname='Nystrom' fullname='M. Nystrom'><organization /></author>
<author initials='B.' surname='Kaliski' fullname='B. Kaliski'><organization /></author>
<date year='2000' month='November' />
<abstract><t>This memo represents a republication of PKCS #9 v2.0 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process.  The body of this document, except for the security considerations section, is taken directly from that specification.  This memo provides information for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='2985'/>
<seriesInfo name='DOI' value='10.17487/RFC2985'/>
</reference>



<reference  anchor="RFC2585" target='https://www.rfc-editor.org/info/rfc2585'>
<front>
<title>Internet X.509 Public Key Infrastructure Operational Protocols: FTP and HTTP</title>
<author initials='R.' surname='Housley' fullname='R. Housley'><organization /></author>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'><organization /></author>
<date year='1999' month='May' />
<abstract><t>The protocol conventions described in this document satisfy some of the operational requirements of the Internet Public Key Infrastructure (PKI).  This document specifies the conventions for using the File Transfer Protocol (FTP) and the Hypertext Transfer Protocol (HTTP) to obtain certificates and certificate revocation lists (CRLs) from PKI repositories.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='2585'/>
<seriesInfo name='DOI' value='10.17487/RFC2585'/>
</reference>



<reference  anchor="RFC5751" target='https://www.rfc-editor.org/info/rfc5751'>
<front>
<title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.2 Message Specification</title>
<author initials='B.' surname='Ramsdell' fullname='B. Ramsdell'><organization /></author>
<author initials='S.' surname='Turner' fullname='S. Turner'><organization /></author>
<date year='2010' month='January' />
<abstract><t>This document defines Secure/Multipurpose Internet Mail Extensions (S/MIME) version 3.2.  S/MIME provides a consistent way to send and receive secure MIME data.  Digital signatures provide authentication, message integrity, and non-repudiation with proof of origin. Encryption provides data confidentiality.  Compression can be used to reduce data size.  This document obsoletes RFC 3851.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5751'/>
<seriesInfo name='DOI' value='10.17487/RFC5751'/>
</reference>



<reference  anchor="RFC8446" target='https://www.rfc-editor.org/info/rfc8446'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2018' month='August' />
<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>



<reference  anchor="RFC7638" target='https://www.rfc-editor.org/info/rfc7638'>
<front>
<title>JSON Web Key (JWK) Thumbprint</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /></author>
<date year='2015' month='September' />
<abstract><t>This specification defines a method for computing a hash value over a JSON Web Key (JWK).  It defines which fields in a JWK are used in the hash computation, the method of creating a canonical form for those fields, and how to convert the resulting Unicode string into a byte sequence to be hashed.  The resulting hash value can be used for identifying or selecting the key represented by the JWK that is the subject of the thumbprint.</t></abstract>
</front>
<seriesInfo name='RFC' value='7638'/>
<seriesInfo name='DOI' value='10.17487/RFC7638'/>
</reference>



<reference  anchor="RFC4086" target='https://www.rfc-editor.org/info/rfc4086'>
<front>
<title>Randomness Requirements for Security</title>
<author initials='D.' surname='Eastlake 3rd' fullname='D. Eastlake 3rd'><organization /></author>
<author initials='J.' surname='Schiller' fullname='J. Schiller'><organization /></author>
<author initials='S.' surname='Crocker' fullname='S. Crocker'><organization /></author>
<date year='2005' month='June' />
<abstract><t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts.  However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities.  The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t><t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult.  This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities.  It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications.  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='106'/>
<seriesInfo name='RFC' value='4086'/>
<seriesInfo name='DOI' value='10.17487/RFC4086'/>
</reference>



<reference  anchor="RFC6570" target='https://www.rfc-editor.org/info/rfc6570'>
<front>
<title>URI Template</title>
<author initials='J.' surname='Gregorio' fullname='J. Gregorio'><organization /></author>
<author initials='R.' surname='Fielding' fullname='R. Fielding'><organization /></author>
<author initials='M.' surname='Hadley' fullname='M. Hadley'><organization /></author>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='D.' surname='Orchard' fullname='D. Orchard'><organization /></author>
<date year='2012' month='March' />
<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>



<reference  anchor="RFC7468" target='https://www.rfc-editor.org/info/rfc7468'>
<front>
<title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
<author initials='S.' surname='Josefsson' fullname='S. Josefsson'><organization /></author>
<author initials='S.' surname='Leonard' fullname='S. Leonard'><organization /></author>
<date year='2015' month='April' />
<abstract><t>This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS).  The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed.  This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t></abstract>
</front>
<seriesInfo name='RFC' value='7468'/>
<seriesInfo name='DOI' value='10.17487/RFC7468'/>
</reference>



<reference  anchor="RFC8126" target='https://www.rfc-editor.org/info/rfc8126'>
<front>
<title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
<author initials='M.' surname='Cotton' fullname='M. Cotton'><organization /></author>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<author initials='T.' surname='Narten' fullname='T. Narten'><organization /></author>
<date year='2017' month='June' />
<abstract><t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t><t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t><t>This is the third edition of this document; it obsoletes RFC 5226.</t></abstract>
</front>
<seriesInfo name='BCP' value='26'/>
<seriesInfo name='RFC' value='8126'/>
<seriesInfo name='DOI' value='10.17487/RFC8126'/>
</reference>




    </references>

    <references title='Informative References'>

<reference anchor="CABFBR" target="https://cabforum.org/baseline-requirements-documents/">
  <front>
    <title>CA/Browser Forum Baseline Requirements</title>
    <author initials="." surname="CA/Browser Forum" fullname="CAB">
      <organization></organization>
    </author>
    <date year="2018" month="September"/>
  </front>
</reference>




<reference anchor="I-D.ietf-acme-ip">
<front>
<title>ACME IP Identifier Validation Extension</title>

<author initials='R' surname='Shoemaker' fullname='Roland Shoemaker'>
    <organization />
</author>

<date month='July' day='27' year='2018' />

<abstract><t>This document specifies identifiers and challenges required to enable the Automated Certificate Management Environment (ACME) to issue certificates for IP addresses.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-acme-ip-04' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-acme-ip-04.txt' />
</reference>



<reference anchor="I-D.ietf-acme-telephone">
<front>
<title>ACME Identifiers and Challenges for Telephone Numbers</title>

<author initials='J' surname='Peterson' fullname='Jon Peterson'>
    <organization />
</author>

<author initials='R' surname='Barnes' fullname='Richard Barnes'>
    <organization />
</author>

<date month='October' day='30' year='2017' />

<abstract><t>This document specifies identifiers and challenges required to enable the Automated Certificate Management Environment (ACME) to issue certificate for telephonoe numbers.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-acme-telephone-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-acme-telephone-01.txt' />
</reference>



<reference  anchor="RFC7525" target='https://www.rfc-editor.org/info/rfc7525'>
<front>
<title>Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
<author initials='Y.' surname='Sheffer' fullname='Y. Sheffer'><organization /></author>
<author initials='R.' surname='Holz' fullname='R. Holz'><organization /></author>
<author initials='P.' surname='Saint-Andre' fullname='P. Saint-Andre'><organization /></author>
<date year='2015' month='May' />
<abstract><t>Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) are widely used to protect data exchanged over application protocols such as HTTP, SMTP, IMAP, POP, SIP, and XMPP.  Over the last few years, several serious attacks on TLS have emerged, including attacks on its most commonly used cipher suites and their modes of operation.  This document provides recommendations for improving the security of deployed services that use TLS and DTLS. The recommendations are applicable to the majority of use cases.</t></abstract>
</front>
<seriesInfo name='BCP' value='195'/>
<seriesInfo name='RFC' value='7525'/>
<seriesInfo name='DOI' value='10.17487/RFC7525'/>
</reference>



<reference anchor="W3C.REC-cors-20140116"
           target='http://www.w3.org/TR/2014/REC-cors-20140116'>
<front>
<title>Cross-Origin Resource Sharing</title>

<author initials='A.' surname='Kesteren' fullname='Anne van Kesteren'>
    <organization />
</author>

<date month='January' day='16' year='2014' />
</front>

<seriesInfo name='World Wide Web Consortium Recommendation' value='REC-cors-20140116' />
<format type='HTML' target='http://www.w3.org/TR/2014/REC-cors-20140116' />
</reference>



<reference  anchor="RFC5785" target='https://www.rfc-editor.org/info/rfc5785'>
<front>
<title>Defining Well-Known Uniform Resource Identifiers (URIs)</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<author initials='E.' surname='Hammer-Lahav' fullname='E. Hammer-Lahav'><organization /></author>
<date year='2010' month='April' />
<abstract><t>This memo defines a path prefix for &quot;well-known locations&quot;, &quot;/.well-known/&quot;, in selected Uniform Resource Identifier (URI) schemes.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5785'/>
<seriesInfo name='DOI' value='10.17487/RFC5785'/>
</reference>



<reference  anchor="RFC3553" target='https://www.rfc-editor.org/info/rfc3553'>
<front>
<title>An IETF URN Sub-namespace for Registered Protocol Parameters</title>
<author initials='M.' surname='Mealling' fullname='M. Mealling'><organization /></author>
<author initials='L.' surname='Masinter' fullname='L. Masinter'><organization /></author>
<author initials='T.' surname='Hardie' fullname='T. Hardie'><organization /></author>
<author initials='G.' surname='Klyne' fullname='G. Klyne'><organization /></author>
<date year='2003' month='June' />
<abstract><t>This document describes a new sub-delegation for the 'ietf' URN namespace for registered protocol items.  The 'ietf' URN namespace is defined in RFC 2648 as a root for persistent URIs that refer to IETF- defined resources.  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='73'/>
<seriesInfo name='RFC' value='3553'/>
<seriesInfo name='DOI' value='10.17487/RFC3553'/>
</reference>



<reference anchor="I-D.ietf-acme-caa">
<front>
<title>CAA Record Extensions for Account URI and ACME Method Binding</title>

<author initials='H' surname='Landau' fullname='Hugo Landau'>
    <organization />
</author>

<date month='June' day='21' year='2018' />

<abstract><t>The CAA DNS record allows a domain to communicate issuance policy to CAs, but only allows a domain to define policy with CA-level granularity.  However, the CAA specification also provides facilities for extension to admit more granular, CA-specific policy.  This specification defines two such parameters, one allowing specific accounts of a CA to be identified by URI and one allowing specific methods of domain control validation as defined by the ACME protocol to be required.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-acme-caa-05' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-acme-caa-05.txt' />
</reference>



<reference  anchor="RFC3552" target='https://www.rfc-editor.org/info/rfc3552'>
<front>
<title>Guidelines for Writing RFC Text on Security Considerations</title>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<author initials='B.' surname='Korver' fullname='B. Korver'><organization /></author>
<date year='2003' month='July' />
<abstract><t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak.  This document provides guidelines to RFC authors on how to write a good Security Considerations section.   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='72'/>
<seriesInfo name='RFC' value='3552'/>
<seriesInfo name='DOI' value='10.17487/RFC3552'/>
</reference>



<reference anchor="I-D.vixie-dnsext-dns0x20">
<front>
<title>Use of Bit 0x20 in DNS Labels to Improve Transaction Identity</title>

<author initials='P' surname='Vixie' fullname='Paul Vixie'>
    <organization />
</author>

<author initials='D' surname='Dagon' fullname='David Dagon'>
    <organization />
</author>

<date month='March' day='18' year='2008' />

<abstract><t>The small (16-bit) size of the DNS transaction ID has made it a frequent target for forgery, with the unhappy result of many cache pollution vulnerabilities demonstrated throughout Internet history. Even with perfectly and unpredictably random transaction ID's, random and birthday attacks are still theoretically feasible.  This document describes a method by which an initiator can improve transaction identity using the 0x20 bit in DNS labels.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-vixie-dnsext-dns0x20-00' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-vixie-dnsext-dns0x20-00.txt' />
</reference>



<reference  anchor="RFC7132" target='https://www.rfc-editor.org/info/rfc7132'>
<front>
<title>Threat Model for BGP Path Security</title>
<author initials='S.' surname='Kent' fullname='S. Kent'><organization /></author>
<author initials='A.' surname='Chi' fullname='A. Chi'><organization /></author>
<date year='2014' month='February' />
<abstract><t>This document describes a threat model for the context in which External Border Gateway Protocol (EBGP) path security mechanisms will be developed.  The threat model includes an analysis of the Resource Public Key Infrastructure (RPKI) and focuses on the ability of an Autonomous System (AS) to verify the authenticity of the AS path info received in a BGP update.  We use the term &quot;PATHSEC&quot; to refer to any BGP path security technology that makes use of the RPKI.  PATHSEC will secure BGP, consistent with the inter-AS security focus of the RPKI.</t><t>The document characterizes classes of potential adversaries that are considered to be threats and examines classes of attacks that might be launched against PATHSEC.  It does not revisit attacks against unprotected BGP, as that topic has already been addressed in the BGP-4 standard.  It concludes with a brief discussion of residual vulnerabilities.</t></abstract>
</front>
<seriesInfo name='RFC' value='7132'/>
<seriesInfo name='DOI' value='10.17487/RFC7132'/>
</reference>



<reference  anchor="RFC1421" target='https://www.rfc-editor.org/info/rfc1421'>
<front>
<title>Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption and Authentication Procedures</title>
<author initials='J.' surname='Linn' fullname='J. Linn'><organization /></author>
<date year='1993' month='February' />
<abstract><t>This document defines message encryption and authentication procedures, in order to provide privacy-enhanced mail (PEM) services for electronic mail transfer in the Internet.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='1421'/>
<seriesInfo name='DOI' value='10.17487/RFC1421'/>
</reference>




    </references>



  </back>

<!-- ##markdown-source:
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

-->

</rfc>

