draft-ietf-lamps-rfc6844bis-06.txt | draft-ietf-lamps-rfc6844bis-07.txt | |||
---|---|---|---|---|
Network Working Group P. Hallam-Baker | Network Working Group P. Hallam-Baker | |||
Internet-Draft | Internet-Draft | |||
Obsoletes: 6844 (if approved) R. Stradling | Obsoletes: 6844 (if approved) R. Stradling | |||
Intended status: Standards Track Sectigo | Intended status: Standards Track Sectigo | |||
Expires: November 10, 2019 J. Hoffman-Andrews | Expires: December 1, 2019 J. Hoffman-Andrews | |||
Let's Encrypt | Let's Encrypt | |||
May 09, 2019 | May 30, 2019 | |||
DNS Certification Authority Authorization (CAA) Resource Record | DNS Certification Authority Authorization (CAA) Resource Record | |||
draft-ietf-lamps-rfc6844bis-06 | draft-ietf-lamps-rfc6844bis-07 | |||
Abstract | Abstract | |||
The Certification Authority Authorization (CAA) DNS Resource Record | The Certification Authority Authorization (CAA) DNS Resource Record | |||
allows a DNS domain name holder to specify one or more Certification | allows a DNS domain name holder to specify one or more Certification | |||
Authorities (CAs) authorized to issue certificates for that domain | Authorities (CAs) authorized to issue certificates for that domain | |||
name. CAA Resource Records allow a public Certification Authority to | name. CAA Resource Records allow a public Certification Authority to | |||
implement additional controls to reduce the risk of unintended | implement additional controls to reduce the risk of unintended | |||
certificate mis-issue. This document defines the syntax of the CAA | certificate mis-issue. This document defines the syntax of the CAA | |||
record and rules for processing CAA records by certificate issuers. | record and rules for processing CAA records by certificate issuers. | |||
skipping to change at page 1, line 41 ¶ | skipping to change at page 1, line 41 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on November 10, 2019. | This Internet-Draft will expire on December 1, 2019. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 4, line 36 ¶ | skipping to change at page 4, line 36 ¶ | |||
Domain Name: The label assigned to a node in the Domain Name System. | Domain Name: The label assigned to a node in the Domain Name System. | |||
Domain Name System (DNS): The Internet naming system specified in | Domain Name System (DNS): The Internet naming system specified in | |||
[RFC1034] and [RFC1035]. | [RFC1034] and [RFC1035]. | |||
DNS Security (DNSSEC): Extensions to the DNS that provide | DNS Security (DNSSEC): Extensions to the DNS that provide | |||
authentication services as specified in [RFC4033], [RFC4034], | authentication services as specified in [RFC4033], [RFC4034], | |||
[RFC4035], [RFC5155], and revisions. | [RFC4035], [RFC5155], and revisions. | |||
Fully-Qualified Domain Name: A Domain Name that includes the labels | Fully-Qualified Domain Name (FQDN): A Domain Name that includes the | |||
of all superior nodes in the Domain Name System. | labels of all superior nodes in the Domain Name System. | |||
Issuer: An entity that issues certificates. See [RFC5280]. | Issuer: An entity that issues certificates. See [RFC5280]. | |||
Property: The tag-value portion of a CAA Resource Record. | Property: The tag-value portion of a CAA Resource Record. | |||
Property Tag: The tag portion of a CAA Resource Record. | Property Tag: The tag portion of a CAA Resource Record. | |||
Property Value: The value portion of a CAA Resource Record. | Property Value: The value portion of a CAA Resource Record. | |||
Resource Record (RR): A particular entry in the DNS including the | Resource Record (RR): A particular entry in the DNS including the | |||
owner name, class, type, time to live, and data, as defined in | owner name, class, type, time to live, and data, as defined in | |||
[RFC1034] and [RFC2181]. | [RFC1034] and [RFC2181]. | |||
Resource Record Set (RRSet): A set of Resource Records of a | Resource Record Set (RRSet): A set of Resource Records of a | |||
particular owner name, class, and type. The time to live on all RRs | particular owner name, class, and type. The time to live on all RRs | |||
with an RRSet is always the same, but the data may be different among | within an RRSet is always the same, but the data may be different | |||
RRs in the RRSet. | among RRs in the RRSet. | |||
Relevant Resource Record Set (Relevant RRSet): A set of CAA Resource | Relevant Resource Record Set (Relevant RRSet): A set of CAA Resource | |||
Records resulting from applying the algorithm in Section 4 to a | Records resulting from applying the algorithm in Section 3 to a | |||
specific Domain Name or Wildcard Domain Name. | specific Fully-Qualified Domain Name or Wildcard Domain Name. | |||
Relying Party: A party that makes use of an application whose | Relying Party: A party that makes use of an application whose | |||
operation depends on use of a certificate for making a security | operation depends on use of a certificate for making a security | |||
decision. See [RFC5280]. | decision. See [RFC5280]. | |||
Wildcard Domain Name: A Domain Name consisting of a single asterisk | Wildcard Domain Name: A Domain Name consisting of a single asterisk | |||
character followed by a single full stop character ("*.") followed by | character followed by a single full stop character ("*.") followed by | |||
a Fully-Qualified Domain Name. | a Fully-Qualified Domain Name. | |||
3. Relevant Resource Record Set | 3. Relevant Resource Record Set | |||
Before issuing a certificate, a compliant CA MUST check for | Before issuing a certificate, a compliant CA MUST check for | |||
publication of a Relevant RRSet. If such an RRSet exists, a CA MUST | publication of a Relevant RRSet. If such an RRSet exists, a CA MUST | |||
NOT issue a certificate unless the CA determines that either (1) the | NOT issue a certificate unless the CA determines that either (1) the | |||
certificate request is consistent with the applicable CAA Resource | certificate request is consistent with the applicable CAA Resource | |||
Record set or (2) an exception specified in the relevant Certificate | Record set or (2) an exception specified in the relevant Certificate | |||
Policy or Certification Practices Statement applies. If the Relevant | Policy or Certification Practices Statement applies. If the Relevant | |||
RRSet for a Domain Name or Wildcard Domain Name contains no Property | RRSet for a Fully-Qualified Domain Name or Wildcard Domain Name | |||
Tags that restrict issuance (for instance, if it contains only iodef | contains no Property Tags that restrict issuance (for instance, if it | |||
Property Tags, or only Property Tags unrecognized by the CA), CAA | contains only iodef Property Tags, or only Property Tags unrecognized | |||
does not restrict issuance. | by the CA), CAA does not restrict issuance. | |||
A certificate request MAY specify more than one Domain Name and MAY | A certificate request MAY specify more than one Fully-Qualified | |||
specify Wildcard Domain Names. Issuers MUST verify authorization for | Domain Name and MAY specify Wildcard Domain Names. Issuers MUST | |||
all the Domain Names and Wildcard Domain Names specified in the | verify authorization for all the Fully-Qualified Domain Names and | |||
request. | Wildcard Domain Names specified in the request. | |||
The search for a CAA RRSet climbs the DNS name tree from the | The search for a CAA RRSet climbs the DNS name tree from the | |||
specified label up to but not including the DNS root '.' until a CAA | specified label up to but not including the DNS root '.' until a CAA | |||
RRSet is found. | RRSet is found. | |||
Given a request for a specific Domain Name X, or a request for a | Given a request for a specific Fully-Qualified Domain Name X, or a | |||
Wildcard Domain Name *.X, the Relevant Resource Record Set | request for a Wildcard Domain Name *.X, the Relevant Resource Record | |||
RelevantCAASet(X) is determined as follows: | Set RelevantCAASet(X) is determined as follows (in pseudocode): | |||
Let CAA(X) be the RRSet returned by performing a CAA record query for | Let CAA(X) be the RRSet returned by performing a CAA record query for | |||
the Domain Name X, according to the lookup algorithm specified in RFC | the Fully-Qualified Domain Name X, according to the lookup algorithm | |||
1034 section 4.3.2 (in particular chasing aliases). Let Parent(X) be | specified in RFC 1034 section 4.3.2 (in particular chasing aliases). | |||
the Domain Name produced by removing the leftmost label of X. | Let Parent(X) be the Fully-Qualified Domain Name produced by removing | |||
the leftmost label of X. | ||||
RelevantCAASet(domain): | RelevantCAASet(domain): | |||
for domain is not ".": | while domain is not ".": | |||
if CAA(domain) is not Empty: | if CAA(domain) is not Empty: | |||
return CAA(domain) | return CAA(domain) | |||
domain = Parent(domain) | domain = Parent(domain) | |||
return Empty | return Empty | |||
For example, processing CAA for the Domain Name "X.Y.Z" where there | For example, processing CAA for the Fully-Qualified Domain Name | |||
are no CAA records at any level in the tree RelevantCAASet would have | "X.Y.Z" where there are no CAA records at any level in the tree | |||
the following steps: | RelevantCAASet would have the following steps: | |||
CAA("X.Y.Z.") = Empty; domain = Parent("X.Y.Z.") = "Y.Z." | CAA("X.Y.Z.") = Empty; domain = Parent("X.Y.Z.") = "Y.Z." | |||
CAA("Y.Z.") = Empty; domain = Parent("Y.Z.") = "Z." | CAA("Y.Z.") = Empty; domain = Parent("Y.Z.") = "Z." | |||
CAA("Z.") = Empty; domain = Parent("Z.") = "." | CAA("Z.") = Empty; domain = Parent("Z.") = "." | |||
return Empty | return Empty | |||
Processing CAA for the Domain Name "A.B.C" where there is a CAA | Processing CAA for the Fully-Qualified Domain Name "A.B.C" where | |||
record "issue example.com" at "B.C" would terminate early upon | there is a CAA record "issue example.com" at "B.C" would terminate | |||
finding the CAA record: | early upon finding the CAA record: | |||
CAA("A.B.C.") = Empty; domain = Parent("A.B.C.") = "B.C." | CAA("A.B.C.") = Empty; domain = Parent("A.B.C.") = "B.C." | |||
CAA("B.C.") = "issue example.com" | CAA("B.C.") = "issue example.com" | |||
return "issue example.com" | return "issue example.com" | |||
4. Mechanism | 4. Mechanism | |||
4.1. Syntax | 4.1. Syntax | |||
A CAA Resource Record contains a single Property consisting of a tag- | A CAA Resource Record contains a single Property consisting of a tag- | |||
value pair. A Domain Name MAY have multiple CAA RRs associated with | value pair. A Fully-Qualified Domain Name MAY have multiple CAA RRs | |||
it and a given Property Tag MAY be specified more than once across | associated with it and a given Property Tag MAY be specified more | |||
those RRs. | than once across those RRs. | |||
The RDATA section for a CAA Resource Record contains one Property. A | The RDATA section for a CAA Resource Record contains one Property. A | |||
Property consists of the following: | Property consists of the following: | |||
+0-1-2-3-4-5-6-7-|0-1-2-3-4-5-6-7-| | +0-1-2-3-4-5-6-7-|0-1-2-3-4-5-6-7-| | |||
| Flags | Tag Length = n | | | Flags | Tag Length = n | | |||
+----------------|----------------+...+---------------+ | +----------------|----------------+...+---------------+ | |||
| Tag char 0 | Tag char 1 |...| Tag char n-1 | | | Tag char 0 | Tag char 1 |...| Tag char n-1 | | |||
+----------------|----------------+...+---------------+ | +----------------|----------------+...+---------------+ | |||
+----------------|----------------+.....+----------------+ | +----------------|----------------+.....+----------------+ | |||
skipping to change at page 7, line 11 ¶ | skipping to change at page 7, line 11 ¶ | |||
Where n is the length specified in the Tag length field and m is the | Where n is the length specified in the Tag length field and m is the | |||
remaining octets in the Value field. They are related by (m = d - n | remaining octets in the Value field. They are related by (m = d - n | |||
- 2) where d is the length of the RDATA section. | - 2) where d is the length of the RDATA section. | |||
The fields are defined as follows: | The fields are defined as follows: | |||
Flags: One octet containing the following field: | Flags: One octet containing the following field: | |||
Bit 0, Issuer Critical Flag: If the value is set to '1', the Property | Bit 0, Issuer Critical Flag: If the value is set to '1', the Property | |||
is critical. A Certification Authority MUST NOT issue certificates | is critical. A Certification Authority MUST NOT issue certificates | |||
for any Domain Name where the Relevant RRSet for that Domain Name | for any FQDN the Relevant RRSet for that FQDN contains a CAA critical | |||
contains a CAA critical Property for an unknown or unsupported | Property for an unknown or unsupported Property Tag. | |||
Property Tag. | ||||
Note that according to the conventions set out in [RFC1035], bit 0 is | Note that according to the conventions set out in [RFC1035], bit 0 is | |||
the Most Significant Bit and bit 7 is the Least Significant Bit. | the Most Significant Bit and bit 7 is the Least Significant Bit. | |||
Thus, the Flags value 1 means that bit 7 is set while a value of 128 | Thus, the Flags value 1 means that bit 7 is set while a value of 128 | |||
means that bit 0 is set according to this convention. | means that bit 0 is set according to this convention. | |||
All other bit positions are reserved for future use. | All other bit positions are reserved for future use. | |||
To ensure compatibility with future extensions to CAA, DNS records | To ensure compatibility with future extensions to CAA, DNS records | |||
compliant with this version of the CAA specification MUST clear (set | compliant with this version of the CAA specification MUST clear (set | |||
to "0") all reserved flags bits. Applications that interpret CAA | to "0") all reserved flags bits. Applications that interpret CAA | |||
records MUST ignore the value of all reserved flag bits. | records MUST ignore the value of all reserved flag bits. | |||
Tag Length: A single octet containing an unsigned integer specifying | Tag Length: A single octet containing an unsigned integer specifying | |||
the tag length in octets. The tag length MUST be at least 1 and | the tag length in octets. The tag length MUST be at least 1. | |||
SHOULD be no more than 15. | ||||
Tag: The Property identifier, a sequence of US-ASCII characters. | Tag: The Property identifier, a sequence of US-ASCII characters. | |||
Tags MAY contain US-ASCII characters 'a' through 'z', 'A' through | Tags MAY contain US-ASCII characters 'a' through 'z', 'A' through | |||
'Z', and the numbers 0 through 9. Tags SHOULD NOT contain any other | 'Z', and the numbers 0 through 9. Tags MUST NOT contain any other | |||
characters. Matching of tags is case insensitive. | characters. Matching of tags is case insensitive. | |||
Tags submitted for registration by IANA MUST NOT contain any | Tags submitted for registration by IANA MUST NOT contain any | |||
characters other than the (lowercase) US-ASCII characters 'a' through | characters other than the (lowercase) US-ASCII characters 'a' through | |||
'z' and the numbers 0 through 9. | 'z' and the numbers 0 through 9. | |||
Value: A sequence of octets representing the Property Value. | Value: A sequence of octets representing the Property Value. | |||
Property Values are encoded as binary values and MAY employ sub- | Property Values are encoded as binary values and MAY employ sub- | |||
formats. | formats. | |||
skipping to change at page 8, line 4 ¶ | skipping to change at page 7, line 51 ¶ | |||
formats. | formats. | |||
The length of the value field is specified implicitly as the | The length of the value field is specified implicitly as the | |||
remaining length of the enclosing RDATA section. | remaining length of the enclosing RDATA section. | |||
4.1.1. Canonical Presentation Format | 4.1.1. Canonical Presentation Format | |||
The canonical presentation format of the CAA record is: | The canonical presentation format of the CAA record is: | |||
CAA <flags> <tag> <value> | CAA <flags> <tag> <value> | |||
Where: | Where: | |||
Flags: Is an unsigned integer between 0 and 255. | Flags: Is an unsigned integer between 0 and 255. | |||
Tag: Is a non-zero sequence of US-ASCII letters and numbers in lower | Tag: Is a non-zero-length sequence of US-ASCII letters and numbers in | |||
case. | lower case. | |||
Value: The value field, expressed as a contiguous set of characters | Value: The value field, expressed as a contiguous set of characters | |||
without interior spaces, or as a quoted string. See the the | without interior spaces, or as a quoted string. See the <character- | |||
<character-string> format specified in [RFC1035], Section 5.1, but | string> format specified in [RFC1035], Section 5.1, but note that the | |||
note that the value field contains no length byte and is not limited | value field contains no length byte and is not limited to 255 | |||
to 255 characters. | characters. | |||
4.2. CAA issue Property | 4.2. CAA issue Property | |||
If the issue Property Tag is present in the Relevant RRSet for a | If the issue Property Tag is present in the Relevant RRSet for a | |||
Domain Name, it is a request that Issuers | Fully-Qualified Domain Name, it is a request that Issuers | |||
1. Perform CAA issue restriction processing for the Domain Name, and | 1. Perform CAA issue restriction processing for the FQDN, and | |||
2. Grant authorization to issue certificates containing that Domain | 2. Grant authorization to issue certificates containing that FQDN to | |||
Name to the holder of the issuer-domain-name or a party acting | the holder of the issuer-domain-name or a party acting under the | |||
under the explicit authority of the holder of the issuer-domain- | explicit authority of the holder of the issuer-domain-name. | |||
name. | ||||
The CAA issue Property Value has the following sub-syntax (specified | The CAA issue Property Value has the following sub-syntax (specified | |||
in ABNF as per [RFC5234]). | in ABNF as per [RFC5234]). | |||
issue-value = *WSP [issuer-domain-name *WSP] [";" *WSP [parameters *WSP]] | issue-value = *WSP [issuer-domain-name *WSP] [";" *WSP [parameters *WSP]] | |||
issuer-domain-name = label *("." label) | issuer-domain-name = label *("." label) | |||
label = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT)) | label = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT)) | |||
parameters = (parameter *WSP ";" *WSP parameters) / parameter | parameters = (parameter *WSP ";" *WSP parameters) / parameter | |||
parameter = tag *WSP "=" *WSP value | parameter = tag *WSP "=" *WSP value | |||
tag = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT)) | tag = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT)) | |||
value = *(%x21-3A / %x3C-7E) | value = *(%x21-3A / %x3C-7E) | |||
For consistency with other aspects of DNS administration, Domain Name | For consistency with other aspects of DNS administration, FQDN values | |||
values are specified in letter-digit-hyphen Label (LDH-Label) form. | are specified in letter-digit-hyphen Label (LDH-Label) form. | |||
The following CAA record set requests that no certificates be issued | The following CAA record set requests that no certificates be issued | |||
for the Domain Name 'certs.example.com' by any Issuer other than | for the FQDN 'certs.example.com' by any Issuer other than | |||
ca1.example.net or ca2.example.org. | ca1.example.net or ca2.example.org. | |||
certs.example.com CAA 0 issue "ca1.example.net" | certs.example.com CAA 0 issue "ca1.example.net" | |||
certs.example.com CAA 0 issue "ca2.example.org" | certs.example.com CAA 0 issue "ca2.example.org" | |||
Because the presence of an issue Property Tag in the Relevant RRSet | Because the presence of an issue Property Tag in the Relevant RRSet | |||
for a Domain Name restricts issuance, Domain Name owners can use an | for an FQDN restricts issuance, FQDN owners can use an issue Property | |||
issue Property Tag with no issuer-domain-name to request no issuance. | Tag with no issuer-domain-name to request no issuance. | |||
For example, the following RRSet requests that no certificates be | For example, the following RRSet requests that no certificates be | |||
issued for the Domain Name 'nocerts.example.com' by any Issuer. | issued for the FQDN 'nocerts.example.com' by any Issuer. | |||
nocerts.example.com CAA 0 issue ";" | nocerts.example.com CAA 0 issue ";" | |||
An issue Property Tag where the issue-value does not match the ABNF | An issue Property Tag where the issue-value does not match the ABNF | |||
grammar MUST be treated the same as one specifying an empty issuer- | grammar MUST be treated the same as one specifying an empty issuer- | |||
domain-name. For example, the following malformed CAA RRSet forbids | domain-name. For example, the following malformed CAA RRSet forbids | |||
issuance: | issuance: | |||
malformed.example.com CAA 0 issue "%%%%%" | malformed.example.com CAA 0 issue "%%%%%" | |||
skipping to change at page 9, line 48 ¶ | skipping to change at page 9, line 45 ¶ | |||
4.3. CAA issuewild Property | 4.3. CAA issuewild Property | |||
The issuewild Property Tag has the same syntax and semantics as the | The issuewild Property Tag has the same syntax and semantics as the | |||
issue Property Tag except that it only grants authorization to issue | issue Property Tag except that it only grants authorization to issue | |||
certificates that specify a Wildcard Domain Name and issuewild | certificates that specify a Wildcard Domain Name and issuewild | |||
properties take precedence over issue properties when specified. | properties take precedence over issue properties when specified. | |||
Specifically: | Specifically: | |||
issuewild properties MUST be ignored when processing a request for a | issuewild properties MUST be ignored when processing a request for a | |||
Domain Name (that is, not a Wildcard Domain Name). | Fully-Qualified Domain Name that is not a Wildcard Domain Name. | |||
If at least one issuewild Property is specified in the Relevant RRSet | If at least one issuewild Property is specified in the Relevant RRSet | |||
for a Wildcard Domain Name, all issue properties MUST be ignored when | for a Wildcard Domain Name, all issue properties MUST be ignored when | |||
processing a request for that Wildcard Domain Name. | processing a request for that Wildcard Domain Name. | |||
For example, the following RRSet requests that _only_ ca1.example.net | For example, the following RRSet requests that _only_ ca1.example.net | |||
issue certificates for "wild.example.com" or "sub.wild.example.com", | issue certificates for "wild.example.com" or "sub.wild.example.com", | |||
and that _only_ ca2.example.org issue certificates for | and that _only_ ca2.example.org issue certificates for | |||
"*.wild.example.com" or "*.sub.wild.example.com). | "*.wild.example.com" or "*.sub.wild.example.com). Note that this | |||
presumes there are no CAA RRs for sub.wild.example.com. | ||||
wild.example.com CAA 0 issue "ca1.example.net" | wild.example.com CAA 0 issue "ca1.example.net" | |||
wild.example.com CAA 0 issuewild "ca2.example.org" | wild.example.com CAA 0 issuewild "ca2.example.org" | |||
The following RRSet requests that _only_ ca1.example.net issue | The following RRSet requests that _only_ ca1.example.net issue | |||
certificates for "wild2.example.com", "*.wild2.example.com" or | certificates for "wild2.example.com", "*.wild2.example.com" or | |||
"*.sub.wild2.example.com". | "*.sub.wild2.example.com". | |||
wild2.example.com CAA 0 issue "ca1.example.net" | wild2.example.com CAA 0 issue "ca1.example.net" | |||
skipping to change at page 10, line 43 ¶ | skipping to change at page 10, line 37 ¶ | |||
It permits any Issuer to issue for "wild3.example.com" or | It permits any Issuer to issue for "wild3.example.com" or | |||
"sub.wild3.example.com". | "sub.wild3.example.com". | |||
wild3.example.com CAA 0 issuewild "ca2.example.org" | wild3.example.com CAA 0 issuewild "ca2.example.org" | |||
4.4. CAA iodef Property | 4.4. CAA iodef Property | |||
The iodef Property specifies a means of reporting certificate issue | The iodef Property specifies a means of reporting certificate issue | |||
requests or cases of certificate issue for domains for which the | requests or cases of certificate issue for domains for which the | |||
Property appears in the Relevant RRSet, when those requests or | Property appears in the Relevant RRSet, when those requests or | |||
issuances violate the security policy of the Issuer or the Domain | issuances violate the security policy of the Issuer or the FQDN | |||
Name holder. | holder. | |||
The Incident Object Description Exchange Format (IODEF) [RFC7970] is | The Incident Object Description Exchange Format (IODEF) [RFC7970] is | |||
used to present the incident report in machine-readable form. | used to present the incident report in machine-readable form. | |||
The iodef Property Tag takes a URL as its Property Value. The URL | The iodef Property Tag takes a URL as its Property Value. The URL | |||
scheme type determines the method used for reporting: | scheme type determines the method used for reporting: | |||
mailto: The IODEF incident report is reported as a MIME email | mailto: The IODEF incident report is reported as a MIME email | |||
attachment to an SMTP email that is submitted to the mail address | attachment to an SMTP email that is submitted to the mail address | |||
specified. The mail message sent SHOULD contain a brief text message | specified. The mail message sent SHOULD contain a brief text message | |||
to alert the recipient to the nature of the attachment. | to alert the recipient to the nature of the attachment. | |||
http or https: The IODEF report is submitted as a Web service request | http or https: The IODEF report is submitted as a Web service request | |||
to the HTTP address specified using the protocol specified in | to the HTTP address specified using the protocol specified in | |||
[RFC6546]. | [RFC6546]. | |||
These are the only supported URL schemes. | ||||
The following RRSet specifies that reports may be made by means of | The following RRSet specifies that reports may be made by means of | |||
email with the IODEF data as an attachment, a Web service [RFC6546], | email with the IODEF data as an attachment, a Web service [RFC6546], | |||
or both: | or both: | |||
report.example.com CAA 0 issue "ca1.example.net" | report.example.com CAA 0 issue "ca1.example.net" | |||
report.example.com CAA 0 iodef "mailto:security@example.com" | report.example.com CAA 0 iodef "mailto:security@example.com" | |||
report.example.com CAA 0 iodef "http://iodef.example.com/" | report.example.com CAA 0 iodef "http://iodef.example.com/" | |||
4.5. Critical Flag | 4.5. Critical Flag | |||
The critical flag is intended to permit future versions of CAA to | The critical flag is intended to permit future versions of CAA to | |||
introduce new semantics that MUST be understood for correct | introduce new semantics that MUST be understood for correct | |||
processing of the record, preventing conforming CAs that do not | processing of the record, preventing conforming CAs that do not | |||
recognize the new semantics from issuing certificates for the | recognize the new semantics from issuing certificates for the | |||
indicated Domain Names. | indicated FQDNs. | |||
In the following example, the Property with a Property Tag of 'tbs' | In the following example, the Property with a Property Tag of 'tbs' | |||
is flagged as critical. Neither the ca1.example.net CA nor any other | is flagged as critical. Neither the ca1.example.net CA nor any other | |||
Issuer is authorized to issue for "new.example.com" (or any other | Issuer is authorized to issue for "new.example.com" (or any other | |||
domains for which this is the Relevant RRSet) unless the Issuer has | domains for which this is the Relevant RRSet) unless the Issuer has | |||
implemented the processing rules for the 'tbs' Property Tag. | implemented the processing rules for the 'tbs' Property Tag. | |||
new.example.com CAA 0 issue "ca1.example.net" | new.example.com CAA 0 issue "ca1.example.net" | |||
new.example.com CAA 128 tbs "Unknown" | new.example.com CAA 128 tbs "Unknown" | |||
5. Security Considerations | 5. Security Considerations | |||
CAA records assert a security policy that the holder of a Domain Name | CAA records assert a security policy that the holder of an FDQN | |||
wishes to be observed by Issuers. The effectiveness of CAA records | wishes to be observed by Issuers. The effectiveness of CAA records | |||
as an access control mechanism is thus dependent on observance of CAA | as an access control mechanism is thus dependent on observance of CAA | |||
constraints by Issuers. | constraints by Issuers. | |||
The objective of the CAA record properties described in this document | The objective of the CAA record properties described in this document | |||
is to reduce the risk of certificate mis-issue rather than avoid | is to reduce the risk of certificate mis-issue rather than avoid | |||
reliance on a certificate that has been mis-issued. DANE [RFC6698] | reliance on a certificate that has been mis-issued. DANE [RFC6698] | |||
describes a mechanism for avoiding reliance on mis-issued | describes a mechanism for avoiding reliance on mis-issued | |||
certificates. | certificates. | |||
5.1. Use of DNS Security | 5.1. Use of DNS Security | |||
Use of DNSSEC to authenticate CAA RRs is strongly RECOMMENDED but not | Use of DNSSEC to authenticate CAA RRs is strongly RECOMMENDED but not | |||
required. An Issuer MUST NOT issue certificates if doing so would | required. An Issuer MUST NOT issue certificates if doing so would | |||
conflict with the Relevant RRSet, irrespective of whether the | conflict with the Relevant RRSet, irrespective of whether the | |||
corresponding DNS records are signed. | corresponding DNS records are signed. | |||
DNSSEC provides a proof of non-existence for both DNS Domain Names | DNSSEC provides a proof of non-existence for both DNS Fully-Qualified | |||
and RRSets within Domain Names. DNSSEC verification thus enables an | Domain Names and RRSets within FQDNs. DNSSEC verification thus | |||
Issuer to determine if the answer to a CAA record query is empty | enables an Issuer to determine if the answer to a CAA record query is | |||
because the RRSet is empty or if it is non-empty but the response has | empty because the RRSet is empty or if it is non-empty but the | |||
been suppressed. | response has been suppressed. | |||
Use of DNSSEC allows an Issuer to acquire and archive a proof that | Use of DNSSEC allows an Issuer to acquire and archive a proof that | |||
they were authorized to issue certificates for the Domain Name. | they were authorized to issue certificates for the FQDN. | |||
Verification of such archives MAY be an audit requirement to verify | Verification of such archives may be an audit requirement to verify | |||
CAA record processing compliance. Publication of such archives MAY | CAA record processing compliance. Publication of such archives may | |||
be a transparency requirement to verify CAA record processing | be a transparency requirement to verify CAA record processing | |||
compliance. | compliance. | |||
5.2. Non-Compliance by Certification Authority | 5.2. Non-Compliance by Certification Authority | |||
CAA records offer CAs a cost-effective means of mitigating the risk | CAA records offer CAs a cost-effective means of mitigating the risk | |||
of certificate mis-issue: the cost of implementing CAA checks is very | of certificate mis-issue: the cost of implementing CAA checks is very | |||
small and the potential costs of a mis-issue event include the | small and the potential costs of a mis-issue event include the | |||
removal of an embedded trust anchor. | removal of an embedded trust anchor. | |||
5.3. Mis-Issue by Authorized Certification Authority | 5.3. Mis-Issue by Authorized Certification Authority | |||
Use of CAA records does not prevent mis-issue by an authorized | Use of CAA records does not prevent mis-issue by an authorized | |||
Certification Authority, i.e., a CA that is authorized to issue | Certification Authority, i.e., a CA that is authorized to issue | |||
certificates for the Domain Name in question by CAA records. | certificates for the FQDN in question by CAA records. | |||
Domain Name holders SHOULD verify that the CAs they authorize to | FQDN holders SHOULD verify that the CAs they authorize to issue | |||
issue certificates for their Domain Names employ appropriate controls | certificates for their FQDNs employ appropriate controls to ensure | |||
to ensure that certificates are issued only to authorized parties | that certificates are issued only to authorized parties within their | |||
within their organization. | organization. | |||
Such controls are most appropriately determined by the Domain Name | Such controls are most appropriately determined by the FQDN holder | |||
holder and the authorized CA(s) directly and are thus out of scope of | and the authorized CA(s) directly and are thus out of scope of this | |||
this document. | document. | |||
5.4. Suppression or Spoofing of CAA Records | 5.4. Suppression or Spoofing of CAA Records | |||
Suppression of the CAA record or insertion of a bogus CAA record | Suppression of the CAA record or insertion of a bogus CAA record | |||
could enable an attacker to obtain a certificate from an Issuer that | could enable an attacker to obtain a certificate from an Issuer that | |||
was not authorized to issue for that Domain Name. | was not authorized to issue for an affected FQDN. | |||
Where possible, Issuers SHOULD perform DNSSEC validation to detect | Where possible, Issuers SHOULD perform DNSSEC validation to detect | |||
missing or modified CAA record sets. | missing or modified CAA record sets. | |||
In cases where DNSSEC is not deployed for a corresponding Domain | In cases where DNSSEC is not deployed for a corresponding FQDN, an | |||
Name, an Issuer SHOULD attempt to mitigate this risk by employing | Issuer SHOULD attempt to mitigate this risk by employing appropriate | |||
appropriate DNS security controls. For example, all portions of the | DNS security controls. For example, all portions of the DNS lookup | |||
DNS lookup process SHOULD be performed against the authoritative name | process SHOULD be performed against the authoritative name server. | |||
server. Data cached by third parties MUST NOT be relied on but MAY | Data cached by third parties MUST NOT be relied on as the sole source | |||
be used to support additional anti-spoofing or anti-suppression | of DNS CAA information but MAY be used to support additional anti- | |||
controls. | spoofing or anti-suppression controls. | |||
5.5. Denial of Service | 5.5. Denial of Service | |||
Introduction of a malformed or malicious CAA RR could in theory | Introduction of a malformed or malicious CAA RR could in theory | |||
enable a Denial-of-Service (DoS) attack. | enable a Denial-of-Service (DoS) attack. This could happen by | |||
modification of authoritative DNS records or by spoofing inflight DNS | ||||
responses. | ||||
This specific threat is not considered to add significantly to the | This specific threat is not considered to add significantly to the | |||
risk of running an insecure DNS service. | risk of running an insecure DNS service. | |||
An attacker could, in principle, perform a DoS attack against an | An attacker could, in principle, perform a DoS attack against an | |||
Issuer by requesting a certificate with a maliciously long DNS name. | Issuer by requesting a certificate with a maliciously long DNS name. | |||
In practice, the DNS protocol imposes a maximum name length and CAA | In practice, the DNS protocol imposes a maximum name length and CAA | |||
processing does not exacerbate the existing need to mitigate DoS | processing does not exacerbate the existing need to mitigate DoS | |||
attacks to any meaningful degree. | attacks to any meaningful degree. | |||
5.6. Abuse of the Critical Flag | 5.6. Abuse of the Critical Flag | |||
A Certification Authority could make use of the critical flag to | A Certification Authority could make use of the critical flag to | |||
trick customers into publishing records that prevent competing | trick customers into publishing records that prevent competing | |||
Certification Authorities from issuing certificates even though the | Certification Authorities from issuing certificates even though the | |||
customer intends to authorize multiple providers. | customer intends to authorize multiple providers. This could happen | |||
if the customers were setting CAA records based on data provided by | ||||
the CA rather than generating those records themselves. | ||||
In practice, such an attack would be of minimal effect since any | In practice, such an attack would be of minimal effect since any | |||
competent competitor that found itself unable to issue certificates | competent competitor that found itself unable to issue certificates | |||
due to lack of support for a Property marked critical SHOULD | due to lack of support for a Property marked critical should | |||
investigate the cause and report the reason to the customer. The | investigate the cause and report the reason to the customer. The | |||
customer will thus discover that they had been deceived. | customer will thus discover that they had been deceived. | |||
6. Deployment Considerations | 6. Deployment Considerations | |||
A CA implementing CAA may find that they receive errors looking up | A CA implementing CAA may find that they receive errors looking up | |||
CAA records. The following are some common causes of such errors, so | CAA records. The following are some common causes of such errors, so | |||
that CAs may provide guidance to their subscribers on fixing the | that CAs may provide guidance to their subscribers on fixing the | |||
underlying problems. | underlying problems. | |||
skipping to change at page 14, line 24 ¶ | skipping to change at page 14, line 24 ¶ | |||
Some authoritative nameservers respond with REJECTED or NOTIMP when | Some authoritative nameservers respond with REJECTED or NOTIMP when | |||
queried for a Resource Record type they do not recognize. At least | queried for a Resource Record type they do not recognize. At least | |||
one authoritative resolver produces a malformed response (with the QR | one authoritative resolver produces a malformed response (with the QR | |||
bit set to 0) when queried for unknown Resource Record types. Per | bit set to 0) when queried for unknown Resource Record types. Per | |||
RFC 1034, the correct response for unknown Resource Record types is | RFC 1034, the correct response for unknown Resource Record types is | |||
NOERROR. | NOERROR. | |||
6.3. Delegation to Private Nameservers | 6.3. Delegation to Private Nameservers | |||
Some Domain Name administrators make the contents of a subdomain | Some FQDN administrators make the contents of a subdomain | |||
unresolvable on the public Internet by delegating that subdomain to a | unresolvable on the public Internet by delegating that subdomain to a | |||
nameserver whose IP address is private. A CA processing CAA records | nameserver whose IP address is private. A CA processing CAA records | |||
for such subdomains will receive SERVFAIL from its recursive | for such subdomains will receive SERVFAIL from its recursive | |||
resolver. The CA MAY interpret that as preventing issuance. Domain | resolver. The CA MAY interpret that as preventing issuance. FQDN | |||
Name administrators wishing to issue certificates for private Domain | administrators wishing to issue certificates for private FQDNs SHOULD | |||
Names SHOULD use split-horizon DNS with a publicly available | use split-horizon DNS with a publicly available nameserver, so that | |||
nameserver, so that CAs can receive a valid, empty CAA response for | CAs can receive a valid, empty CAA response for those FQDNs. | |||
those Domain Names. | ||||
6.4. Bogus DNSSEC Responses | 6.4. Bogus DNSSEC Responses | |||
Queries for CAA Resource Records are different from most DNS RR | Queries for CAA Resource Records are different from most DNS RR | |||
types, because a signed, empty response to a query for CAA RRs is | types, because a signed, empty response to a query for CAA RRs is | |||
meaningfully different from a bogus response. A signed, empty | meaningfully different from a bogus response. A signed, empty | |||
response indicates that there is definitely no CAA policy set at a | response indicates that there is definitely no CAA policy set at a | |||
given label. A bogus response may mean either a misconfigured zone, | given label. A bogus response may mean either a misconfigured zone, | |||
or an attacker tampering with records. DNSSEC implementations may | or an attacker tampering with records. DNSSEC implementations may | |||
have bugs with signatures on empty responses that go unnoticed, | have bugs with signatures on empty responses that go unnoticed, | |||
skipping to change at page 15, line 5 ¶ | skipping to change at page 15, line 4 ¶ | |||
difference to an end user between empty and bogus is irrelevant; they | difference to an end user between empty and bogus is irrelevant; they | |||
both mean a site is unavailable. | both mean a site is unavailable. | |||
In particular, at least two authoritative resolvers that implement | In particular, at least two authoritative resolvers that implement | |||
live signing had bugs when returning empty Resource Record sets for | live signing had bugs when returning empty Resource Record sets for | |||
DNSSEC-signed zones, in combination with mixed-case queries. Mixed- | DNSSEC-signed zones, in combination with mixed-case queries. Mixed- | |||
case queries, also known as DNS 0x20, are used by some recursive | case queries, also known as DNS 0x20, are used by some recursive | |||
resolvers to increase resilience against DNS poisoning attacks. | resolvers to increase resilience against DNS poisoning attacks. | |||
DNSSEC-signing authoritative resolvers are expected to copy the same | DNSSEC-signing authoritative resolvers are expected to copy the same | |||
capitalization from the query into their ANSWER section, but sign the | capitalization from the query into their ANSWER section, but sign the | |||
response as if they had use all lowercase. In particular, PowerDNS | response as if they had used all lowercase. In particular, PowerDNS | |||
versions prior to 4.0.4 had this bug. | versions prior to 4.0.4 had this bug. | |||
7. Differences versus RFC6844 | 7. Differences versus RFC6844 | |||
This document obsoletes RFC6844. The most important change is to the | This document obsoletes RFC6844. The most important change is to the | |||
Certification Authority Processing section. RFC6844 specified an | Certification Authority Processing section. RFC6844 specified an | |||
algorithm that performed DNS tree-climbing not only on the Domain | algorithm that performed DNS tree-climbing not only on the FQDN being | |||
Name being processed, but also on all CNAMEs and DNAMEs encountered | processed, but also on all CNAMEs and DNAMEs encountered along the | |||
along the way. This made the processing algorithm very inefficient | way. This made the processing algorithm very inefficient when used | |||
when used on Domain Names that utilize many CNAMEs, and would have | on FQDNs that utilize many CNAMEs, and would have made it difficult | |||
made it difficult for hosting providers to set CAA policies on their | for hosting providers to set CAA policies on their own FQDNs without | |||
own Domain Names without setting potentially unwanted CAA policies on | setting potentially unwanted CAA policies on their customers' FQDNs. | |||
their customers' Domain Names. This document specifies a simplified | This document specifies a simplified processing algorithm that only | |||
processing algorithm that only performs tree climbing on the Domain | performs tree climbing on the FQDN being processed, and leaves | |||
Name being processed, and leaves processing of CNAMEs and DNAMEs up | processing of CNAMEs and DNAMEs up to the CA's recursive resolver. | |||
to the CA's recursive resolver. | ||||
This document also includes a "Deployment Considerations" section | This document also includes a "Deployment Considerations" section | |||
detailing experience gained with practical deployment of CAA | detailing experience gained with practical deployment of CAA | |||
enforcement among CAs in the WebPKI. | enforcement among CAs in the WebPKI. | |||
This document clarifies the ABNF grammar for issue and issuewild tags | This document clarifies the ABNF grammar for the issue and issuewild | |||
and resolves some inconsistencies with the document text. In | tags and resolves some inconsistencies with the document text. In | |||
particular, it specifies that parameters are separated with | particular, it specifies that parameters are separated with | |||
semicolons. It also allows hyphens in Property Tags. | semicolons. It also allows hyphens in Property Tags. | |||
This document also clarifies processing of a CAA RRset that is not | This document also clarifies processing of a CAA RRset that is not | |||
empty, but contains no issue or issuewild tags. | empty, but contains no issue or issuewild tags. | |||
This document removes the section titled "The CAA RR Type," merging | This document removes the section titled "The CAA RR Type," merging | |||
it with "Mechanism" because the definitions were mainly duplicates. | it with "Mechanism" because the definitions were mainly duplicates. | |||
It moves the "Use of DNS Security" section into Security | It moves the "Use of DNS Security" section into Security | |||
Considerations. It renames "Certification Authority Processing" to | Considerations. It renames "Certification Authority Processing" to | |||
"Relevant Resource Record Set," and emphasizes the use of that term | "Relevant Resource Record Set," and emphasizes the use of that term | |||
to more clearly define which domains are affected by a given RRset. | to more clearly define which domains are affected by a given RRset. | |||
8. IANA Considerations | 8. IANA Considerations | |||
IANA is requested to add [[[ RFC Editor: Please replace with this RFC | IANA is requested to add [[[ RFC Editor: Please replace with this RFC | |||
]]] as a reference for the Certification Authority Restriction Flags | ]]] as a reference for the Certification Authority Restriction Flags | |||
and Certification Authority Restriction Properties registries. | and Certification Authority Restriction Properties registries, and | |||
update references to [RFC6844] within those registries to refer to | ||||
[[[ RFC Editor: Please replace with this RFC ]]]. IANA is also | ||||
requested to update the CAA TYPE in the DNS Parameters registry with | ||||
a reference to [[[ RFC Editor: Please replace with this RFC ]]]. | ||||
9. Acknowledgements | 9. Acknowledgements | |||
The authors would like to thank the following people who contributed | The authors would like to thank the following people who contributed | |||
to the design and documentation of this work item: Corey Bonnell, | to the design and documentation of this work item: Corey Bonnell, | |||
Chris Evans, Stephen Farrell, Jeff Hodges, Paul Hoffman, Tim | Chris Evans, Stephen Farrell, Jeff Hodges, Paul Hoffman, Tim | |||
Hollebeek, Stephen Kent, Adam Langley, Ben Laurie, James Manger, | Hollebeek, Stephen Kent, Adam Langley, Ben Laurie, James Manger, | |||
Chris Palmer, Scott Schmit, Sean Turner, and Ben Wilson. | Chris Palmer, Scott Schmit, Sean Turner, and Ben Wilson. | |||
10. References | 10. References | |||
skipping to change at page 17, line 26 ¶ | skipping to change at page 17, line 26 ¶ | |||
[RFC6546] Trammell, B., "Transport of Real-time Inter-network | [RFC6546] Trammell, B., "Transport of Real-time Inter-network | |||
Defense (RID) Messages over HTTP/TLS", RFC 6546, | Defense (RID) Messages over HTTP/TLS", RFC 6546, | |||
DOI 10.17487/RFC6546, April 2012, | DOI 10.17487/RFC6546, April 2012, | |||
<https://www.rfc-editor.org/info/rfc6546>. | <https://www.rfc-editor.org/info/rfc6546>. | |||
[RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | [RFC6698] Hoffman, P. and J. Schlyter, "The DNS-Based Authentication | |||
of Named Entities (DANE) Transport Layer Security (TLS) | of Named Entities (DANE) Transport Layer Security (TLS) | |||
Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August | Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August | |||
2012, <https://www.rfc-editor.org/info/rfc6698>. | 2012, <https://www.rfc-editor.org/info/rfc6698>. | |||
[RFC6844] Hallam-Baker, P. and R. Stradling, "DNS Certification | ||||
Authority Authorization (CAA) Resource Record", RFC 6844, | ||||
DOI 10.17487/RFC6844, January 2013, | ||||
<https://www.rfc-editor.org/info/rfc6844>. | ||||
[RFC7970] Danyliw, R., "The Incident Object Description Exchange | [RFC7970] Danyliw, R., "The Incident Object Description Exchange | |||
Format Version 2", RFC 7970, DOI 10.17487/RFC7970, | Format Version 2", RFC 7970, DOI 10.17487/RFC7970, | |||
November 2016, <https://www.rfc-editor.org/info/rfc7970>. | November 2016, <https://www.rfc-editor.org/info/rfc7970>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
10.2. Informative References | 10.2. Informative References | |||
End of changes. 52 change blocks. | ||||
111 lines changed or deleted | 125 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |