rfc8823xml2.original.xml | rfc8823.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<?rfc toc="yes"?> | ||||
<?rfc rfcedstyle="yes"?> | ||||
<?rfc subcompact="no"?> | ||||
<?rfc symrefs="yes"?> | ||||
<?rfc comments="yes" ?> | ||||
<?rfc inline="yes" ?> | ||||
<rfc ipr="trust200902" category="info" docName='draft-ietf-acme-email-smime-14'> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
-ietf-acme-email-smime-14" number="8823" obsoletes="" updates="" submissionType= | ||||
"IETF" category="info" consensus="true" xml:lang="en" tocInclude="true" symRefs= | ||||
"true" sortRefs="true" version="3"> | ||||
<!-- xml2rfc v2v3 conversion 3.5.0 --> | ||||
<front> | <front> | |||
<title abbrev="ACME for S/MIME"> | <title abbrev="ACME for S/MIME"> | |||
Extensions to Automatic Certificate Management Environment for end-user S/ MIME certificates | Extensions to Automatic Certificate Management Environment for End-User S/ MIME Certificates | |||
</title> | </title> | |||
<seriesInfo name="RFC" value="8823"/> | ||||
<author initials="A." surname="Melnikov" fullname="Alexey Melnikov"> | <author initials="A." surname="Melnikov" fullname="Alexey Melnikov"> | |||
<organization>Isode Ltd</organization> | <organization>Isode Ltd</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>14 Castle Mews</street> | <street>14 Castle Mews</street> | |||
<city>Hampton</city> | <city>Hampton, Middlesex</city> | |||
<region>Middlesex</region> | <code>TW12 2NP</code> | |||
<code>TW12 2NP</code> | <country>United Kingdom</country> | |||
<country>UK</country> | ||||
</postal> | </postal> | |||
<email>alexey.melnikov@isode.com</email> | <email>alexey.melnikov@isode.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year="2021" month="April" /> | ||||
<date year="2021" /> | ||||
<keyword>ACME</keyword> | <keyword>ACME</keyword> | |||
<keyword>S/MIME</keyword> | <keyword>S/MIME</keyword> | |||
<abstract> | <abstract> | |||
<t> | ||||
<t> | ||||
This document specifies identifiers and challenges required to enable | This document specifies identifiers and challenges required to enable | |||
the Automated Certificate Management Environment (ACME) to issue | the Automated Certificate Management Environment (ACME) to issue | |||
certificates for use by email users | certificates for use by email users | |||
that want to use S/MIME. | that want to use S/MIME. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section numbered="true" toc="default"> | ||||
<section title="Introduction"> | <name>Introduction</name> | |||
<t> | ||||
<t> | ACME <xref target="RFC8555" format="default"/> is a mechanism for automa | |||
ACME <xref target="RFC8555"/> is a mechanism for automating certificate | ting certificate | |||
management on the Internet. It enables administrative entities to | management on the Internet. It enables administrative entities to | |||
prove effective control over resources like domain names, and | prove effective control over resources like domain names, and it | |||
automates the process of generating and issuing certificates. | automates the process of generating and issuing certificates. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
This document describes an extension to ACME for use by S/MIME. | This document describes an extension to ACME for use by S/MIME. | |||
<xref target="smime"/> defines extensions for issuing end-user S/MIME <x | <xref target="smime" format="default"/> defines extensions for issuing e | |||
ref target="RFC8550"/> certificates. | nd-user S/MIME <xref target="RFC8550" format="default"/> certificates. | |||
</t> | </t> | |||
<t> | ||||
<t> | This document aims to support both:</t> | |||
This document aims to support both: | <ol spacing="normal" type="1"> | |||
<li>A Mail User Agent (MUA) that has a built-in ACME client that is aware | ||||
<list style='numbers'> | of the extension described in this document. (We will call such MUAs "ACM | |||
<t>A Mail User Agent (MUA) which has built-in ACME client which is a | E-email-aware".) | |||
ware of the extension described in this document. (We will call such MUAs "ACME- | Such an MUA can present a nice user interface to the user and automate ce | |||
email-aware".) | rtificate issuance.</li> | |||
Such MUA can present nice User Interface to the user and automate | <li>An MUA that is not ACME aware, with a separate ACME client implement | |||
certificate issuance.</t> | ed in a command-line tool or as a part of a website. While S/MIME certificate is | |||
suance is not going to | ||||
<t>A MUA which is not ACME aware, with a separate ACME client implem | be as painless as in the case of the ACME-email-aware MUA, the extra burd | |||
ented in a command line tool or as a part of a website. | en on a user is | |||
While S/MIME certificate issuance is not going to be as painless | going to be minimal.</li> | |||
as in the case of the ACME-email-aware MUA, | </ol> | |||
the extra burden on a user is going to be minimal.</t> | ||||
</list> | ||||
</t> | ||||
<!-- | ||||
<t> | ||||
</t> | ||||
--> | ||||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Conventions Used in This Document"> | <name>Conventions Used in This Document</name> <t> | |||
The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | ||||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
this document are to be interpreted as described in | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
<xref target="RFC2119"/>.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
be interpreted as | ||||
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | ||||
when, and only when, they appear in all capitals, as shown here. | ||||
</t> | ||||
</section> | </section> | |||
<section anchor="smime" numbered="true" toc="default"> | ||||
<section title="Use of ACME for issuing end-user S/MIME certificates" anchor | <name>Use of ACME for Issuing End-User S/MIME Certificates</name> | |||
="smime"> | ||||
<t> | <t> | |||
ACME <xref target="RFC8555"/> defines a "dns" Identifier Type that is used to verify that a particular entity | ACME <xref target="RFC8555" format="default"/> defines a "dns" identifier type that is used to verify that a particular entity | |||
has control over a domain or specific service associated with the domain. | has control over a domain or specific service associated with the domain. | |||
In order to be able to issue end-user S/MIME certificates, ACME needs a ne w Identifier Type that | In order to be able to issue end-user S/MIME certificates, ACME needs a ne w identifier type that | |||
proves ownership of an email address. | proves ownership of an email address. | |||
</t> | </t> | |||
<t> | <t> | |||
This document defines a new Identifier Type "email" which corresponds to a | This document defines a new identifier type, "email", which corresponds to | |||
n email address. | an email address. | |||
The address can be all ASCII <xref target="RFC5321"/> or internationalized | The address can be all ASCII <xref target="RFC5321" format="default"/> or | |||
<xref target="RFC6531"/>; | internationalized <xref target="RFC6531" format="default"/>; | |||
when an internationalized email address is used, the domain part can conta | when an internationalized email address is used, the domain part can conta | |||
in both U-labels and A-labels <xref target="RFC5890"/>. | in both U-labels and A-labels <xref target="RFC5890" format="default"/>. | |||
This can be used with S/MIME or other similar service that requires posses | This can be used with S/MIME or another similar service that requires poss | |||
sion of a certificate tied to an email address. | ession of a certificate tied to an email address. | |||
</t> | </t> | |||
<t> | <t> | |||
Any identifier of type "email" in a newOrder request MUST NOT have a wildc ard ("*") character in its value. | Any identifier of type "email" in a newOrder request <bcp14>MUST NOT</bcp1 4> have a wildcard ("*") character in its value. | |||
</t> | </t> | |||
<t> | <t> | |||
A new challenge type "email-reply-00" is used with "email" Identifier Type , | A new challenge type, "email-reply-00", is used with the "email" identifie r type, | |||
which provides proof that an ACME client has control over an email address . | which provides proof that an ACME client has control over an email address . | |||
</t> | </t> | |||
<!--///Alexey: Describe how the process described below is updated | ||||
if multiple email addresses are specified in a single newOrder request!--> | ||||
<t> | <t> | |||
The process of issing an S/MIME certificate works as follows. Note that th e ACME client can be a standalone | The process of issuing an S/MIME certificate works as follows. Note that t he ACME client can be a standalone | |||
application (if the MUA is not ACME-email-aware) or can be a component of the MUA. | application (if the MUA is not ACME-email-aware) or can be a component of the MUA. | |||
<list style='numbers'> | </t> | |||
<ol spacing="normal" type="1"> | ||||
<t>An end-user initiates issuance of an S/MIME certificate for one of | <li>An end user initiates issuance of an S/MIME certificate for one of th | |||
her email addresses. | eir email addresses. | |||
This might be done using email client UI, by running a command line to | This might be done by using an email client UI, by running a command-l | |||
ol, by | ine tool, by | |||
visiting a Certificate Authority web page, etc. | visiting a certificate authority web page, etc. | |||
<!--The following might not actually work: or by sending an email to a | This document doesn't prescribe a specific UI | |||
well known | ||||
Certificate Authority's email address--> This document doesn't prescri | ||||
be specific UI | ||||
used to initiate S/MIME certificate issuance or where the ACME client is located. | used to initiate S/MIME certificate issuance or where the ACME client is located. | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
The ACME-email-aware client component begins the certificate issuance process by sending a POST | The ACME-email-aware client component begins the certificate issuance process by sending a POST | |||
request to the server's newOrder resource, including the identifier of type "email". | request to the server's newOrder resource, including the identifier of type "email". | |||
See Section 7.4 of <xref target='RFC8555'/> for more details. | See <xref target="RFC8555" sectionFormat="of" section="7.4"/> for more | |||
</t> | details. | |||
</li> | ||||
<li> | ||||
<t> | <t> | |||
The ACME server<!--(run by the Certificate Authority or their authoriz ed third party)--> | The ACME server | |||
responds to the POST request, including an "authorizations" URL for th e requested email address. | responds to the POST request, including an "authorizations" URL for th e requested email address. | |||
The ACME client then retrieves information about the corresponding "em | The ACME client then retrieves information about the corresponding "em | |||
ail-reply-00" challenge | ail-reply-00" challenge, | |||
as specified in Section 7.5 of <xref target='RFC8555'/>. | as specified in <xref target="RFC8555" sectionFormat="of" section="7.5 | |||
"/>. | ||||
The "token" field of the corresponding challenge object (from the "cha llenges" array) | The "token" field of the corresponding challenge object (from the "cha llenges" array) | |||
contains token-part2. token-part2 should contain at least 128 bits of entropy. | contains token-part2. token-part2 should contain at least 128 bits of entropy. | |||
The "type" field of the challenge object is "email-reply-00". The chal lenge object | The "type" field of the challenge object is "email-reply-00". The chal lenge object | |||
<!--///Also say something about unique from email address per challeng e?--> | ||||
also contains the "from" field, with the email address that would be u sed in the From header field | also contains the "from" field, with the email address that would be u sed in the From header field | |||
of the "challenge" email message (see the next step). | of the "challenge" email message (see the next step). | |||
</t> | ||||
<list style="empty"> | <t>An example challenge object might look like this:</t> | |||
<sourcecode type=""><![CDATA[ | ||||
<t> | ||||
<figure><artwork> | ||||
An example Challenge object might look like this: | ||||
{ | { | |||
"type": "email-reply-00", | "type": "email-reply-00", | |||
"url": "https://example.com/acme/chall/ABprV_B7yEyA4f", | "url": "https://example.com/acme/chall/ABprV_B7yEyA4f", | |||
"from": "acme-challenge+2i211oi1204310@example.com", | "from": "acme-challenge+2i211oi1204310@example.com", | |||
"token": "DGyRejmCefe7v4NfDGDKfA" | "token": "DGyRejmCefe7v4NfDGDKfA" | |||
} | } | |||
</artwork></figure> | ]]></sourcecode> | |||
</t> | </li> | |||
<li> | ||||
</list> | After responding to the authorization request, the ACME server | |||
</t> | ||||
<t> | ||||
After responding to the authorization request the ACME server | ||||
generates another token and a "challenge" email message with the subje ct "ACME: <token-part1>", | generates another token and a "challenge" email message with the subje ct "ACME: <token-part1>", | |||
where <token-part1> is the base64url encoded <xref target="RFC46 | where <token-part1> is the base64url-encoded <xref target="RFC46 | |||
48"/> form of the token. | 48" format="default"/> form of the token. | |||
The ACME server MUST generate a fresh token for each S/MIME issuance r | The ACME server <bcp14>MUST</bcp14> generate a fresh token for each S/ | |||
equest (authorization request), | MIME issuance request (authorization request), | |||
and token-part1 MUST contain at least 128 bits of entropy. | and token-part1 <bcp14>MUST</bcp14> contain at least 128 bits of entro | |||
The "challenge" email message structure is described in more details i | py. | |||
n <xref target="acme-smime-challenge-email"/>. | The "challenge" email message structure is described in more details i | |||
</t> | n <xref target="acme-smime-challenge-email" format="default"/>. | |||
</li> | ||||
<t> | <li> | |||
The MUA retrieves and parses the "challenge" email message. | The MUA retrieves and parses the "challenge" email message. | |||
If the MUA is ACME-email-aware, it ignores any "challenge" email that is not expected, | If the MUA is ACME-email-aware, it ignores any "challenge" email that is not expected, | |||
e.g. if there is no ACME certificate issuance pending. | e.g., if there is no ACME certificate issuance pending. | |||
The ACME-email-aware MUA also ignores any "challenge" email that has t he Subject header field | The ACME-email-aware MUA also ignores any "challenge" email that has t he Subject header field | |||
which indicates that it is an email reply, e.g. a subject starting wit | that indicates that it is an email reply, e.g., a subject starting wit | |||
h the reply prefix "Re:". | h the reply prefix "Re:". | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
The ACME client concatenates "token-part1" (received over email) and " token-part2" | The ACME client concatenates "token-part1" (received over email) and " token-part2" | |||
(received over HTTPS <xref target="RFC2818"/>) to create the ACME "tok | (received over HTTPS <xref target="RFC2818" format="default"/>) to cre | |||
en", calculates | ate the ACME "token" and calculates | |||
keyAuthorization (as per Section 8.1 of <xref target="RFC8555"/>), | keyAuthorization (as per <xref target="RFC8555" sectionFormat="of" sec | |||
then returns the base64url encoded SHA-256 digest <xref target="FIPS18 | tion="8.1"/>). | |||
0-4"/> of the key authorization. | Then, it returns the base64url-encoded SHA-256 digest <xref target="RF | |||
The MUA returns the base64url encoded SHA-256 digest obtained from the | C6234" format="default"/> of the key authorization. | |||
ACME client | The MUA returns the base64url-encoded SHA-256 digest obtained from the | |||
ACME client | ||||
in the body of a "response" email message. The "response" email messag e structure | in the body of a "response" email message. The "response" email messag e structure | |||
is described in more details in <xref target="acme-smime-response-emai | is described in more details in <xref target="acme-smime-response-emai | |||
l"/>. | l" format="default"/>. | |||
If the MUA is ACME-email-aware, it MUST NOT respond to the same "chall | If the MUA is ACME-email-aware, it <bcp14>MUST NOT</bcp14> respond to | |||
enge" email more than once. | the same "challenge" email more than once. | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
Once the MUA sends the "response" email, the ACME client notifies the ACME server | Once the MUA sends the "response" email, the ACME client notifies the ACME server | |||
by POST to the challenge URL ("url" field). | by POST to the challenge URL ("url" field). | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
The ACME client can start polling the authorization URL | The ACME client can start polling the authorization URL | |||
(using POST-as-GET requests) to see if the ACME server received and va | (using POST-as-GET requests) to see if the ACME server received and va | |||
lidated the "response" email message. | lidated the "response" email message. (See <xref target="RFC8555" sectionFormat= | |||
(See Section 7.5.1 of <xref target="RFC8555"/> for more details.) | "of" section="7.5.1"/> for more details.) | |||
If the "status" field of the challenge switches to "valid", | If the "status" field of the challenge switches to "valid", | |||
then the ACME client can proceed with request finalization. | then the ACME client can proceed with request finalization. | |||
The Certificate Signing Request (CSR) MUST indicate the exact same | The Certificate Signing Request (CSR) <bcp14>MUST</bcp14> indicate the exact same | |||
set of requested identifiers as the initial newOrder request. | set of requested identifiers as the initial newOrder request. | |||
For an identifier of type "email", the PKCS#10 <xref target="RFC2986"/ | For an identifier of type "email", the PKCS#10 <xref target="RFC2986" | |||
> | format="default"/> | |||
CSR MUST contain the requested email address <!--either in the commonN | CSR <bcp14>MUST</bcp14> contain the requested email address in an exte | |||
ame | nsionRequest | |||
portion of the requested subject name, or--> in an extensionRequest | attribute <xref target="RFC2985" format="default"/> requesting a subje | |||
attribute <xref target="RFC2985"/> requesting a subjectAltName extensi | ctAltName extension. | |||
on. | The email address <bcp14>MUST</bcp14> also match the From header field | |||
Such email address MUST also match the From header field value of the | value of the "response" email message. | |||
"response" email message. | </li> | |||
</t> | <li> | |||
In order to request generation of signing-only or encryption-only S/MI | ||||
<t> | ME certificates | |||
In order to request generation of signing only or encryption only S/MI | ||||
ME certificates | ||||
(as opposed to requesting generation of S/MIME certificates suitable f or both), | (as opposed to requesting generation of S/MIME certificates suitable f or both), | |||
the CSR needs to include the key usage extension (see Section 4.4.2 of | the CSR needs to include the key usage extension (see <xref target="RF | |||
<xref target="RFC8550"/>. | C8550" sectionFormat="of" section="4.4.2"/>). | |||
This is described in more details in <xref target="acme-smime-sign-or- | This is described in more details in <xref target="acme-smime-sign-or- | |||
encrypt-only"/>. | encrypt-only" format="default"/>. | |||
</t> | </li> | |||
<li> | ||||
<t> | ||||
If a request to finalize an order is successful, the ACME server will | If a request to finalize an order is successful, the ACME server will | |||
return a 200 (OK) with an updated order object. | return a 200 (OK) with an updated order object. | |||
<!--///Add text about downloading the certificate?--> | If the certificate is issued successfully, i.e., if the order "status" | |||
If the certificate is issued successfully, i.e. if the order "status" | ||||
is "valid", then the ACME client can download the issued S/MIME certif icate | is "valid", then the ACME client can download the issued S/MIME certif icate | |||
from the URL specified in the "certificate" field. | from the URL specified in the "certificate" field. | |||
</t> | </li> | |||
</ol> | ||||
</list> | <section anchor="acme-smime-challenge-email" numbered="true" toc="default" | |||
</t> | > | |||
<name>ACME "Challenge" Email</name> | ||||
<!-- | ||||
On receiving a response, the server constructs and stores the key | ||||
authorization from the challenge "token" value and the current client | ||||
account key. | ||||
To validate a DNS challenge, the server performs the following steps: | ||||
1. Compute the SHA-256 digest [FIPS180-4] of the stored key | ||||
authorization | ||||
2. Query for TXT records for the validation domain name | ||||
3. Verify that the contents of one of the TXT records match the | ||||
digest value | ||||
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. | ||||
<!-- | ||||
<figure title="Figure 1"> | ||||
<preamble> | ||||
For example, if the ACME client were to respond to the "email-reply-00 | ||||
" challenge, | ||||
it would send the following request to the ACME server: | ||||
</preamble> | ||||
<artwork><![CDATA[ | ||||
POST /acme/authz/asdf/0 HTTP/1.1 | ||||
Host: example.com | ||||
Content-Type: application/jose+json | ||||
{ | ||||
"protected": base64url({ | ||||
"alg": "ES256", | ||||
"kid": "https://example.com/acme/acct/1", | ||||
"nonce": "Q_s3MWoqT05TrdkM2MTDcw", | ||||
"url": "https://example.com/acme/authz/asdf/0" | ||||
}), | ||||
"payload": base64url({ | ||||
"type": "email-reply-00", | ||||
"keyAuthorization": "IlirfxKKXA...vb29HhjjLPSggQiE" | ||||
}), | ||||
"signature": "7cbg5JO1Gf5YLjjF...SpkUfcdPai9uVYYU" | ||||
} | ||||
]]></artwork> | ||||
<postamble>Note that "..." in keyAuthorization and signature attributes | ||||
above denote omitted part of base64 data.</postamble> | ||||
</figure> | ||||
<section title="ACME challenge email" anchor="acme-smime-challenge-email"> | ||||
<t> | <t> | |||
A "challenge" email message MUST have the following structure: | A "challenge" email message <bcp14>MUST</bcp14> have the following str | |||
ucture: | ||||
<list style='numbers'> | ||||
<t> | ||||
The message Subject header field has the following syntax: "ACME: &l | ||||
t;token-part1>", | ||||
where the prefix "ACME:" is followed by folding white space (FWS, se | ||||
e <xref target='RFC5322'/>) | ||||
and then by <token-part1>, which is the base64url encoded firs | ||||
t part of the ACME token | ||||
that MUST be at least 128 bits long after decoding. | ||||
<!--Alternative to allow for arbitrary prefix, if needed: | ||||
The message Subject header field has the following syntax: "<pref | ||||
ix>ACME: <token-part1>", | ||||
where the optional prefix <prefix> contain any text (it SHOULD | ||||
be omitted), which is then | ||||
followed by the literal string "ACME:", which in turn is followed by | ||||
a folding white space (FWS, see <xref target='RFC5322'/>) | ||||
and then by <token-part1> is the base64url encoded first part | ||||
of the ACME token | ||||
that MUST be at least 128 bits long after decoding. | ||||
--> | ||||
Due to the recommended 78-octet line length limit | ||||
in <xref target='RFC5322'/>, the subject line can be folded, so whit | ||||
espaces (if any) within | ||||
the <token-part1> MUST be ignored. <xref target='RFC2231'/> en | ||||
coding of the message Subject header field MUST be supported, | ||||
and when used, only the "UTF-8" and "US-ASCII" charsets are allowed: | ||||
other charsets MUST NOT be used. US-ASCII charset SHOULD be used. | ||||
</t> | ||||
</t> | ||||
<ol spacing="normal" type="1"> | ||||
<li> | ||||
The Subject header field has the following syntax: "ACME: <token- | ||||
part1>", | ||||
where the prefix "ACME:" is followed by folding white space (FWS; se | ||||
e <xref target="RFC5322" format="default"/>) | ||||
and then by <token-part1>, which is the base64url-encoded firs | ||||
t part of the ACME token | ||||
that <bcp14>MUST</bcp14> be at least 128 bits long after decoding. | ||||
Due to the recommended 78-octet line-length limit | ||||
in <xref target="RFC5322" format="default"/>, the subject line can b | ||||
e folded, so white spaces (if any) within | ||||
the <token-part1> <bcp14>MUST</bcp14> be ignored. <xref target | ||||
="RFC2231" format="default"/> encoding of the Subject header field <bcp14>MUST</ | ||||
bcp14> be supported, | ||||
and, when used, only the "UTF-8" and "US-ASCII" charsets are allowed | ||||
; other charsets <bcp14>MUST NOT</bcp14> be used. The US-ASCII charset <bcp14>SH | ||||
OULD</bcp14> be used. | ||||
</li> | ||||
<li> | ||||
The From header field <bcp14>MUST</bcp14> be the same email address | ||||
as specified in the "from" field of the challenge object. | ||||
</li> | ||||
<li> | ||||
The To header field <bcp14>MUST</bcp14> be the email address of the | ||||
entity that requested the S/MIME certificate to be generated.</li> | ||||
<li>The message <bcp14>MAY</bcp14> contain a Reply-To and/or CC header | ||||
field.</li> | ||||
<li> | ||||
The message <bcp14>MUST</bcp14> include the Auto-Submitted header fi | ||||
eld with the value "auto-generated" <xref target="RFC3834" format="default"/>. | ||||
To aid in debugging (and, for some implementations, to make automate | ||||
d processing easier), the Auto-Submitted header field <bcp14>SHOULD</bcp14> incl | ||||
ude the "type=acme" parameter. | ||||
It <bcp14>MAY</bcp14> include other optional parameters, as allowed | ||||
by the syntax of the Auto-Submitted header field.</li> | ||||
<li> | ||||
<t> | <t> | |||
The From header field MUST be the same email address as specified in | In order to prove authenticity of a challenge message, it <bcp14>MUS | |||
the "from" field of the challange object. | T</bcp14> be signed using either DomainKeys Identified Mail (DKIM) <xref target= | |||
"RFC6376" format="default"/> | ||||
or S/MIME <xref target="RFC8551" format="default"/>. | ||||
</t> | </t> | |||
<ul spacing="normal"> | ||||
<t> | <li> | |||
The To header field MUST be the email address of the entity that req | If DKIM signing is used, the resulting DKIM-Signature header field | |||
uested the S/MIME certificate to be generated.</t> | <bcp14>MUST</bcp14> contain the "h=" tag that includes | |||
at least the From, Sender, Reply-To, To, CC, Subject, Date, In-Rep | ||||
<t>The message MAY contain a Reply-To and/or CC header fields.</t> | ly-To, References, | |||
Message-ID, Auto-Submitted, Content-Type, and Content-Transfer-Enc | ||||
<t> | oding header fields. | |||
The message MUST include the "Auto-Submitted: auto-generated" header | The DKIM-Signature header field's "h=" tag <bcp14>SHOULD</bcp14> a | |||
field <xref target="RFC3834"/>. | lso include the | |||
To aid in debugging (and in for some implementations to make automat | Resent-Date, Resent-From, Resent-To, Resent-Cc, List-Id, List-Help | |||
ed processing easier) the "Auto-Submitted" header field SHOULD include the "type | , List-Unsubscribe, | |||
=acme" parameter. | List-Subscribe, List-Post, List-Owner, List-Archive, and List-Unsu | |||
It MAY include other optional parameters as allowed by the syntax of | bscribe-Post header fields. | |||
the Auto-Submitted header field.</t> | The domain from the "d=" tag of the DKIM-Signature header field <b | |||
cp14>MUST</bcp14> be the same as the domain from | ||||
<t> | the From header field of the "challenge" email. | |||
In order to prove authenticity of a challenge message, it MUST be si | </li> | |||
gned using either DKIM <xref target="RFC6376"/> | <li> | |||
or S/MIME <xref target="RFC8551"/>. | If S/MIME signing is used, the certificate corresponding to the si | |||
<!--Alexey: James suggested that PGP/MIME can also be used here. Thi | gner <bcp14>MUST</bcp14> have an rfc822Name subjectAltName extension | |||
s might be introduced in a later version, | ||||
but for simplicity there are only 2 options right now.--> | ||||
<list style='bullets'> | ||||
<t> | ||||
If DKIM signing is used, the resulting DKIM-Signature header field | ||||
MUST contain the "h=" tag that includes | ||||
at least "From", "Sender", "Reply-To", "To", "CC", "Subject", "Dat | ||||
e", "In-Reply-To", "References", | ||||
"Message-ID", "Auto-Submitted", "Content-Type", and "Content-Trans | ||||
fer-Encoding" header fields. | ||||
The DKIM-Signature header field's "h=" tag SHOULD also include | ||||
"Resent-Date", "Resent-From", "Resent-To", "Resent-Cc", "List-Id", | ||||
"List-Help", "List-Unsubscribe", | ||||
"List-Subscribe", "List-Post", "List-Owner", "List-Archive" and "L | ||||
ist-Unsubscribe-Post" header fields. | ||||
<!--The following is basically strict identifier alignment for DKI | ||||
M from the DMARC spec:--> | ||||
The domain from the "d=" tag of DKIM-Signature header field MUST b | ||||
e the same as the domain from | ||||
the From header field of the "challenge" email<!--RFC5322.From dom | ||||
ain-->. | ||||
</t> | ||||
<t> | ||||
<!--///Alexey: Say something about how TA for the S/MIME cert shou | ||||
ld relate to the TA used for issuing the end user S/MIME certificate.--> | ||||
If S/MIME signing is used, the certificate corresponding to the si | ||||
gner MUST have an rfc822Name subjectAltName extension | ||||
with the value equal to the From header field email address of the "challenge" email. | with the value equal to the From header field email address of the "challenge" email. | |||
</t> | </li> | |||
</ul> | ||||
</list> | </li> | |||
</t> | <li> | |||
<t> | ||||
The body of the challenge message is not used for automated processi ng, so it can be any media type. | The body of the challenge message is not used for automated processi ng, so it can be any media type. | |||
(However there are extra requirements on S/MIME signing, if used. Se | (However, there are extra requirements on S/MIME signing, if used. S | |||
e below.) | ee below.) | |||
Typically it is text/plain or text/html containing a human-readable | Typically, it is text/plain or text/html containing a human-readable | |||
explanation of the purpose of the message. | explanation of the purpose of the message. | |||
If S/MIME signing is used to prove authenticity of the challenge mes sage, | If S/MIME signing is used to prove authenticity of the challenge mes sage, | |||
then the multipart/signed or "application/pkcs7-mime; smime-type=sig ned-data;" media type should be used. | then the multipart/signed or "application/pkcs7-mime; smime-type=sig ned-data;" media type should be used. | |||
Either way, it MUST use S/MIME header protection. <!--/////Add a ref | Either way, it <bcp14>MUST</bcp14> use S/MIME header protection. | |||
in the future--> | </li> | |||
</t> | </ol> | |||
</list> | ||||
</t> | ||||
<t> | <t> | |||
An email client compliant with this specification that detects that a pa rticular "challenge" email | An email client compliant with this specification that detects that a pa rticular "challenge" email | |||
fails validation described above MUST ignore the challenge and thus will | fails the validation described above <bcp14>MUST</bcp14> ignore the chal | |||
not generate any "response" email. | lenge and thus will not generate a "response" email. | |||
To aid in debugging such failed validations SHOULD be logged. | To aid in debugging, such failed validations <bcp14>SHOULD</bcp14> be lo | |||
gged. | ||||
</t> | </t> | |||
<t keepWithNext="true"> | ||||
<figure title="Figure 1"> | Here is an example of an ACME "challenge" email (note that, for simpli | |||
<preamble> | city, DKIM-related header fields are not included). | |||
An example ACME "challenge" email (note that for simplicity DKIM relat | </t> | |||
ed header fields are not included). | <figure> | |||
</preamble> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<artwork> | ||||
<![CDATA[ | ||||
Auto-Submitted: auto-generated; type=acme | Auto-Submitted: auto-generated; type=acme | |||
Date: Sat, 5 Dec 2020 10:08:55 +0100 | Date: Sat, 5 Dec 2020 10:08:55 +0100 | |||
Message-ID: <A2299BB.FF7788@example.org> | Message-ID: <A2299BB.FF7788@example.org> | |||
From: acme-generator@example.org | From: acme-generator@example.org | |||
To: alexey@example.com | To: alexey@example.com | |||
Subject: ACME: LgYemJLy3F1LDkiJrdIGbEzyFJyOyf6vBdyZ1TG3sME= | Subject: ACME: LgYemJLy3F1LDkiJrdIGbEzyFJyOyf6vBdyZ1TG3sME= | |||
Content-Type: text/plain | Content-Type: text/plain | |||
MIME-Version: 1.0 | MIME-Version: 1.0 | |||
This is an automatically generated ACME challenge for email address | This is an automatically generated ACME challenge for email address | |||
"alexey@example.com". If you haven't requested an S/MIME | "alexey@example.com". If you haven't requested an S/MIME | |||
certificate generation for this email address, be very afraid. | certificate generation for this email address, be very afraid. | |||
If you did request it, your email client might be able to process | If you did request it, your email client might be able to process | |||
this request automatically, or you might have to paste the first | this request automatically, or you might have to paste the first | |||
token part into an external program. | token part into an external program. | |||
]]></artwork> | ]]></artwork> | |||
<postamble></postamble> | </figure> | |||
</figure> | <t keepWithPrevious="true"/> | |||
</section> | </section> | |||
<section anchor="acme-smime-response-email" numbered="true" toc="default"> | ||||
<section title="ACME response email" anchor="acme-smime-response-email"> | <name>ACME "Response" Email</name> | |||
<t> | <t> | |||
A valid "response" email message MUST have the following structure: | A valid "response" email message <bcp14>MUST</bcp14> have the followin | |||
g structure: | ||||
<list style='numbers'> | ||||
<!--Original: | ||||
<t> | ||||
The message Subject header field has the following syntax: "<Repl | ||||
y-prefix> ACME: <token-part1>", | ||||
where <Reply-prefix> is typically the reply prefix "Re:" and | ||||
the string "ACME:" is preceded and followed by folding white space ( | ||||
FWS, see <xref target='RFC5322'/>) | ||||
and then by <token-part1>. <token-part1> is the base64ur | ||||
l encoded first part of the ACME token | ||||
(as received in the ACME challenge) that MUST be at least 128 bits l | ||||
ong after decoding. Due to recommended 78 octet line length limit | ||||
in <xref target='RFC5322'/>, the subject line can be folded, so whit | ||||
espaces (if any) within | ||||
the <token-part1> MUST be ignored. <xref target='RFC2231'/> en | ||||
coding of the Subject header field MUST be supported, | ||||
and when used, only the "UTF-8" and "US-ASCII" charsets are allowed: | ||||
other charsets MUST NOT be used. | ||||
When parsing subjects, ACME servers must decode <xref target='RFC223 | ||||
1'/> encoding (if any) and | ||||
then they can ignore any prefix before the "ACME:" label. | ||||
</t> | ||||
--> | ||||
<t> | </t> | |||
The message Subject header field is formed as a reply to the ACME "c | <ol spacing="normal" type="1"> | |||
hallenge" email | <li> | |||
(see <xref target="acme-smime-challenge-email"/>). | The Subject header field is formed as a reply to the ACME "challenge | |||
(see <xref target="acme-smime-challenge-email" format="default"/>). | ||||
Its syntax is the same as that of the challenge message except that it may be prefixed | Its syntax is the same as that of the challenge message except that it may be prefixed | |||
by a US-ASCII reply prefix (typically "Re:") and folding white | by a US-ASCII reply prefix (typically "Re:") and FWS (see <xref targ | |||
space (FWS, see <xref target="RFC5322"/>), as is normal in reply mes | et="RFC5322" format="default"/>), as is normal in reply messages. When | |||
sages. When | parsing the subject, ACME servers <bcp14>MUST</bcp14> decode <xref t | |||
parsing the subject, ACME servers MUST decode <xref target='RFC2231' | arget="RFC2231" format="default"/> encoding (if any), and | |||
/> encoding (if any) and | ||||
then they can ignore any prefix before the "ACME:" label. | then they can ignore any prefix before the "ACME:" label. | |||
</t> | </li> | |||
<li>The From header field contains the email address of the user that | ||||
<t>The From: header field contains the email address of the user tha | is requesting S/MIME certificate issuance.</li> | |||
t is requesting S/MIME certificate issuance.</t> | <li>The To header field of the response contains the value from the Re | |||
ply-To header field from the | ||||
<t>The To: header field of the response contains the value from the | challenge message (if set). Otherwise, it contains the value from the F | |||
Reply-To: header field from the challenge message (if set) | rom header field of the | |||
or from the From: header field of the challenge message otherwise.</ | challenge message.</li> | |||
t> | <li>The Cc header field is ignored if present in the "response" email | |||
message.</li> | ||||
<t>The Cc: header field is ignored if present in the "response" emai | <li>The In-Reply-To header field <bcp14>SHOULD</bcp14> be set to the M | |||
l message.</t> | essage-ID header field of the challenge message | |||
according to rules in <xref target="RFC5322" sectionFormat="of" sect | ||||
<t>The In-Reply-To: header field SHOULD be set to the Message-ID hea | ion="3.6.4"/>.</li> | |||
der field of the challenge message | <li>List-* header fields <xref target="RFC4021" format="default"/><xre | |||
according to rules in Section 3.6.4 of <xref target="RFC5322"/>.</t> | f target="RFC8058" format="default"/> <bcp14>MUST</bcp14> be absent (i.e., the r | |||
eply can't come from a mailing list).</li> | ||||
<t>List-* header fields <xref target="RFC4021"/><xref target="RFC805 | <li> | |||
8"/> MUST be absent (i.e., the reply can't come from a mailing list)</t> | <t>The media type of the "response" email message is either text/pla | |||
in or multipart/alternative <xref target="RFC2046" format="default"/>, containin | ||||
<!--Alexey: not needed, as the message might not be generated automa | g | |||
tically: | text/plain as one of the alternatives. (Note that the requirement to | |||
<t> | support multipart/alternative is to allow use of ACME-unaware MUAs, | |||
The message MAY include the "Auto-Submitted: auto-generated" header | which can't always generate pure text/plain, e.g., if they reply to | |||
field <xref target="RFC3834"/>. | a text/html). | |||
It MAY include optional parameters as allowed by syntax of Auto-Subm | ||||
itted header field.</t> | ||||
--> | ||||
<t> | ||||
<!--////Should we allow either new MIME type or text/plain?--> | ||||
The media type of the "response" email message is either text/plain | ||||
or multipart/alternative <xref target="RFC2046"/> containing | ||||
text/plain as one of the alternatives. (Note that the requirement to | ||||
support multipart/alternative is to allow use of ACME-unaware MUAs | ||||
which can't always generate pure text/plain, e.g. if they reply to a | ||||
text/html). | ||||
The text/plain body part (whether or not it is inside multipart/alte rnative) | The text/plain body part (whether or not it is inside multipart/alte rnative) | |||
MUST contain a block of lines starting with the line "-----BEGIN ACM | <bcp14>MUST</bcp14> contain a block of lines starting with the line | |||
E RESPONSE-----", followed by one | "-----BEGIN ACME RESPONSE-----", followed by one | |||
or more line containing the base64url-encoded SHA-256 digest <xref t | or more lines containing the base64url-encoded SHA-256 digest <xref | |||
arget="FIPS180-4"/> | target="RFC6234" format="default"/> | |||
of the key authorization, calculated from concatenated token-part1 ( received over email) | of the key authorization, calculated from concatenated token-part1 ( received over email) | |||
and token-part2 (received over HTTPS), as outlined in the 5th bullet in <xref target="smime"/>. | and token-part2 (received over HTTPS), as outlined in the 5th bullet in <xref target="smime" format="default"/>. | |||
(Note that each line of text/plain is terminated by CRLF. Bare LFs o r bare CRs are not allowed.) | (Note that each line of text/plain is terminated by CRLF. Bare LFs o r bare CRs are not allowed.) | |||
Due to historical line length limitations in email, line endings (CR LFs) | Due to historical line-length limitations in email, line endings (CR LFs) | |||
can be freely inserted in the middle of the encoded digest, | can be freely inserted in the middle of the encoded digest, | |||
so they MUST be ignored when processing it.) The final line of the e | so they <bcp14>MUST</bcp14> be ignored when processing it. The final | |||
ncoded digest | line of the encoded digest | |||
is followed by a line containing "-----END ACME RESPONSE-----". | is followed by a line containing:</t> | |||
Any text before and after this block is ignored. For example such te | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
xt might explain what | -----END ACME RESPONSE----- | |||
to do with it for ACME-unaware clients. | ]]></artwork> | |||
</t> | <t>Any text before and after this block is ignored. For example, suc | |||
h text might explain what | ||||
<t>There is no need to use any Content-Transfer-Enc | to do with it for ACME-unaware clients.</t> | |||
oding other than 7bit for the text/plain body part. | </li> | |||
Use of Quoted-Printable or base64 in a "response" email message is n | <li>There is no need to use any Content-Transfer-Encoding other than 7 | |||
ot necessary and should be avoided, | bit for the text/plain body part. | |||
Use of quoted-printable or base64 in a "response" email message is n | ||||
ot necessary and should be avoided, | ||||
though it is permitted. | though it is permitted. | |||
</t> | </li> | |||
<li> | ||||
<t> | In order to prove authenticity of a response message, it <bcp14>MUST | |||
<!--Can't use S/MIME signing here, as the whole point is to issue an | </bcp14> be DKIM <xref target="RFC6376" format="default"/> | |||
S/MIME certificate for the user.--> | signed. The resulting DKIM-Signature header field <bcp14>MUST</bcp14 | |||
In order to prove authenticity of a response message, it MUST be DKI | > contain the "h=" tag that includes | |||
M <xref target="RFC6376"/> | at least the From, Sender, Reply-To, To, CC, Subject, Date, In-Reply | |||
signed. The resulting DKIM-Signature header field MUST contain the " | -To, References, | |||
h=" tag that includes | Message-ID, Content-Type, and Content-Transfer-Encoding header field | |||
at least "From", "Sender", "Reply-To", "To", "CC", "Subject", "Date" | s. | |||
, "In-Reply-To", "References", | The DKIM-Signature header field's "h=" tag <bcp14>SHOULD</bcp14> als | |||
"Message-ID", "Content-Type" and "Content-Transfer-Encoding" header | o include the | |||
fields. | Resent-Date, Resent-From, Resent-To, Resent-Cc, List-Id, List-Help, | |||
<!--Should the following just be MUSTs as well? Does it make it the | List-Unsubscribe, | |||
list too long?--> | List-Subscribe, List-Post, List-Owner, List-Archive, and List-Unsubs | |||
The DKIM-Signature header field's "h=" tag SHOULD also include | cribe-Post header fields. | |||
"Resent-Date", "Resent-From", "Resent-To", "Resent-Cc", "List-Id", " | The domain from the "d=" tag of DKIM-Signature header field <bcp14>M | |||
List-Help", "List-Unsubscribe", | UST</bcp14> be the same as the domain from | |||
"List-Subscribe", "List-Post", "List-Owner", "List-Archive" and "Lis | the From header field of the "response" email. | |||
t-Unsubscribe-Post" header fields. | </li> | |||
The domain from the "d=" tag of DKIM-Signature header field MUST be | </ol> | |||
the same as the domain from | <t keepWithNext="true"> | |||
the From header field of the "response" email<!--RFC5322.From domain | Here is an example of an ACME "response" email (note that, for simplic | |||
-->. | ity, DKIM-related header fields are not included). | |||
</t> | ||||
</list> | ||||
</t> | </t> | |||
<figure> | ||||
<figure title="Figure 2"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
<preamble> | ||||
Example ACME "response" email (note that for simplicity DKIM related h | ||||
eader fields are not included). | ||||
</preamble> | ||||
<artwork> | ||||
<![CDATA[ | ||||
Date: Sat, 5 Dec 2020 12:01:45 +0100 | Date: Sat, 5 Dec 2020 12:01:45 +0100 | |||
Message-ID: <111-22222-3333333@example.com> | Message-ID: <111-22222-3333333@example.com> | |||
In-Reply-To: <A2299BB.FF7788@example.org> | In-Reply-To: <A2299BB.FF7788@example.org> | |||
From: alexey@example.com | From: alexey@example.com | |||
To: acme-generator@example.org | To: acme-generator@example.org | |||
Subject: Re: ACME: LgYemJLy3F1LDkiJrdIGbEzyFJyOyf6vBdyZ1TG3sME= | Subject: Re: ACME: LgYemJLy3F1LDkiJrdIGbEzyFJyOyf6vBdyZ1TG3sME= | |||
Content-Type: text/plain | Content-Type: text/plain | |||
MIME-Version: 1.0 | MIME-Version: 1.0 | |||
-----BEGIN ACME RESPONSE----- | -----BEGIN ACME RESPONSE----- | |||
LoqXcYV8q5ONbJQxbmR7SCTNo3tiAXDfowy | LoqXcYV8q5ONbJQxbmR7SCTNo3tiAXDfowy | |||
jxAjEuX0= | jxAjEuX0= | |||
-----END ACME RESPONSE----- | -----END ACME RESPONSE----- | |||
]]></artwork> | ]]></artwork> | |||
<postamble></postamble> | </figure> | |||
</figure> | <t keepWithPrevious="true"/> | |||
</section> | </section> | |||
<section anchor="acme-smime-sign-or-encrypt-only" numbered="true" toc="def | ||||
<section title="Generating encryption only or signing only S/MIME certific | ault"> | |||
ates" anchor="acme-smime-sign-or-encrypt-only"> | <name>Generating Encryption-Only or Signing-Only S/MIME Certificates</na | |||
me> | ||||
<t> | <t> | |||
ACME extensions specified in this document can be used to request sign | ACME extensions specified in this document can be used to request sign | |||
ing only or | ing-only or | |||
encryption only S/MIME certificates. | encryption-only S/MIME certificates. | |||
</t> | </t> | |||
<t> | ||||
<t> | In order to request signing-only S/MIME certificates, the CSR <bcp14>M | |||
In order to request signing only S/MIME certificate, the CSR MUST incl | UST</bcp14> include the key usage | |||
ude the key usage | ||||
extension with digitalSignature and/or nonRepudiation bits set and no other bits set. | extension with digitalSignature and/or nonRepudiation bits set and no other bits set. | |||
</t> | </t> | |||
<t> | ||||
<t> | In order to request encryption-only S/MIME certificates, the CSR <bcp1 | |||
<!--///What about dataEncipherment?--> | 4>MUST</bcp14> include the key usage | |||
In order to request encryption only S/MIME certificate, the CSR MUST i | ||||
nclude the key usage | ||||
extension with keyEncipherment or keyAgreement bits set and no other b its set. | extension with keyEncipherment or keyAgreement bits set and no other b its set. | |||
</t> | </t> | |||
<t> | ||||
<t> | ||||
Presence of both of the above sets of key usage bits in the CSR, | Presence of both of the above sets of key usage bits in the CSR, | |||
<!--///Is the following right?--> | as well as absence of the key usage extension in the CSR, | |||
as well as absence of key usage extension in the CSR, | signals to the ACME server to issue an S/MIME certificate suitable for | |||
signals to ACME server to issue an S/MIME certificate suitable for bot | both signing | |||
h signing | ||||
and encryption. | and encryption. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Internationalization Considerations"> | <name>Internationalization Considerations</name> | |||
<t> | <t> | |||
<xref target="RFC8616"/> updated/clarified use of DKIM with Internationali | <xref target="RFC8616" format="default"/> updated/clarified use of DKIM wi | |||
zed Email addresses <xref target="RFC6531"/>. | th internationalized email addresses <xref target="RFC6531" format="default"/>. | |||
Please consult RFC 8616 in regards to any changes that need to be implem | Please consult <xref target="RFC8616" format="default"/> in regards to a | |||
ented. | ny changes that need to be implemented. | |||
</t> | </t> | |||
<t> | <t> | |||
Use of non ASCII characters in left hand sides of Internationalized Emai | Use of non-ASCII characters in left-hand sides of internationalized emai | |||
l addresses requires putting | l addresses requires putting | |||
Internationalized Email Addresses in X.509 Certificates <xref target="RF | internationalized email addresses in X.509 certificates <xref target="RF | |||
C8398"/>. | C8398" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="IANA Considerations"> | <name>IANA Considerations</name> | |||
<section numbered="true" toc="default"> | ||||
<section title="ACME Identifier Type"> | <name>ACME Identifier Type</name> | |||
<t> | <t> | |||
IANA is requested to register a new Identifier type in the "ACME Identif | IANA has registered a new identifier type in the "ACME Identifier | |||
ier Types" registry | Types" registry defined in <xref target="RFC8555" sectionFormat="of" | |||
defined in Section 9.7.7 of <xref target="RFC8555"/> with Label "email" | section="9.7.7"/> with Label "email" and a Reference to this document, | |||
and a Reference to [RFCXXXX], | <xref target="RFC5321" format="default"/>, and <xref target="RFC6531" | |||
<xref target="RFC5321"/> and <xref target="RFC6531"/>. | format="default"/>. The new identifier type corresponds to an (all | |||
The new Identifier Type corresponds to an (all ASCII) email address <xre | ASCII) email address <xref target="RFC5321" format="default"/> or | |||
f target="RFC5321"/> | internationalized email addresses <xref target="RFC6531" | |||
or Internationalized Email addresses <xref target="RFC6531"/>. | format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="ACME Challenge Type"> | <name>ACME Challenge Type</name> | |||
<t> | <t> | |||
IANA is also requested to register a new entry in the "ACME Validation | IANA has registered a new entry in the "ACME Validation Methods" regis | |||
Methods" registry | try | |||
defined in Section 9.7.8 of <xref target="RFC8555"/>. | defined in <xref target="RFC8555" sectionFormat="of" section="9.7.8"/> | |||
. | ||||
This entry is as follows: | This entry is as follows: | |||
</t> | </t> | |||
<table align="center"> | ||||
<texttable> | <thead> | |||
<!-- | <tr> | |||
<preamble></preamble> | <th align="center">Label</th> | |||
--> | <th align="center">Identifier Type</th> | |||
<th align="center">ACME</th> | ||||
<ttcol align='center'>Label</ttcol> | <th align="center">Reference</th> | |||
<ttcol align='center'>Identifier Type</ttcol> | </tr> | |||
<ttcol align='center'>ACME</ttcol> | </thead> | |||
<ttcol align='center'>Reference</ttcol> | <tbody> | |||
<tr> | ||||
<c>email-reply-00</c> | <td align="center">email-reply-00</td> | |||
<c>email</c> | <td align="center">email</td> | |||
<c>Y</c> | <td align="center">Y</td> | |||
<c>[RFCXXXX]</c> | <td align="center">RFC 8823</td> | |||
</tr> | ||||
<!--<postamble></postamble>--> | </tbody> | |||
</texttable> | </table> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="seccons" numbered="true" toc="default"> | ||||
<section title="Security Considerations" anchor="seccons"> | <name>Security Considerations</name> | |||
<t> | <t> | |||
Please see Security Considerations of <xref target="RFC8555"/> for gener | Please see the Security Considerations section of <xref | |||
al security considerations | target="RFC8555" format="default"/> for general security | |||
related to use of ACME. This challenge/response protocol demonstrates th | considerations related to the use of ACME. This challenge/response | |||
at an entity that controls | protocol demonstrates that an entity that controls the private key | |||
the private key (corresponding to the public key in the certificate) als | (corresponding to the public key in the certificate) also controls the | |||
o controls the named email | named email account. The ACME server is confirming that the requested | |||
account. | email address belongs to the entity that requested the certificate, | |||
The ACME server is confirming that the requested email address | but this makes no claim to address correctness or fitness for purpose. | |||
belongs to the entity that requested the certificate, but this | If such claims are needed, they must be obtained by some other | |||
makes no claim to correctness or fitness-for-purpose of the | mechanism. | |||
address. It such claims are needed they must be obtained by | ||||
some other mechanism. | ||||
</t> | </t> | |||
<t> | <t> | |||
The security of the "email-reply-00" challenge type depends on the secur ity of the email system. | The security of the "email-reply-00" challenge type depends on the secur ity of the email system. | |||
A third party that can read and reply to user's email messages (by posse ssing a user's password | A third party that can read and reply to user's email messages (by posse ssing a user's password | |||
or a secret derived from it that can give read and reply access, such as | or a secret derived from it that can give read and reply access, such as | |||
"password equivalent" information; | "password equivalent" information, | |||
or by being given permissions to act on a user's behalf using email dele | or by being given permissions to act on a user's behalf using email dele | |||
gation feature common | gation features common | |||
in some email systems) can request S/MIME certificates using the protoco l specified in this document | in some email systems) can request S/MIME certificates using the protoco l specified in this document | |||
and is indistinguishable from the email account owner. | and is indistinguishable from the email account owner. | |||
This has several possible implications: | This has several possible implications: | |||
<list style='numbers'> | ||||
<t>an entity that compromised an email account would be able to reques | ||||
t S/MIME certificates | ||||
using the protocol specified in this document and such entity couldn't | ||||
be distinguished from | ||||
the legitimate email account owner (unless some external sources of in | ||||
formation are consulted);</t> | ||||
<t>for email addresses with legitimate shared access/control by multip | ||||
le users, any such user | ||||
would be able to request S/MIME certificates using the protocol specif | ||||
ied in this document | ||||
and such requests can't be attributed to a specific user without consu | ||||
lting external systems | ||||
(such as IMAP/SMTP access logs);</t> | ||||
<t>the protocol specified in this document is not suitable for use wit | ||||
h email addresses | ||||
associated with mailing lists <xref target="RFC5321"/>. While it is no | ||||
t always | ||||
possible to guarantee that a particular S/MIME certificate request is | ||||
not from a mailing list | ||||
address, prohibition on inclusion of List-* header fields helps Certif | ||||
icate Issuers | ||||
to handle most common cases.</t> | ||||
</list> | ||||
</t> | </t> | |||
<ol spacing="normal" type="1"> | ||||
<li>An entity that compromised an email account would be able to request | ||||
S/MIME certificates | ||||
using the protocol specified in this document, and such entity couldn' | ||||
t be distinguished from | ||||
the legitimate email account owner (unless some external sources of in | ||||
formation are consulted).</li> | ||||
<li>For email addresses with legitimate shared access/control by | ||||
multiple users, any such user would be able to request S/MIME | ||||
certificates using the protocol specified in this document; such | ||||
requests can't be attributed to a specific user without consulting | ||||
external systems (such as IMAP/SMTP access logs).</li> | ||||
<li>The protocol specified in this document is not suitable for use with | ||||
email addresses | ||||
associated with mailing lists <xref target="RFC5321" format="default"/ | ||||
>. While it is not always | ||||
possible to guarantee that a particular S/MIME certificate request is | ||||
not from a mailing list | ||||
address, prohibition on inclusion of List-* header fields helps certif | ||||
icate issuers | ||||
to handle most common cases.</li> | ||||
</ol> | ||||
<t> | <t> | |||
An email system in its turn depends on DNS. A third party that can manip ulate DNS MX records | An email system in its turn depends on DNS. A third party that can manip ulate DNS MX records | |||
for a domain might be able to redirect email and can get (at least tempo | for a domain might be able to redirect an email and can get (at least te | |||
rary) read and reply access to it. | mporary) read and reply access to it. | |||
Similar considerations apply to <!--SPF and -->DKIM TXT records in DNS. | Similar considerations apply to DKIM TXT records in DNS. | |||
Use of DNSSEC by email system administrators is recommended to avoid mak ing it easy to spoof | Use of DNSSEC by email system administrators is recommended to avoid mak ing it easy to spoof | |||
DNS records affecting email system. However use of DNSSEC is not ubiquit ous at the time of | DNS records affecting an email system. However, use of DNSSEC is not ubi quitous at the time of | |||
publishing of this document, so it is not required here. | publishing of this document, so it is not required here. | |||
Also, many existing systems that rely on verification of ownership of an | Also, many existing systems that rely on verification of ownership of an | |||
email address, | email address -- | |||
for example 2 factor authentication systems used by banks or traditional | for example, 2-factor authentication systems used by banks or traditiona | |||
certificate issuance | l certificate issuance | |||
systems send email messages to email addresses, expecting the owner to c | systems -- send email messages to email addresses, expecting the owner t | |||
lick on the link supplied | o click on the link supplied | |||
in them (or to reply to a message), without requiring use of DNSSEC. So the risk of not requiring | in them (or to reply to a message), without requiring use of DNSSEC. So the risk of not requiring | |||
DNSSEC is presumed acceptable in this document. | DNSSEC is presumed acceptable in this document. | |||
</t> | </t> | |||
<t> | <t> | |||
An ACME email challenge message can be forged by an attacker. | An ACME email challenge message can be forged by an attacker. | |||
As per requirements on an ACME-email-aware MUA specified in <xref target=" smime"/>, | As per requirements on an ACME-email-aware MUA specified in <xref target=" smime" format="default"/>, | |||
the MUA will not respond to requests it is not expecting. | the MUA will not respond to requests it is not expecting. | |||
<!--///Even if it does: | ||||
(Ben wrote:) The From: header field value of the forged message could, of | ||||
course, be forged, so this would be a potential backscatter vector, but I | ||||
don't think there would be much amplification per message, and probably the | ||||
client would only produce one "response" email and then try to poll the ACME | ||||
order, so there would only be one forgery possible per ACME request. | ||||
Even if the attacker causes the erroneous "response" email to go to | Even if the attacker causes the erroneous "response" email to go to | |||
an attacker-controlled email address, very little information is leaked -- | an attacker-controlled email address, very little information is leaked -- | |||
the SHA-256 hash of the key authorization, not the key | the SHA-256 hash of the key authorization would be leaked, not the key | |||
authorization itself, so no parts of the token or the the account key | authorization itself, so no parts of the token or the account key | |||
thumbprint are leaked. | thumbprint are leaked. | |||
</t> | </t> | |||
<t> | <t> | |||
An attacker that can read the "response" email has only one chance to gues s the | An attacker that can read the "response" email has only one chance to gues s the | |||
token-part2. Even if the attacker can guess it right, it still needs to kn ow | token-part2. Even if the attacker can guess it right, it still needs to kn ow | |||
the ACME account key to be able to make use of the intercepted SHA-256 has h of | the ACME account key to be able to make use of the intercepted SHA-256 has h of | |||
the key authorization. | the key authorization. | |||
</t> | </t> | |||
<t> | <t> | |||
Also see Security Considerations section of <xref target="RFC6376"/> for details on how DKIM depends | Also see the Security Considerations section of <xref target="RFC6376" f ormat="default"/> for details on how DKIM depends | |||
on the DNS and the respective vulnerabilities this dependence has. | on the DNS and the respective vulnerabilities this dependence has. | |||
</t> | </t> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references title="Normative References"> | <references> | |||
<!--<?rfc include="reference.RFC.2045"?>--> <!-- MIME, part 1 --> | <name>References</name> | |||
<?rfc include="reference.RFC.2046"?> <!-- MIME, part 2 --> | <references> | |||
<?rfc include="reference.RFC.2119"?> <!-- Keywords --> | <name>Normative References</name> | |||
<?rfc include="reference.RFC.2231"?> <!-- RFC 2231 parameter encoding --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<?rfc include="reference.RFC.2818"?> <!-- HTTPS --> | .2046.xml"/> | |||
<?rfc include="reference.RFC.2985"?> <!-- PKCS #9: Selected Object Classes | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
and Attribute Types Version 2.0 --> | .2119.xml"/> | |||
<?rfc include="reference.RFC.2986"?> <!-- PKCS #10: Certification Request | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
Syntax Specification --> | .2231.xml"/> | |||
<?rfc include="reference.RFC.3834"?> <!-- Auto-Submitted header field --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<?rfc include="reference.RFC.4648"?> <!-- base64url --> | .2818.xml"/> | |||
<?rfc include="reference.RFC.5321"?> <!-- SMTP --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<?rfc include="reference.RFC.5322"?> <!-- Email Format --> | .2985.xml"/> | |||
<?rfc include="reference.RFC.5890"?> <!-- IDNA --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<?rfc include="reference.RFC.6376"?> <!-- DKIM --> | .2986.xml"/> | |||
<?rfc include="reference.RFC.6531"?> <!-- Internationalized Email Addresse | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
s (SMTP Extension) --> | .3834.xml"/> | |||
<!--<?rfc include="reference.RFC.7208"?>--> <!-- SPF --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<!--<?rfc include="reference.RFC.7489"?>--> <!-- DMARC --> | .4648.xml"/> | |||
<?rfc include="reference.RFC.8398"?> <!-- Internationalized Email Addresse | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
s in X.509 Certificates --> | .5321.xml"/> | |||
<?rfc include="reference.RFC.8550"?> <!-- S/MIME Certificate Handling --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<?rfc include="reference.RFC.8551"?> <!-- S/MIME Message Format --> | .5322.xml"/> | |||
<?rfc include="reference.RFC.8555"?> <!-- ACME --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<?rfc include="reference.RFC.8616"?> <!-- Email Authentication for Interna | .5890.xml"/> | |||
tionalized Mail --> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
.6376.xml"/> | ||||
<!--Note for RFC Editor: you can use RFC 6234 reference here instead--> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<reference anchor="FIPS180-4" target="https://csrc.nist.gov/publications/d | .6531.xml"/> | |||
etail/fips/180/4/final"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<front> | .8174.xml"/> | |||
<title>Secure Hash Standard (SHS)</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<author> | .8398.xml"/> | |||
<organization>National Institute of Standards and Technology</organi | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
zation> | .8550.xml"/> | |||
</author> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<date month="August" year="2015"/> | .8551.xml"/> | |||
</front> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
<seriesInfo name="FIPS" value="PUB 180-4"/> | .8555.xml"/> | |||
</reference> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | |||
.8616.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6234.xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | ||||
FC.4021.xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8058.xml"/> | ||||
</references> | </references> | |||
<references title="Informative References"> | ||||
<?rfc include="reference.RFC.4021"?> <!-- Registration of Mail and MIME He | ||||
ader Fields --> | ||||
<?rfc include="reference.RFC.8058"?> <!-- Signaling One-Click Functionalit | ||||
y for List Email Headers --> | ||||
</references> | </references> | |||
<section numbered="false" toc="default"> | ||||
<section title="Acknowledgements"> | <name>Acknowledgements</name> | |||
<t>Thank you to <contact fullname="Andreas Schulze"/>, <contact fullname=" | ||||
<t>Thank you to Andreas Schulze, Gerd v. Egidy, James A. Baker, Ben Schwar | Gerd v. Egidy"/>, | |||
tz, | <contact fullname="James A. Baker"/>, <contact fullname="Ben Schwartz"/>, | |||
Peter Yee, Hilarie Orman, Michael Jenkins, Barry Leiba, Fraser Tweedale, | <contact fullname="Peter Yee"/>, <contact fullname="Hilarie Orman"/>, | |||
Daniel Kahn Gillmor and Benjamin Kaduk | <contact fullname="Michael Jenkins"/>, <contact fullname="Barry Leiba"/>, | |||
for suggestions, comments, and corrections on this document.</t> | <contact fullname="Fraser Tweedale"/>, <contact fullname="Daniel Kahn Gill | |||
mor"/>, and | ||||
<contact fullname="Benjamin Kaduk"/> for their suggestions, comments, and | ||||
corrections of this document.</t> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 109 change blocks. | ||||
714 lines changed or deleted | 512 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |