rfc9102.original | rfc9102.txt | |||
---|---|---|---|---|
Network Working Group V. Dukhovni | Independent Submission V. Dukhovni | |||
Internet-Draft Two Sigma | Request for Comments: 9102 Two Sigma | |||
Intended status: Experimental S. Huque | Category: Experimental S. Huque | |||
Expires: 12 December 2021 Salesforce | ISSN: 2070-1721 Salesforce | |||
W. Toorop | W. Toorop | |||
NLnet Labs | NLnet Labs | |||
P. Wouters | P. Wouters | |||
Aiven | Aiven | |||
M. Shore | M. Shore | |||
Fastly | Fastly | |||
10 June 2021 | July 2021 | |||
TLS DNSSEC Chain Extension | TLS DNSSEC Chain Extension | |||
draft-dukhovni-tls-dnssec-chain-08 | ||||
Abstract | Abstract | |||
This document describes an experimental TLS extension for in-band | This document describes an experimental TLS extension for the in-band | |||
transport of the complete set of DNSSEC validatable records needed to | transport of the complete set of records that can be validated by | |||
perform DANE authentication of a TLS server without the need to | DNSSEC and that are needed to perform DNS-Based Authentication of | |||
perform separate out-of-band DNS lookups. When the requisite DNS | Named Entities (DANE) of a TLS server. This extension obviates the | |||
records do not exist, the extension conveys a validatable denial of | need to perform separate, out-of-band DNS lookups. When the | |||
existence proof. | requisite DNS records do not exist, the extension conveys a denial- | |||
of-existence proof that can be validated. | ||||
This experimental extension is developed outside the IETF and is | This experimental extension is developed outside the IETF and is | |||
published here to guide implementation of the extension and to ensure | published here to guide implementation of the extension and to ensure | |||
interoperability among implementations. | interoperability among implementations. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This document is not an Internet Standards Track specification; it is | |||
provisions of BCP 78 and BCP 79. | published for examination, experimental implementation, and | |||
evaluation. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document defines an Experimental Protocol for the Internet | |||
and may be updated, replaced, or obsoleted by other documents at any | community. This is a contribution to the RFC Series, independently | |||
time. It is inappropriate to use Internet-Drafts as reference | of any other RFC stream. The RFC Editor has chosen to publish this | |||
material or to cite them other than as "work in progress." | document at its discretion and makes no statement about its value for | |||
implementation or deployment. Documents approved for publication by | ||||
the RFC Editor are not candidates for any level of Internet Standard; | ||||
see Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 12 December 2021. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9102. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. | carefully, as they describe your rights and restrictions with respect | |||
to this document. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
1.1. Scope of the experiment . . . . . . . . . . . . . . . . . 4 | 1.1. Scope of the Experiment | |||
1.2. Requirements Notation . . . . . . . . . . . . . . . . . . 4 | 1.2. Requirements Notation | |||
2. DNSSEC Authentication Chain Extension . . . . . . . . . . . . 4 | 2. DNSSEC Authentication Chain Extension | |||
2.1. Protocol, TLS 1.2 . . . . . . . . . . . . . . . . . . . . 5 | 2.1. Protocol, TLS 1.2 | |||
2.2. Protocol, TLS 1.3 . . . . . . . . . . . . . . . . . . . . 6 | 2.2. Protocol, TLS 1.3 | |||
2.3. DNSSEC Authentication Chain Data . . . . . . . . . . . . 6 | 2.3. DNSSEC Authentication Chain Data | |||
2.3.1. Authenticated Denial of Existence . . . . . . . . . . 9 | 2.3.1. Authenticated Denial of Existence | |||
3. Construction of Serialized Authentication Chains . . . . . . 10 | 3. Construction of Serialized Authentication Chains | |||
4. Caching and Regeneration of the Authentication Chain . . . . 11 | 4. Caching and Regeneration of the Authentication Chain | |||
5. Expired signatures in the Authentication Chain . . . . . . . 11 | 5. Expired Signatures in the Authentication Chain | |||
6. Verification . . . . . . . . . . . . . . . . . . . . . . . . 11 | 6. Verification | |||
7. Extension Pinning . . . . . . . . . . . . . . . . . . . . . . 12 | 7. Extension Pinning | |||
8. Trust Anchor Maintenance . . . . . . . . . . . . . . . . . . 14 | 8. Trust Anchor Maintenance | |||
9. Virtual Hosting . . . . . . . . . . . . . . . . . . . . . . . 15 | 9. Virtual Hosting | |||
10. Operational Considerations . . . . . . . . . . . . . . . . . 15 | 10. Operational Considerations | |||
11. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 11. Security Considerations | |||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 12. IANA Considerations | |||
13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | 13. References | |||
14. Normative References . . . . . . . . . . . . . . . . . . . . 18 | 13.1. Normative References | |||
15. Informative References . . . . . . . . . . . . . . . . . . . 19 | 13.2. Informative References | |||
Appendix A. Test Vectors . . . . . . . . . . . . . . . . . . . . 20 | Appendix A. Test Vectors | |||
A.1. _443._tcp.www.example.com . . . . . . . . . . . . . . . . 22 | A.1. "_443._tcp.www.example.com" | |||
A.2. _25._tcp.example.com NSEC wildcard . . . . . . . . . . . 26 | A.2. "_25._tcp.example.com" NSEC Wildcard | |||
A.3. _25._tcp.example.org NSEC3 wildcard . . . . . . . . . . . 27 | A.3. "_25._tcp.example.org" NSEC3 Wildcard | |||
A.4. _443._tcp.www.example.org CNAME . . . . . . . . . . . . . 29 | A.4. "_443._tcp.www.example.org" CNAME | |||
A.5. _443._tcp.www.example.net DNAME . . . . . . . . . . . . . 30 | A.5. "_443._tcp.www.example.net" DNAME | |||
A.6. _25._tcp.smtp.example.com NSEC Denial of Existence . . . 32 | A.6. "_25._tcp.smtp.example.com" NSEC Denial of Existence | |||
A.7. _25._tcp.smtp.example.org NSEC3 Denial of Existence . . . 34 | A.7. "_25._tcp.smtp.example.org" NSEC3 Denial of Existence | |||
A.8. _443._tcp.www.insecure.example NSEC3 opt-out insecure | A.8. "_443._tcp.www.insecure.example" NSEC3 Opt-Out Insecure | |||
delegation . . . . . . . . . . . . . . . . . . . . . . . 35 | Delegation | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 36 | Acknowledgments | |||
Authors' Addresses | ||||
1. Introduction | 1. Introduction | |||
This document describes an experimental TLS [RFC5246][RFC8446] | This document describes an experimental TLS [RFC5246] [RFC8446] | |||
extension for in-band transport of the complete set of DNSSEC | extension for in-band transport of the complete set of resource | |||
[RFC4033][RFC4034][RFC4035] validated Resource Records (RRs) that | records (RRs) validated by DNSSEC [RFC4033] [RFC4034] [RFC4035]. | |||
enable a TLS client to perform DANE Authentication [RFC6698][RFC7671] | This extension enables a TLS client to perform DANE authentication | |||
of a TLS server without the need to perform out-of-band DNS lookups. | [RFC6698] [RFC7671] of a TLS server without the need to perform out- | |||
Retrieval of the required DNS records may be unavailable to the | of-band DNS lookups. Retrieval of the required DNS records may be | |||
client [NLNETLABS], or may incur undesirable additional latency. | unavailable to the client [DISCOVERY] or may incur undesirable | |||
additional latency. | ||||
The extension described here allows a TLS client to request that the | The extension described here allows a TLS client to request that the | |||
TLS server return the DNSSEC authentication chain corresponding to | TLS server return the DNSSEC authentication chain corresponding to | |||
its DNSSEC-validated DANE TLSA Resource Record set (RRset), or | its DNSSEC-validated DANE TLSA resource record set (RRset) or | |||
authenticated denial of existence of such an RRset (as described in | authenticated denial of existence of such an RRset (as described in | |||
Section 2.3.1). If the server supports this extension it performs | Section 2.3.1). If the server supports this extension, it performs | |||
the appropriate DNS queries, builds the authentication chain, and | the appropriate DNS queries, builds the authentication chain, and | |||
returns it to the client. The server will typically use a previously | returns it to the client. The server will typically use a previously | |||
cached authentication chain, but it will need to rebuild it | cached authentication chain, but it will need to rebuild it | |||
periodically as described in Section 4. The client then | periodically as described in Section 4. The client then | |||
authenticates the chain using a preconfigured DNSSEC trust anchor. | authenticates the chain using a preconfigured DNSSEC trust anchor. | |||
In the absence of TLSA records, this extension conveys the required | In the absence of TLSA records, this extension conveys the required | |||
authenticated denial of existence. Such proofs are needed to | authenticated denial of existence. Such proofs are needed to | |||
securely signal that specified TLSA records are not available so that | securely signal that specified TLSA records are not available so that | |||
TLS clients can safely fall back to Public-Key Infrastructure X.509 | TLS clients can safely fall back to authentication based on Public | |||
(PKIX, sometimes called WebPKI) based authentication if allowed by | Key Infrastructure X.509 (PKIX, sometimes called WebPKI) if allowed | |||
local policy. These proofs are also needed to avoid downgrade from | by local policy. These proofs are also needed to avoid downgrade | |||
opportunistic authenticated TLS (when DANE TLSA records are present) | from opportunistic authenticated TLS (when DANE TLSA records are | |||
to unauthenticated opportunistic TLS (in the absence of DANE). | present) to unauthenticated opportunistic TLS (in the absence of | |||
Denial of existence records are also used by the TLS client to clear | DANE). Denial-of-existence records are also used by the TLS client | |||
no longer relevant extension pins, as described in Section 7. | to clear extension pins that are no longer relevant, as described in | |||
Section 7. | ||||
This extension supports DANE authentication of either X.509 | This extension supports DANE authentication of either X.509 | |||
certificates or raw public keys as described in the DANE | certificates or raw public keys, as described in the DANE | |||
specification [RFC6698][RFC7671] and [RFC7250]. | specification [RFC6698] [RFC7671] [RFC7250]. | |||
This extension also mitigates against an unknown key share (UKS) | This extension also mitigates against an unknown key share (UKS) | |||
attack [I-D.barnes-dane-uks] when using raw public keys, since the | attack [DANE-UKS] when using raw public keys since the server commits | |||
server commits to its DNS name (normally found in its certificate) | to its DNS name (normally found in its certificate) via the content | |||
via the content of the returned TLSA RRset. | of the returned TLSA RRset. | |||
This experimental extension is developed outside the IETF and is | This experimental extension is developed outside the IETF and is | |||
published here to guide implementation of the extension and to ensure | published here to guide implementation of the extension and to ensure | |||
interoperability among implementations. | interoperability among implementations. | |||
1.1. Scope of the experiment | 1.1. Scope of the Experiment | |||
The mechanism described in this document is intended to be used with | The mechanism described in this document is intended to be used with | |||
applications on the wider internet. One application of TLS well | applications on the wider internet. One application of TLS well | |||
suited for the TLS DNSSEC Chain extension is DNS over TLS [RFC7858]. | suited for the TLS DNSSEC Chain extension is DNS over TLS [RFC7858]. | |||
In fact, one of the authentication methods for DNS over TLS _is_ the | In fact, one of the authentication methods for DNS over TLS _is_ the | |||
mechanism described in this document, as specified in Section 8.2.2 | mechanism described in this document, as specified in Section 8.2.2 | |||
of [RFC8310]. | of [RFC8310]. | |||
The need for this mechanism when using DANE to authenticate a DNS | The need for this mechanism when using DANE to authenticate a DNS- | |||
over TLS resolver is obvious, since DNS may not be available to | over-TLS resolver is obvious, since DNS may not be available to | |||
perform the required DNS lookups. Other applications of TLS would | perform the required DNS lookups. Other applications of TLS would | |||
benefit from using this mechanism as well. The client sides of those | benefit from using this mechanism as well. The client sides of those | |||
applications would not be required to be used on end-points with a | applications would not be required to be used on endpoints with a | |||
working DNSSEC resolver in order for them to use DANE authentication | working DNSSEC resolver in order for them to use the DANE | |||
of the TLS service. Therefore we invite other TLS services to try | authentication of the TLS service. Therefore, we invite other TLS | |||
out this mechanism as well. | services to try out this mechanism as well. | |||
In the TLS working group, concerns have been raised that the pinning | In the TLS Working Group, concerns have been raised that the pinning | |||
technique as described in Section 7 would complicate deployability of | technique as described in Section 7 would complicate deployability of | |||
the TLS DNSSEC Chain extension. The goal of the experiment is to | the TLS DNSSEC chain extension. The goal of the experiment is to | |||
study these complications in real world deployments. This experiment | study these complications in real-world deployments. This experiment | |||
hopefully will give the TLS working group some insight into whether | hopefully will give the TLS Working Group some insight into whether | |||
or not this is a problem. | or not this is a problem. | |||
If the experiment is successful, it is expected that the findings of | If the experiment is successful, it is expected that the findings of | |||
the experiment will result in an updated document for standards track | the experiment will result in an updated document for Standards Track | |||
approval. | approval. | |||
1.2. Requirements Notation | 1.2. Requirements Notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. DNSSEC Authentication Chain Extension | 2. DNSSEC Authentication Chain Extension | |||
2.1. Protocol, TLS 1.2 | 2.1. Protocol, TLS 1.2 | |||
A client MAY include an extension of type "dnssec_chain" in the | A client MAY include an extension of type "dnssec_chain" in the | |||
(extended) ClientHello. The "extension_data" field of this extension | (extended) ClientHello. The "extension_data" field of this extension | |||
consists of the server's 16-bit TCP port number in network (big- | consists of the server's 16-bit TCP port number in network (big- | |||
endian) byte order. Clients sending this extension MUST also send | endian) byte order. Clients sending this extension MUST also send | |||
the Server Name Identification (SNI, [RFC6066]) extension. Together, | the Server Name Identification (SNI) extension [RFC6066]. Together, | |||
these make it possible for the TLS server to determine which | these make it possible for the TLS server to determine which | |||
authenticated TLSA RRset chain needs to be used for the | authenticated TLSA RRset chain needs to be used for the | |||
"dnssec_chain" extension. | "dnssec_chain" extension. | |||
When a server that implements (and is configured to enable the use | When a server that implements (and is configured to enable the use | |||
of) this extension receives a "dnssec_chain" extension in the | of) this extension receives a "dnssec_chain" extension in the | |||
ClientHello, it MUST first check whether the requested TLSA RRset | ClientHello, it MUST first check whether the requested TLSA RRset | |||
(based on the port number in this extension and hostname in the SNI | (based on the port number in this extension and hostname in the SNI | |||
extension) is associated with the server. If the extension, the SNI | extension) is associated with the server. If the extension, the SNI | |||
hostname or the port number is unsupported, the server's extended | hostname, or the port number is unsupported, the server's extended | |||
ServerHello message MUST NOT include the "dnssec_chain" extension. | ServerHello message MUST NOT include the "dnssec_chain" extension. | |||
Otherwise, the server's extended ServerHello message MUST contain a | Otherwise, the server's extended ServerHello message MUST contain a | |||
serialized authentication chain using the format described below. If | serialized authentication chain using the format described below. If | |||
the server does not have access to the requested DNS chain - for | the server does not have access to the requested DNS chain -- for | |||
example due to a misconfiguration or expired chain - the server MUST | example, due to a misconfiguration or expired chain -- the server | |||
omit the extension rather than send an incomplete chain. Clients | MUST omit the extension rather than send an incomplete chain. | |||
that are expecting this extension MUST interpret this as a downgrade | Clients that are expecting this extension MUST interpret this as a | |||
attack and MUST abort the TLS connection. Therefore, servers MUST | downgrade attack and MUST abort the TLS connection. Therefore, | |||
send denial of existence proofs, unless, for the particular | servers MUST send denial-of-existence proofs unless, for the | |||
application protocol or service, clients are expected to continue | particular application protocol or service, clients are expected to | |||
even in the absence of such a proof. As with all TLS extensions, if | continue even in the absence of such a proof. As with all TLS | |||
the server does not support this extension it will not return any | extensions, if the server does not support this extension, it will | |||
authentication chain. | not return any authentication chain. | |||
The set of supported combinations of port number and SNI name may be | The set of supported combinations of a port number and SNI name may | |||
configured explicitly by server administrators, or could be inferred | be configured explicitly by server administrators or could be | |||
from the available certificates combined with a list of supported | inferred from the available certificates combined with a list of | |||
ports. It is important to note that the client's notional port | supported ports. It is important to note that the client's notional | |||
number may be different from the actual port on which the server is | port number may be different from the actual port on which the server | |||
receiving connections. | is receiving connections. | |||
Differences between the client's notional port number and the actual | Differences between the client's notional port number and the actual | |||
port at the server could be a result of intermediate systems | port at the server could be a result of intermediate systems | |||
performing network address translation, or perhaps a result of a | performing network address translation or a result of a redirect via | |||
redirect via HTTPS or SVCB records (both defined in | HTTPS or SVCB records (both defined in [DNSOP-SVCB-HTTPS]). | |||
[I-D.ietf-dnsop-svcb-https]). | ||||
Though a DNS zone's HTTPS or SVCB records may be signed, a client | Though a DNS zone's HTTPS or SVCB records may be signed, a client | |||
using this protocol might not have direct access to a validating | using this protocol might not have direct access to a validating | |||
resolver, and might not be able to check the authenticity of the | resolver and might not be able to check the authenticity of the | |||
target port number or hostname. In order to avoid downgrade attacks | target port number or hostname. In order to avoid downgrade attacks | |||
via forged DNS records, the SNI name and port number inside the | via forged DNS records, the SNI name and port number inside the | |||
client extension MUST be based on the original SNI name and port and | client extension MUST be based on the original SNI name and port and | |||
MUST NOT be taken from the encountered HTTPS or SVCB record. The | MUST NOT be taken from the encountered HTTPS or SVCB record. The | |||
client supporting this document and HTTPS / SVCB records, MUST still | client supporting this document and HTTPS or SVCB records MUST still | |||
use the HTTPS or SVCB records to select the target transport | use the HTTPS or SVCB records to select the target transport | |||
endpoint. Servers supporting this extension that are targets of | endpoint. Servers supporting this extension that are targets of | |||
HTTPS or SVCB records MUST be provisioned to process client | HTTPS or SVCB records MUST be provisioned to process client | |||
extensions based on the client's logical service endpoint's SNI name | extensions based on the client's logical service endpoint's SNI name | |||
and port as it is prior to HTTPS or SVCB indirection. | and port as it is prior to HTTPS or SVCB indirection. | |||
2.2. Protocol, TLS 1.3 | 2.2. Protocol, TLS 1.3 | |||
In TLS 1.3 [RFC8446], when the server receives the "dnssec_chain" | In TLS 1.3 [RFC8446], when the server receives the "dnssec_chain" | |||
extension, it adds its "dnssec_chain" extension to the extension | extension, it adds its "dnssec_chain" extension to the extension | |||
block of the Certificate message containing the end entity | block of the Certificate message containing the end-entity | |||
certificate being validated, rather than to the extended ServerHello | certificate being validated rather than to the extended ServerHello | |||
message. | message. | |||
The extension protocol behavior otherwise follows that specified for | The extension protocol behavior otherwise follows that specified for | |||
TLS version 1.2 [RFC5246]. | TLS version 1.2 [RFC5246]. | |||
2.3. DNSSEC Authentication Chain Data | 2.3. DNSSEC Authentication Chain Data | |||
The "extension_data" field of the client's "dnssec_chain" extension | The "extension_data" field of the client's "dnssec_chain" extension | |||
MUST contain the server's 16-bit TCP port number in network (big- | MUST contain the server's 16-bit TCP port number in network (big- | |||
endian) byte order: | endian) byte order: | |||
struct { | struct { | |||
uint16 PortNumber; | uint16 PortNumber; | |||
} DnssecChainExtension; | } DnssecChainExtension; | |||
The "extension_data" field of the server's "dnssec_chain" extension | The "extension_data" field of the server's "dnssec_chain" extension | |||
MUST contain a DNSSEC Authentication Chain encoded in the following | MUST contain a DNSSEC authentication chain encoded in the following | |||
form: | form: | |||
struct { | struct { | |||
uint16 ExtSupportLifetime; | uint16 ExtSupportLifetime; | |||
opaque AuthenticationChain<1..2^16-1> | opaque AuthenticationChain<1..2^16-1> | |||
} DnssecChainExtension; | } DnssecChainExtension; | |||
The ExtSupportLifetime value is the number of hours for which the TLS | The ExtSupportLifetime value is the number of hours that the TLS | |||
server has committed itself to serving this extension. A value of | server has committed itself to serving this extension. A value of | |||
zero prohibits the client from unilaterally requiring ongoing use of | zero prohibits the client from unilaterally requiring ongoing use of | |||
the extension based on prior observation of its use (extension | the extension based on prior observation of its use (extension | |||
pinning). This is further described in Section 7. | pinning). This is further described in Section 7. | |||
The AuthenticationChain is composed of a sequence of uncompressed | The AuthenticationChain is composed of a sequence of uncompressed | |||
wire format DNS RRs (including all requisite RRSIG [RFC4034] RRs) in | wire format DNS RRs (including all requisite RRSIG RRs [RFC4034]) in | |||
no particular order. The format of the Resource Record is described | no particular order. The format of the resource record is described | |||
in [RFC1035], Section 3.2.1. | in [RFC1035], Section 3.2.1. | |||
RR = { owner, type, class, TTL, RDATA length, RDATA } | RR = { owner, type, class, TTL, RDATA length, RDATA } | |||
The order of returned RRs is unspecified and a TLS client MUST NOT | The order of returned RRs is unspecified, and a TLS client MUST NOT | |||
assume any ordering of RRs. | assume any ordering of RRs. | |||
Use of native DNS wire format records enables easier generation of | Use of DNS wire format records enables easier generation of the data | |||
the data structure on the server and easier verification of the data | structure on the server and easier verification of the data on the | |||
on client by means of existing DNS library functions. | client by means of existing DNS library functions. | |||
The returned RRsets MUST contain either the TLSA RRset or else the | The returned RRsets MUST contain either the TLSA RRset or the | |||
associated denial of existence proof of the configured (and | associated denial-of-existence proof of the configured (and | |||
requested) SNI name and port. In either case, the chain of RRsets | requested) SNI name and port. In either case, the chain of RRsets | |||
MUST be accompanied by the full set of DNS records needed to | MUST be accompanied by the full set of DNS records needed to | |||
authenticate the TLSA record set or its denial of existence up the | authenticate the TLSA record set or its denial of existence up the | |||
DNS hierarchy to either the Root Zone or another trust anchor | DNS hierarchy to either the root zone or another trust anchor | |||
mutually configured by the TLS server and client. | mutually configured by the TLS server and client. | |||
When some subtree in the chain is subject to redirection via DNAME | When some subtree in the chain is subject to redirection via DNAME | |||
records, the associated inferred CNAME records need not be included. | records, the associated inferred CNAME records need not be included. | |||
They can be inferred by the DNS validation code in the client. Any | They can be inferred by the DNS validation code in the client. Any | |||
applicable ordinary CNAME records that are not synthesized from DNAME | applicable ordinary CNAME records that are not synthesized from DNAME | |||
records MUST be included along with their RRSIGs. | records MUST be included along with their RRSIGs. | |||
In case of a server-side DNS problem, servers may be unable to | In case of a server-side DNS problem, servers may be unable to | |||
construct the authentication chain and would then have no choice but | construct the authentication chain and would then have no choice but | |||
to omit the extension. | to omit the extension. | |||
In the case of a denial of existence response, the authentication | In the case of a denial-of-existence response, the authentication | |||
chain MUST include all DNSSEC signed records from the trust-anchor | chain MUST include all DNSSEC-signed records, starting with those | |||
zone to a proof of either the non-existence of the (possibly | from the trust anchor zone, that chain together to reach a proof of | |||
redirected via aliases) TLSA records or else of an insecure | either: | |||
delegation above or at the (possibly redirected) owner name of the | ||||
requested TLSA RRset. | * the nonexistence of the TLSA records (possibly redirected via | |||
aliases) or | ||||
* an insecure delegation above or at the (possibly redirected) owner | ||||
name of the requested TLSA RRset. | ||||
Names that are aliased via CNAME and/or DNAME records may involve | Names that are aliased via CNAME and/or DNAME records may involve | |||
multiple branches of the DNS tree. In this case, the authentication | multiple branches of the DNS tree. In this case, the authentication | |||
chain structure needs to include DS and DNSKEY record sets that cover | chain structure needs to include DS and DNSKEY record sets that cover | |||
all the necessary branches. | all the necessary branches. | |||
The returned chain SHOULD also include the DNSKEY RRSets of all | The returned chain SHOULD also include the DNSKEY RRsets of all | |||
relevant trust anchors (typically just the root DNS zone). Though | relevant trust anchors (typically just the root DNS zone). Though | |||
the same trust anchors are presumably also preconfigured in the TLS | the same trust anchors are presumably also preconfigured in the TLS | |||
client, including them in the response from the server permits TLS | client, including them in the response from the server permits TLS | |||
clients to use the automated trust anchor rollover mechanism defined | clients to use the automated trust anchor rollover mechanism defined | |||
in [RFC5011] to update their configured trust anchors. | in [RFC5011] to update their configured trust anchors. | |||
Barring prior knowledge of particular trust anchors that the server | Barring prior knowledge of particular trust anchors that the server | |||
shares with its clients, the chain constructed by the server MUST be | shares with its clients, the chain constructed by the server MUST be | |||
extended as close as possible to the root zone. Truncation of the | extended as closely as possible to the root zone. Truncation of the | |||
chain at some intermediate trust anchor is generally only appropriate | chain at some intermediate trust anchor is generally only appropriate | |||
inside private networks where all clients and the server are expected | inside private networks where all clients and the server are expected | |||
to be configured with DNS trust anchors for one or more non-root | to be configured with DNS trust anchors for one or more non-root | |||
domains. | domains. | |||
The following is an example of the records in the AuthenticationChain | The following is an example of the records in the AuthenticationChain | |||
structure for the HTTPS server at "www.example.com", where there are | structure for the HTTPS server at "www.example.com", where there are | |||
zone cuts at "com." and "example.com." (record data are omitted here | zone cuts at "com" and "example.com" (record data are omitted here | |||
for brevity): | for brevity): | |||
_443._tcp.www.example.com. TLSA | _443._tcp.www.example.com. TLSA | |||
RRSIG(_443._tcp.www.example.com. TLSA) | RRSIG(_443._tcp.www.example.com. TLSA) | |||
example.com. DNSKEY | example.com. DNSKEY | |||
RRSIG(example.com. DNSKEY) | RRSIG(example.com. DNSKEY) | |||
example.com. DS | example.com. DS | |||
RRSIG(example.com. DS) | RRSIG(example.com. DS) | |||
com. DNSKEY | com. DNSKEY | |||
RRSIG(com. DNSKEY) | RRSIG(com. DNSKEY) | |||
com. DS | com. DS | |||
RRSIG(com. DS) | RRSIG(com. DS) | |||
. DNSKEY | . DNSKEY | |||
RRSIG(. DNSKEY) | RRSIG(. DNSKEY) | |||
The following is an example of denial of existence for a TLSA RRset | The following is an example of denial of existence for a TLSA RRset | |||
at "_443._tcp.www.example.com". The NSEC record in this example | at "_443._tcp.www.example.com". The NSEC record in this example | |||
asserts the non-existence of both the requested RRset and any | asserts the nonexistence of both the requested RRset and any | |||
potentially relevant wildcard records. | potentially relevant wildcard records. | |||
www.example.com. IN NSEC example.com. A NSEC RRSIG | www.example.com. IN NSEC example.com. A NSEC RRSIG | |||
RRSIG(www.example.com. NSEC) | RRSIG(www.example.com. NSEC) | |||
example.com. DNSKEY | example.com. DNSKEY | |||
RRSIG(example.com. DNSKEY) | RRSIG(example.com. DNSKEY) | |||
example.com. DS | example.com. DS | |||
RRSIG(example.com. DS) | RRSIG(example.com. DS) | |||
com. DNSKEY | com. DNSKEY | |||
RRSIG(com. DNSKEY) | RRSIG(com. DNSKEY) | |||
com. DS | com. DS | |||
RRSIG(com. DS) | RRSIG(com. DS) | |||
. DNSKEY | . DNSKEY | |||
RRSIG(. DNSKEY) | RRSIG(. DNSKEY) | |||
The following is an example of (hypothetical) insecure delegation of | The following is an example of (hypothetical) insecure delegation of | |||
"example.com" from the ".com" zone. This example shows NSEC3 | "example.com" from the ".com" zone. This example shows NSEC3 records | |||
[RFC5155] records with opt-out. | [RFC5155] with opt-out. | |||
; covers example.com | ; covers example.com | |||
onib9mgub9h0rml3cdf5bgrj59dkjhvj.com. NSEC3 (1 1 0 - | onib9mgub9h0rml3cdf5bgrj59dkjhvj.com. NSEC3 (1 1 0 - | |||
onib9mgub9h0rml3cdf5bgrj59dkjhvl NS DS RRSIG) | onib9mgub9h0rml3cdf5bgrj59dkjhvl NS DS RRSIG) | |||
RRSIG(onib9mgub9h0rml3cdf5bgrj59dkjhvj.com. NSEC3) | RRSIG(onib9mgub9h0rml3cdf5bgrj59dkjhvj.com. NSEC3) | |||
; covers *.com | ; covers *.com | |||
3rl2r262eg0n1ap5olhae7mah2ah09hi.com. NSEC3 (1 1 0 - | 3rl2r262eg0n1ap5olhae7mah2ah09hi.com. NSEC3 (1 1 0 - | |||
3rl2r262eg0n1ap5olhae7mah2ah09hk NS DS RRSIG) | 3rl2r262eg0n1ap5olhae7mah2ah09hk NS DS RRSIG) | |||
RRSIG(3rl2r262eg0n1ap5olhae7mah2ah09hj.com. NSEC3) | RRSIG(3rl2r262eg0n1ap5olhae7mah2ah09hj.com. NSEC3) | |||
; closest-encloser "com" | ; closest-encloser "com" | |||
skipping to change at page 9, line 52 ¶ | skipping to change at line 409 ¶ | |||
2.3.1. Authenticated Denial of Existence | 2.3.1. Authenticated Denial of Existence | |||
TLS servers that support this extension and respond to a request | TLS servers that support this extension and respond to a request | |||
containing this extension that do not have a signed TLSA record for | containing this extension that do not have a signed TLSA record for | |||
the configured (and requested) SNI name and port MUST instead return | the configured (and requested) SNI name and port MUST instead return | |||
a DNSSEC chain that provides authenticated denial of existence for | a DNSSEC chain that provides authenticated denial of existence for | |||
the configured SNI name and port. A TLS client receiving proof of | the configured SNI name and port. A TLS client receiving proof of | |||
authenticated denial of existence MUST use an alternative method to | authenticated denial of existence MUST use an alternative method to | |||
verify the TLS server identity or close the connection. Such an | verify the TLS server identity or close the connection. Such an | |||
alternative could be the classic PKIX model of preinstalled root | alternative could be the classic PKIX model of preinstalled root | |||
CA's. | certificate authorities (CAs). | |||
Authenticated denial chains include NSEC or NSEC3 records that | Authenticated denial chains include NSEC or NSEC3 records that | |||
demonstrate one of the following facts: | demonstrate one of the following facts: | |||
* The TLSA record (after any DNSSEC validated alias redirection) | * The TLSA record (after any DNSSEC-validated alias redirection) | |||
does not exist. | does not exist. | |||
* There is no signed delegation to a DNS zone which is either an | * There is no signed delegation to a DNS zone that is either an | |||
ancestor of, or the same as, the TLSA record name (after any | ancestor of or the same as the TLSA record name (after any DNSSEC- | |||
DNSSEC validated alias redirection). | validated alias redirection). | |||
3. Construction of Serialized Authentication Chains | 3. Construction of Serialized Authentication Chains | |||
This section describes a possible procedure for the server to use to | This section describes a possible procedure for the server to use to | |||
build the serialized DNSSEC chain. | build the serialized DNSSEC chain. | |||
When the goal is to perform DANE authentication [RFC6698][RFC7671] of | When the goal is to perform DANE authentication [RFC6698] [RFC7671] | |||
the server, the DNS record set to be serialized is a TLSA record set | of the server, the DNS record set to be serialized is a TLSA record | |||
corresponding to the server's domain name, protocol, and port number. | set corresponding to the server's domain name, protocol, and port | |||
number. | ||||
The domain name of the server MUST be that included in the TLS | The domain name of the server MUST be that included in the TLS | |||
"server_name" (SNI) extension [RFC6066]. If the server does not | "server_name" (SNI) extension [RFC6066]. If the server does not | |||
recognize the SNI name as one if its own names, but wishes to proceed | recognize the SNI name as one of its own names but wishes to proceed | |||
with the handshake rather than to abort the connection, the server | with the handshake rather than abort the connection, the server MUST | |||
MUST NOT send a "dnssec_chain" extension to the client. | NOT send a "dnssec_chain" extension to the client. | |||
The name in client's SNI extension MUST NOT be CNAME-expanded by the | The name in the client's SNI extension MUST NOT be CNAME expanded by | |||
server. The TLSA base domain (Section 3 of [RFC6698]) SHALL be the | the server. The TLSA base domain (Section 3 of [RFC6698]) SHALL be | |||
hostname from the client's SNI extension and the guidance in | the hostname from the client's SNI extension, and the guidance in | |||
Section 7 of [RFC7671] does not apply. See Section 9 for further | Section 7 of [RFC7671] does not apply. See Section 9 for further | |||
discussion. | discussion. | |||
The TLSA record to be queried is constructed by prepending | The TLSA record to be queried is constructed by prepending | |||
underscore-prefixed port number and transport name labels to the | underscore-prefixed port number and transport name labels to the | |||
domain name as described in [RFC6698]. The port number is taken from | domain name as described in [RFC6698]. The port number is taken from | |||
the client's "dnssec_chain" extension. The transport name is "tcp" | the client's "dnssec_chain" extension. The transport name is "tcp" | |||
for TLS servers, and "udp" for DTLS servers. The port number label | for TLS servers and "udp" for DTLS servers. The port number label is | |||
is the left-most label, followed by the transport name label, | the leftmost label, followed by the transport name label, followed by | |||
followed by the server domain name (from SNI). | the server domain name (from SNI). | |||
The components of the authentication chain are typically built by | The components of the authentication chain are typically built by | |||
starting at the target record set and its corresponding RRSIG. Then | starting at the target record set and its corresponding RRSIG, then | |||
traversing the DNS tree upwards towards the trust anchor zone | traversing the DNS tree upwards towards the trust anchor zone | |||
(normally the DNS root). For each zone cut, the DNSKEY and DS RRsets | (normally the DNS root). For each zone cut, the DNSKEY, DS RRsets, | |||
and their signatures are added. However, see Section 2.3 for | and their signatures are added. However, see Section 2.3 for | |||
specific processing needed for aliases. If DNS response messages | specific processing needed for aliases. If DNS response messages | |||
contain any domain names utilizing name compression [RFC1035], then | contain any domain names utilizing name compression [RFC1035], then | |||
they MUST be uncompressed prior to inclusion in the chain. | they MUST be uncompressed prior to inclusion in the chain. | |||
Implementations of EDNS Chain Query Requests as specified in | Implementations of EDNS CHAIN query requests as specified in | |||
[RFC7901] may offer an easier way to obtain all of the chain data in | [RFC7901] may offer an easier way to obtain all of the chain data in | |||
one transaction with an upstream DNSSEC aware recursive server. | one transaction with an upstream DNSSEC-aware recursive server. | |||
4. Caching and Regeneration of the Authentication Chain | 4. Caching and Regeneration of the Authentication Chain | |||
DNS records have Time To Live (TTL) parameters, and DNSSEC signatures | DNS records have Time To Live (TTL) parameters, and DNSSEC signatures | |||
have validity periods (specifically signature expiration times). | have validity periods (specifically signature expiration times). | |||
After the TLS server constructs the serialized authentication chain, | After the TLS server constructs the serialized authentication chain, | |||
it SHOULD cache and reuse it in multiple TLS connection handshakes. | it SHOULD cache and reuse it in multiple TLS connection handshakes. | |||
However, it SHOULD refresh and rebuild the chain as TTL values | However, it SHOULD refresh and rebuild the chain as TTL values | |||
require. A server implementation could carefully track TTL | require. A server implementation could carefully track TTL | |||
parameters and requery component records in the chain | parameters and requery component records in the chain | |||
correspondingly. Alternatively, it could be configured to rebuild | correspondingly. Alternatively, it could be configured to rebuild | |||
the entire chain at some predefined periodic interval that does not | the entire chain at some predefined periodic interval that does not | |||
exceed the DNS TTLs of the component records in the chain. If a | exceed the DNS TTLs of the component records in the chain. If a | |||
record in the chain has a very short TTL (eg 0 up to a few seconds), | record in the chain has a very short TTL (e.g., 0 up to a few | |||
the server MAY decide to serve the authentication chain a few seconds | seconds), the server MAY decide to serve the authentication chain a | |||
past the minimum TTL in the chain. This allows an implementation to | few seconds past the minimum TTL in the chain. This allows an | |||
dedicate a process or single thread to building the authentication | implementation to dedicate a process or single thread to building the | |||
chain and re-use it for more than a single waiting TLS client before | authentication chain and reuse it for more than a single waiting TLS | |||
needing to rebuild the authentication chain. | client before needing to rebuild the authentication chain. | |||
5. Expired signatures in the Authentication Chain | 5. Expired Signatures in the Authentication Chain | |||
A server MAY look at the signature expiration of RRSIG records. | A server MAY look at the signature expiration of RRSIG records. | |||
While these should never expire before the TTL of the corresponding | While these should never expire before the TTL of the corresponding | |||
DNS record is reached, if this situation is encountered nevertheless, | DNS record is reached, if this situation is nevertheless encountered, | |||
the server MAY lower the TTL to prevent serving expired RRSIGs if | the server MAY lower the TTL to prevent serving expired RRSIGs if | |||
possible. If the signatures are already expired, the server MUST | possible. If the signatures are already expired, the server MUST | |||
still include these records into the authentication chain. This | still include these records in the authentication chain. This allows | |||
allows the TLS client to either support a grace period for staleness, | the TLS client to either support a grace period for staleness or give | |||
or allows the TLS client to give a detailed error, either as log | a detailed error, either as a log message or a message to a potential | |||
message or to a potential interactive user of the TLS connection. | interactive user of the TLS connection. The TLS client SHOULD handle | |||
The TLS client SHOULD handle expired RRSIGs similar to how it handles | expired RRSIGs similarly to how it handles expired PKIX certificates. | |||
expired PKIX certificates. | ||||
6. Verification | 6. Verification | |||
A TLS client performing DANE based verification might not need to use | A TLS client performing DANE-based verification might not need to use | |||
this extension. For example, the TLS client could perform native DNS | this extension. For example, the TLS client could perform DNS | |||
lookups and perform DANE verification without this extension. Or it | lookups and DANE verification without this extension, or it could | |||
could fetch authentication chains via another protocol. If the TLS | fetch authentication chains via another protocol. If the TLS client | |||
client already possesses a valid TLSA record, it MAY omit using this | already possesses a valid TLSA record, it MAY bypass use of this | |||
extension. However, if it includes this extension, it MUST use the | extension. However, if it includes this extension, it MUST use the | |||
TLS server reply to update the extension pinning status of the TLS | TLS server reply to update the extension pinning status of the TLS | |||
server's extension lifetime. See Section 7. | server's extension lifetime. See Section 7. | |||
A TLS client making use of this specification, and which receives a | A TLS client making use of this specification that receives a valid | |||
valid DNSSEC authentication chain extension from a TLS server, MUST | DNSSEC authentication chain extension from a TLS server MUST use this | |||
use this information to perform DANE authentication of the TLS | information to perform DANE authentication of the TLS server. In | |||
server. In order to perform the validation, it uses the mechanism | order to perform the validation, it uses the mechanism specified by | |||
specified by the DNSSEC protocol [RFC4035][RFC5155]. This mechanism | the DNSSEC protocol [RFC4035] [RFC5155]. This mechanism is sometimes | |||
is sometimes implemented in a DNSSEC validation engine or library. | implemented in a DNSSEC validation engine or library. | |||
If the authentication chain validates, the TLS client then performs | If the authentication chain validates, the TLS client then performs | |||
DANE authentication of the server according to the DANE TLS protocol | DANE authentication of the server according to the DANE TLS protocol | |||
[RFC6698][RFC7671]. | [RFC6698] [RFC7671]. | |||
Clients MAY cache the server's validated TLSA RRset to amortize the | Clients MAY cache the server's validated TLSA RRset to amortize the | |||
cost of receiving and validating the chain over multiple connections. | cost of receiving and validating the chain over multiple connections. | |||
The period of such caching MUST NOT exceed the TTL associated with | The period of such caching MUST NOT exceed the TTL associated with | |||
those records. A client that possesses a validated and unexpired | those records. A client that possesses a validated and unexpired | |||
TLSA RRset or the full chain in its cache does not need to send the | TLSA RRset or the full chain in its cache does not need to send the | |||
"dnssec_chain" extension for subsequent connections to the same TLS | "dnssec_chain" extension for subsequent connections to the same TLS | |||
server. It can use the cached information to perform DANE | server. It can use the cached information to perform DANE | |||
authentication. | authentication. | |||
Note that when a client and server perform TLS session resumption the | Note that when a client and server perform TLS session resumption, | |||
server sends no "dnssec_chain". This is particularly clear with TLS | the server sends no "dnssec_chain". This is particularly clear with | |||
1.3, where the certificate message to which the chain might be | TLS 1.3, where the certificate message to which the chain might be | |||
attached is also not sent on resumption. | attached is also not sent on resumption. | |||
7. Extension Pinning | 7. Extension Pinning | |||
TLS applications can be designed to unconditionally mandate this | TLS applications can be designed to unconditionally mandate this | |||
extension. Such TLS clients requesting this extension would abort a | extension. Such TLS clients requesting this extension would abort a | |||
connection to a TLS server that does not respond with a validatable | connection to a TLS server that does not respond with an extension | |||
extension reply. | reply that can be validated. | |||
However, in a mixed-use deployment of PKIX and DANE, there is the | However, in a mixed-use deployment of PKIX and DANE, there is the | |||
possibility that the security of a TLS client is downgraded from DANE | possibility that the security of a TLS client is downgraded from DANE | |||
to PKIX. This can happen when a TLS client connection is intercepted | to PKIX. This can happen when a TLS client connection is intercepted | |||
and redirected to a rogue TLS server presenting a TLS certificate | and redirected to a rogue TLS server presenting a TLS certificate | |||
that is considered valid from a PKIX point of view, but one that does | that is considered valid from a PKIX point of view but does not match | |||
not match the legitimate server's TLSA records. By omitting this | the legitimate server's TLSA records. By omitting this extension, | |||
extension, such a rogue TLS server could downgrade the TLS client to | such a rogue TLS server could downgrade the TLS client to validate | |||
validate the mis-issued certificate using only PKIX and not via DANE, | the mis-issued certificate using only PKIX and not via DANE, provided | |||
provided the TLS client is also not able to fetch the TLSA records | the TLS client is also not able to fetch the TLSA records directly | |||
directly from DNS. | from DNS. | |||
The ExtSupportLifetime element of the extension provides a | The ExtSupportLifetime element of the extension provides a | |||
countermeasure against such downgrade attacks. Its value represents | countermeasure against such downgrade attacks. Its value represents | |||
the number of hours that the TLS server (or cluster of servers | the number of hours that the TLS server (or cluster of servers | |||
serving the same Server Name) commit to serving this extension in the | serving the same server name) commits to serving this extension in | |||
future. This is referred to as the "pinning time" or "extension pin" | the future. This is referred to as the "pinning time" or "extension | |||
of the extension. A non-zero extension pin value received MUST ONLY | pin" of the extension. A non-zero extension pin value received MUST | |||
be used if the extension also contains a valid TLSA authentication | ONLY be used if the extension also contains a valid TLSA | |||
chain that matches the server's certificate chain (the server passes | authentication chain that matches the server's certificate chain (the | |||
DANE authentication based on the enclosed TLSA RRset). | server passes DANE authentication based on the enclosed TLSA RRset). | |||
Any existing extension pin for the server instance (name and port) | Any existing extension pin for the server instance (name and port) | |||
MUST be cleared on receipt of a valid denial of existence for the | MUST be cleared on receipt of a valid denial of existence for the | |||
associated TLSA RRset. The same also applies if the client obtained | associated TLSA RRset. The same also applies if the client obtained | |||
the denial of existence proof via another method, such as through | the denial-of-existence proof via another method, such as through | |||
direct DNS queries. Based on the TLS client's local policy, it MAY | direct DNS queries. Based on the TLS client's local policy, it MAY | |||
then terminate the connection or MAY continue using PKIX based server | then terminate the connection or MAY continue using PKIX-based server | |||
authentication. | authentication. | |||
Extension pins MUST also be cleared upon the completion of a DANE | Extension pins MUST also be cleared upon the completion of a DANE- | |||
authenticated handshake with a server that returns a "dnssec_chain" | authenticated handshake with a server that returns a "dnssec_chain" | |||
extension with a zero ExtSupportLifetime. | extension with a zero ExtSupportLifetime. | |||
Upon completion of a full validated handshake with a server that | Upon completion of a fully validated handshake with a server that | |||
returns a "dnssec_chain" extension with a non-zero ExtSupport | returns a "dnssec_chain" extension with a non-zero ExtSupport | |||
lifetime, the client MUST update any existing pin lifetime for the | lifetime, the client MUST update any existing pin lifetime for the | |||
service (name and port) to a value that is no longer than that | service (name and port) to a value that is not longer than that | |||
indicated by the server. The client MAY, subject to local policy, | indicated by the server. The client MAY, subject to local policy, | |||
create a previously non-existent pin, again for a lifetime that is | create a previously nonexistent pin, again for a lifetime that is not | |||
not longer than that indicated by the server. | longer than that indicated by the server. | |||
The extension support lifetime is not constrained by any DNS TTLs or | The extension support lifetime is not constrained by any DNS TTLs or | |||
RRSIG expirations in the returned chain. The extension support | RRSIG expirations in the returned chain. The extension support | |||
lifetime is the time for which the TLS server is committing itself to | lifetime is the time for which the TLS server is committing itself to | |||
serve the extension; it is not a validity time for the returned chain | serve the extension; it is not a validity time for the returned chain | |||
data. During this period the DNSSEC chain may be updated. | data. During this period, the DNSSEC chain may be updated. | |||
Therefore, the ExtSupportLifetime value is not constrained by any DNS | Therefore, the ExtSupportLifetime value is not constrained by any DNS | |||
TTLs or RRSIG expirations in the returned chain. | TTLs or RRSIG expirations in the returned chain. | |||
Clients MAY implement support for a subset of DANE certificate | Clients MAY implement support for a subset of DANE certificate | |||
usages. For example, clients may support only DANE-EE(3) and DANE- | usages. For example, clients may support only DANE-EE(3) and DANE- | |||
TA(2) [RFC7218], only PKIX-EE(1) and PKIX-TA(0) or all four. Clients | TA(2) [RFC7218], only PKIX-EE(1) and PKIX-TA(0), or all four. | |||
that implement DANE-EE(3) and DANE-TA(2) MUST implement the relevant | Clients that implement DANE-EE(3) and DANE-TA(2) MUST implement the | |||
updates in [RFC7671]. | relevant updates in [RFC7671]. | |||
For a non-zero saved value ("pin") of the ExtSupportLifetime element | For a non-zero saved value ("pin") of the ExtSupportLifetime element | |||
of the extension, TLS clients that do not have a cached TLSA RRset | of the extension, TLS clients that do not have a cached TLSA RRset | |||
with an unexpired TTL MUST use the extension for the associated name | with an unexpired TTL MUST use the extension for the associated name | |||
and port to obtain this information from the TLS server. This TLS | and port to obtain this information from the TLS server. This TLS | |||
client then MUST require that the TLS server responds with this | client then MUST require that the TLS server respond with this | |||
extension that MUST contain a valid TLSA RRset or proof of non- | extension, which MUST contain a valid TLSA RRset or proof of | |||
existence of the TLSA RRset that covers the requested name and port. | nonexistence of the TLSA RRset that covers the requested name and | |||
Note that a non-existence proof or proof of insecure delegation will | port. Note that a nonexistence proof or proof of insecure delegation | |||
clear the pin. The TLS client MUST require this for as long as the | will clear the pin. The TLS client MUST require this for as long as | |||
time period specified by the pin value, independent of the DNS TTLs. | the time period specified by the pin value, independent of the DNS | |||
If during this process, the TLS client fails to receive this | TTLs. During this process, if the TLS client fails to receive this | |||
information, it MUST either abort the connection or delay | information, it MUST either abort the connection or delay | |||
communication with the server via the TLS connection until it is able | communication with the server via the TLS connection until it is able | |||
to obtain valid TLSA records (or proof of non-existence) out of band, | to obtain valid TLSA records (or proof of nonexistence) out of band, | |||
such as via direct DNS lookups. If attempts to obtain the TLSA RRset | such as via direct DNS lookups. If attempts to obtain the TLSA RRset | |||
out of band fail, the client MUST abort the TLS connection. It MAY | out of band fail, the client MUST abort the TLS connection. It MAY | |||
try a new TLS connection again, for example using an exponential | try a new TLS connection again (for example, using an exponential | |||
back-off timer, in an attempt to reach a different TLS server | back-off timer) in an attempt to reach a different TLS server | |||
instance that does properly serve the extension. | instance that does properly serve the extension. | |||
A TLS client that has a cached validated TLSA RRset and a valid non- | A TLS client that has a cached validated TLSA RRset and a valid non- | |||
zero extension pin time MAY still refrain from requesting the | zero extension pin time MAY still refrain from requesting the | |||
extension as long as it uses the cached TLSA RRset to authenticate | extension as long as it uses the cached TLSA RRset to authenticate | |||
the TLS server. This RRset MUST NOT be used beyond its received TTL. | the TLS server. This RRset MUST NOT be used beyond its received TTL. | |||
Once the TLSA RRset's TTL has expired, the TLS client with a valid | Once the TLSA RRset's TTL has expired, the TLS client with a valid | |||
non-zero extension pin time MUST request the extension and MUST abort | non-zero extension pin time MUST request the extension and MUST abort | |||
the TLS connection if the server responds without the extension. A | the TLS connection if the server responds without the extension. A | |||
TLS client MAY attempt to obtain the valid TLSA RRset by some other | TLS client MAY attempt to obtain the valid TLSA RRset by some other | |||
means before initiating a new TLS connection. | means before initiating a new TLS connection. | |||
Note that requiring the extension is NOT the same as requiring the | Note that requiring the extension is NOT the same as requiring the | |||
use of DANE TLSA records or even DNSSEC. A DNS zone operator may at | use of DANE TLSA records or even DNSSEC. A DNS zone operator may at | |||
any time delete the TLSA records, or even remove the DS records to | any time delete the TLSA records or even remove the DS records to | |||
disable the secure delegation of the server's DNS zone. The TLS | disable the secure delegation of the server's DNS zone. The TLS | |||
server will, when it updates its cached TLSA authentication chain, | server will replace the chain with the corresponding denial-of- | |||
replace the chain with the corresponding denial of existence chain. | existence chain when it updates its cached TLSA authentication chain. | |||
The server's only obligation is continued support for this extension. | The server's only obligation is continued support for this extension. | |||
8. Trust Anchor Maintenance | 8. Trust Anchor Maintenance | |||
The trust anchor may change periodically, e.g. when the operator of | The trust anchor may change periodically, e.g., when the operator of | |||
the trust anchor zone performs a DNSSEC key rollover. TLS clients | the trust anchor zone performs a DNSSEC key rollover. TLS clients | |||
using this specification MUST implement a mechanism to keep their | using this specification MUST implement a mechanism to keep their | |||
trust anchors up to date. They could use the method defined in | trust anchors up to date. They could use the method defined in | |||
[RFC5011] to perform trust anchor updates inband in TLS, by tracking | [RFC5011] to perform trust anchor updates in-band in TLS by tracking | |||
the introduction of new keys seen in the trust anchor DNSKEY RRset. | the introduction of new keys seen in the trust anchor DNSKEY RRset. | |||
However, alternative mechanisms external to TLS may also be utilized. | However, alternative mechanisms external to TLS may also be utilized. | |||
Some operating systems may have a system-wide service to maintain and | Some operating systems may have a system-wide service to maintain and | |||
keep the root trust anchor up to date. In such cases, the TLS client | keep the root trust anchor up to date. In such cases, the TLS client | |||
application could simply reference that as its trust anchor, | application could simply reference that as its trust anchor, | |||
periodically checking whether it has changed. Some applications may | periodically checking whether it has changed. Some applications may | |||
prefer to implement trust anchor updates as part of their automated | prefer to implement trust anchor updates as part of their automated | |||
software updates. | software updates. | |||
9. Virtual Hosting | 9. Virtual Hosting | |||
Delivery of application services is often provided by a third party | Delivery of application services is often provided by a third party | |||
on behalf of the domain owner (hosting customer). Since the domain | on behalf of the domain owner (hosting customer). Since the domain | |||
owner may want to be able to move the service between providers, non- | owner may want to be able to move the service between providers, non- | |||
zero support lifetimes for this extension should only be enabled by | zero support lifetimes for this extension should only be enabled by | |||
mutual agreement between the provider and domain owner. | mutual agreement between the provider and domain owner. | |||
When CNAME records are employed to redirect network connections to | When CNAME records are employed to redirect network connections to | |||
the provider's network, as mentioned in Section 3 the server uses the | the provider's network, as mentioned in Section 3, the server uses | |||
client's SNI hostname as the TLSA base domain without CNAME | the client's SNI hostname as the TLSA base domain without CNAME | |||
expansion. When the certificate chain for the service is managed by | expansion. When the certificate chain for the service is managed by | |||
the provider, it is impractical to coordinate certificate changes by | the provider, it is impractical to coordinate certificate changes by | |||
the provider with updates in the hosting customer's DNS. Therefore, | the provider with updates in the hosting customer's DNS. Therefore, | |||
the TLSA RRset for the hosted domain is best configured as a CNAME | the TLSA RRset for the hosted domain is best configured as a CNAME | |||
from the customer's domain to a TLSA RRset that is managed by the | from the customer's domain to a TLSA RRset that is managed by the | |||
provider as part of delivering the hosted service. For example: | provider as part of delivering the hosted service. For example: | |||
; Customer DNS | ; Customer DNS | |||
www.example.com. IN CNAME node1.provider.example. | www.example.com. IN CNAME node1.provider.example. | |||
_443._tcp.www.example.com. IN CNAME _dane443.node1.provider.example. | _443._tcp.www.example.com. IN CNAME _dane443.node1.provider.example. | |||
; Provider DNS | ; Provider DNS | |||
node1.provider.example. IN A 192.0.2.1 | node1.provider.example. IN A 192.0.2.1 | |||
_dane443.node1.provider.example. IN TLSA 1 1 1 ... | _dane443.node1.provider.example. IN TLSA 1 1 1 ... | |||
Clients that obtain TLSA records directly from DNS, bypassing this | Clients that obtain TLSA records directly from DNS, bypassing this | |||
extension, may however perform CNAME-expansion as in Section 7 of | extension, may perform CNAME expansion as in Section 7 of [RFC7671]. | |||
[RFC7671], and if TLSA records are associated with the fully-expanded | If TLSA records are associated with the fully expanded name, that | |||
name, may use that name as the TLSA base domain and SNI name for the | name may be used as the TLSA base domain and SNI name for the TLS | |||
TLS handshake. | handshake. | |||
To avoid confusion, it is RECOMMENDED that server operators not | To avoid confusion, it is RECOMMENDED that server operators not | |||
publish TLSA RRs (_port._tcp. + base domain) based on the expanded | publish TLSA RRs (_port._tcp. + base domain) based on the expanded | |||
CNAMEs used to locate their network addresses. Instead, the server | CNAMEs used to locate their network addresses. Instead, the server | |||
operator SHOULD publish TLSA RRs at an alternative DNS node (as in | operator SHOULD publish TLSA RRs at an alternative DNS node (as in | |||
the example above), to which the hosting customer will publish a | the example above), to which the hosting customer will publish a | |||
CNAME alias. This results in all clients (whether they obtain TLSA | CNAME alias. This results in all clients (whether they obtain TLSA | |||
records from DNS directly, or employ this extension) seeing the same | records from DNS directly or employ this extension) seeing the same | |||
TLSA records and sending the same SNI name. | TLSA records and sending the same SNI name. | |||
10. Operational Considerations | 10. Operational Considerations | |||
When DANE is being introduced incrementally into an existing PKIX | When DANE is being introduced incrementally into an existing PKIX | |||
environment, there may be scenarios in which DANE authentication for | environment, there may be scenarios in which DANE authentication for | |||
a server fails but PKIX succeeds, or vice versa. What happens here | a server fails but PKIX succeeds, or vice versa. What happens here | |||
depends on TLS client policy. If DANE authentication fails, the | depends on TLS client policy. If DANE authentication fails, the | |||
client may decide to fall back to traditional PKIX authentication. | client may decide to fall back to regular PKIX authentication. In | |||
In order to do so efficiently within the same TLS handshake, the TLS | order to do so efficiently within the same TLS handshake, the TLS | |||
server needs to have provided the full X.509 certificate chain. When | server needs to have provided the full X.509 certificate chain. When | |||
TLS servers only support DANE-EE or DANE-TA modes, they have the | TLS servers only support DANE-EE or DANE-TA modes, they have the | |||
option to send a much smaller certificate chain: just the EE | option to send a much smaller certificate chain: just the EE | |||
certificate for the former, and a short certificate chain from the | certificate for the former and a short certificate chain from the | |||
DANE trust anchor to the EE certificate for the latter. If the TLS | DANE trust anchor to the EE certificate for the latter. If the TLS | |||
server supports both DANE and traditional PKIX, and wants to allow | server supports both DANE and regular PKIX and wants to allow | |||
efficient PKIX fallback within the same handshake, they should always | efficient PKIX fallback within the same handshake, they should always | |||
provide the full X.509 certificate chain. | provide the full X.509 certificate chain. | |||
When a TLS server operator wishes to no longer deploy this extension, | When a TLS server operator wishes to no longer deploy this extension, | |||
it must properly decommission its use. If a non-zero pin lifetime is | it must properly decommission its use. If a non-zero pin lifetime is | |||
presently advertised, it must first be changed to 0. The extension | presently advertised, it must first be changed to 0. The extension | |||
can be disabled once all previously advertised pin lifetimes have | can be disabled once all previously advertised pin lifetimes have | |||
expired. Removal of TLSA records or even DNSSEC signing of the zone | expired. Removal of TLSA records or even DNSSEC signing of the zone | |||
can be done at any time, but the server MUST still be able to return | can be done at any time, but the server MUST still be able to return | |||
the associated denial of existence proofs to any clients that have | the associated denial-of-existence proofs to any clients that have | |||
unexpired pins. | unexpired pins. | |||
TLS clients MAY reduce the received extension pin value to a maximum | TLS clients MAY reduce the received extension pin value to a maximum | |||
set by local policy. This can mitigate a theoretical yet unlikely | set by local policy. This can mitigate a theoretical yet unlikely | |||
attack where a compromised TLS server is modified to advertise a pin | attack where a compromised TLS server is modified to advertise a pin | |||
value set to the maximum of 7 years. Care should be taken not to set | value set to the maximum of 7 years. Care should be taken not to set | |||
a local maximum that is too short as that would reduce the downgrade | a local maximum that is too short as that would reduce the downgrade | |||
attack protection that the extension pin offers. | attack protection that the extension pin offers. | |||
If the hosting provider intends to use end-entity TLSA records | If the hosting provider intends to use end-entity TLSA records | |||
(certificate usage PKIX-EE(1) or DANE-EE(3)) then the simplest | (certificate usage PKIX-EE(1) or DANE-EE(3)), then the simplest | |||
approach is to use the same key-pair for all the certificates at a | approach is to use the same key pair for all the certificates at a | |||
given hosting node, and publish "1 1 1" or "3 1 1" RRs matching the | given hosting node and publish "1 1 1" or "3 1 1" RRs matching the | |||
common public key. Since key rollover cannot be simultaneous across | common public key. Since key rollover cannot be simultaneous across | |||
multiple certificate updates, there will be times when multiple "1 1 | multiple certificate updates, there will be times when multiple "1 1 | |||
1" (or "3 1 1") records will be required to match all the extant | 1" (or "3 1 1") records will be required to match all the extant | |||
certificates. Multiple TLSA records are in any case needed a few | certificates. Multiple TLSA records are, in any case, needed a few | |||
TTLs before certificate updates as explained in Section 8 of | TTLs before certificate updates as explained in Section 8 of | |||
[RFC7671]. | [RFC7671]. | |||
If the hosting provider intends to use trust-anchor TLSA records | If the hosting provider intends to use trust anchor TLSA records | |||
(certificate usage PKIX-TA(0) or DANE-TA(2)) then the same TLSA | (certificate usage PKIX-TA(0) or DANE-TA(2)), then the same TLSA | |||
record can match all end-entity certificates issues by the | record can match all end-entity certificates issues by the | |||
certification authority in question, and continues to work across | certification authority in question and continues to work across end- | |||
end-entity certificate updates, so long as the issuer certificate or | entity certificate updates so long as the issuer certificate or | |||
public keys remains unchanged. This can be easier to implement, at | public keys remain unchanged. This can be easier to implement at the | |||
the cost of greater reliance on the security of the selected | cost of greater reliance on the security of the selected | |||
certification authority. | certification authority. | |||
The provider can of course publish separate TLSA records for each | The provider can, of course, publish separate TLSA records for each | |||
customer, which increases the number of such RRsets that need to be | customer, which increases the number of such RRsets that need to be | |||
managed, but makes each one independent of the rest. | managed but makes each one independent of the rest. | |||
11. Security Considerations | 11. Security Considerations | |||
The security considerations of the normatively referenced RFCs all | The security considerations of the normatively referenced RFCs all | |||
pertain to this extension. Since the server is delivering a chain of | pertain to this extension. Since the server is delivering a chain of | |||
DNS records and signatures to the client, it MUST rebuild the chain | DNS records and signatures to the client, it MUST rebuild the chain | |||
in accordance with TTL and signature expiration of the chain | in accordance with TTL and signature expiration of the chain | |||
components as described in Section 4. TLS clients need roughly | components as described in Section 4. TLS clients need roughly | |||
accurate time in order to properly authenticate these signatures. | accurate time in order to properly authenticate these signatures. | |||
This could be achieved by running a time synchronization protocol | This could be achieved by running a time synchronization protocol | |||
like NTP [RFC5905] or SNTP [RFC5905], which are already widely used | like NTP [RFC5905] or SNTP [RFC5905], which are already widely used | |||
today. TLS clients MUST support a mechanism to track and roll over | today. TLS clients MUST support a mechanism to track and roll over | |||
the trust anchor key, or be able to avail themselves of a service | the trust anchor key or be able to avail themselves of a service that | |||
that does this, as described in Section 8. Security considerations | does this, as described in Section 8. Security considerations | |||
related to mandating the use of this extension are described in | related to mandating the use of this extension are described in | |||
Section 7. | Section 7. | |||
The received DNSSEC chain could contain DNS RRs that are not related | The received DNSSEC chain could contain DNS RRs that are not related | |||
to the TLSA verification of the intended DNS name. If such a | to the TLSA verification of the intended DNS name. If such an | |||
unrelated RR is not DNSSEC signed, it MUST be disgarded. If the | unrelated RR is not DNSSEC signed, it MUST be discarded. If the | |||
unrelated RRset is DNSSEC signed, the TLS client MAY decide to add | unrelated RRset is DNSSEC signed, the TLS client MAY decide to add | |||
these RRsets and their DNSSEC signatures to its cache. It MAY even | these RRsets and their DNSSEC signatures to its cache. It MAY even | |||
pass this data to the local system resolver for caching outside the | pass this data to the local system resolver for caching outside the | |||
application. However, care must be taken that caching these records | application. However, care must be taken because caching these | |||
could be used for timing and caching attacks to de-anonymize the TLS | records could be used for timing and caching attacks to de-anonymize | |||
client or its user. A TLS client that wants to present the strongest | the TLS client or its user. A TLS client that wants to present the | |||
anonymity protection to their users, MUST refrain from using and | strongest anonymity protection to their users MUST refrain from using | |||
caching all unrelated RRs. | and caching all unrelated RRs. | |||
12. IANA Considerations | 12. IANA Considerations | |||
This document defines one new entry in the TLS ExtensionType Values | IANA has made the following assignment in the "TLS ExtensionType | |||
registry: | Values" registry: | |||
+-------+----------------+---------+-------------+-----------------+ | +=======+================+=========+=============+===========+ | |||
| Value | Extension Name | TLS 1.3 | Recommended | Reference | | | Value | Extension Name | TLS 1.3 | Recommended | Reference | | |||
+-------+----------------+---------+-------------+-----------------+ | +=======+================+=========+=============+===========+ | |||
| TBD | dnssec_chain | CH | No | [this document] | | | 59 | dnssec_chain | CH | No | RFC 9102 | | |||
+-------+----------------+---------+-------------+-----------------+ | +-------+----------------+---------+-------------+-----------+ | |||
Table 1 | Table 1 | |||
13. Acknowledgments | 13. References | |||
Many thanks to Adam Langley for laying the groundwork for this | ||||
extension in [I-D.agl-dane-serializechain]. The original idea is his | ||||
but our acknowledgment in no way implies his endorsement. This | ||||
document also benefited from discussions with and review from the | ||||
following people: Daniel Kahn Gillmor, Jeff Hodges, Allison Mankin, | ||||
Patrick McManus, Rick van Rein, Ilari Liusvaara, Eric Rescorla, Gowri | ||||
Visweswaran, Duane Wessels, Nico Williams, and Richard Barnes. | ||||
14. Normative References | 13.1. Normative References | |||
[RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
November 1987, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
skipping to change at page 19, line 43 ¶ | skipping to change at line 862 ¶ | |||
[RFC8310] Dickinson, S., Gillmor, D., and T. Reddy, "Usage Profiles | [RFC8310] Dickinson, S., Gillmor, D., and T. Reddy, "Usage Profiles | |||
for DNS over TLS and DNS over DTLS", RFC 8310, | for DNS over TLS and DNS over DTLS", RFC 8310, | |||
DOI 10.17487/RFC8310, March 2018, | DOI 10.17487/RFC8310, March 2018, | |||
<https://www.rfc-editor.org/info/rfc8310>. | <https://www.rfc-editor.org/info/rfc8310>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
15. Informative References | 13.2. Informative References | |||
[I-D.agl-dane-serializechain] | ||||
Langley, A., "Serializing DNS Records with DNSSEC | ||||
Authentication", Work in Progress, Internet-Draft, draft- | ||||
agl-dane-serializechain-01, 1 July 2011, | ||||
<https://tools.ietf.org/html/draft-agl-dane- | ||||
serializechain-01>. | ||||
[I-D.barnes-dane-uks] | [DANE-UKS] Barnes, R., Thomson, M., and E. Rescorla, "Unknown Key- | |||
Barnes, R., Thomson, M., and E. Rescorla, "Unknown Key- | Share Attacks on DNS-Based Authentications of Named | |||
Share Attacks on DNS-based Authentications of Named | ||||
Entities (DANE)", Work in Progress, Internet-Draft, draft- | Entities (DANE)", Work in Progress, Internet-Draft, draft- | |||
barnes-dane-uks-00, 9 October 2016, | barnes-dane-uks-00, 9 October 2016, | |||
<https://tools.ietf.org/html/draft-barnes-dane-uks-00>. | <https://datatracker.ietf.org/doc/html/draft-barnes-dane- | |||
uks-00>. | ||||
[I-D.ietf-dnsop-svcb-https] | ||||
Schwartz, B., Bishop, M., and E. Nygren, "Service binding | ||||
and parameter specification via the DNS (DNS SVCB and | ||||
HTTPS RRs)", Work in Progress, Internet-Draft, draft-ietf- | ||||
dnsop-svcb-https-05, 21 April 2021, | ||||
<https://tools.ietf.org/html/draft-ietf-dnsop-svcb-https- | ||||
05>. | ||||
[NLNETLABS] | [DISCOVERY] | |||
Gorjon, X. and W. Toorop, "Discovery method for a DNSSEC | Gorjon, X. and W. Toorop, "Discovery method for a DNSSEC | |||
validating stub resolver", 14 July 2015, | validating stub resolver", 14 July 2015, | |||
<https://www.nlnetlabs.nl/downloads/publications/ | <https://www.nlnetlabs.nl/downloads/publications/ | |||
os3-2015-rp2-xavier-torrent-gorjon.pdf>. | os3-2015-rp2-xavier-torrent-gorjon.pdf>. | |||
[DNSOP-SVCB-HTTPS] | ||||
Schwartz, B., Bishop, M., and E. Nygren, "Service Binding | ||||
and Parameter Specification via the DNS (DNS SVCB and | ||||
HTTPS RRs)", Work in Progress, Internet-Draft, draft-ietf- | ||||
dnsop-svcb-https-06, 16 June 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-dnsop- | ||||
svcb-https-06>. | ||||
[RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | [RFC5011] StJohns, M., "Automated Updates of DNS Security (DNSSEC) | |||
Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011, | Trust Anchors", STD 74, RFC 5011, DOI 10.17487/RFC5011, | |||
September 2007, <https://www.rfc-editor.org/info/rfc5011>. | September 2007, <https://www.rfc-editor.org/info/rfc5011>. | |||
[RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | |||
"Network Time Protocol Version 4: Protocol and Algorithms | "Network Time Protocol Version 4: Protocol and Algorithms | |||
Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | |||
<https://www.rfc-editor.org/info/rfc5905>. | <https://www.rfc-editor.org/info/rfc5905>. | |||
[RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | [RFC7250] Wouters, P., Ed., Tschofenig, H., Ed., Gilmore, J., | |||
Weiler, S., and T. Kivinen, "Using Raw Public Keys in | Weiler, S., and T. Kivinen, "Using Raw Public Keys in | |||
Transport Layer Security (TLS) and Datagram Transport | Transport Layer Security (TLS) and Datagram Transport | |||
Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | Layer Security (DTLS)", RFC 7250, DOI 10.17487/RFC7250, | |||
June 2014, <https://www.rfc-editor.org/info/rfc7250>. | June 2014, <https://www.rfc-editor.org/info/rfc7250>. | |||
[RFC7901] Wouters, P., "CHAIN Query Requests in DNS", RFC 7901, | [RFC7901] Wouters, P., "CHAIN Query Requests in DNS", RFC 7901, | |||
DOI 10.17487/RFC7901, June 2016, | DOI 10.17487/RFC7901, June 2016, | |||
<https://www.rfc-editor.org/info/rfc7901>. | <https://www.rfc-editor.org/info/rfc7901>. | |||
[SERIALIZECHAIN] | ||||
Langley, A., "Serializing DNS Records with DNSSEC | ||||
Authentication", Work in Progress, Internet-Draft, draft- | ||||
agl-dane-serializechain-01, 1 July 2011, | ||||
<https://datatracker.ietf.org/doc/html/draft-agl-dane- | ||||
serializechain-01>. | ||||
Appendix A. Test Vectors | Appendix A. Test Vectors | |||
The test vectors in this appendix are representations of the content | The test vectors in this appendix are representations of the content | |||
of the "opaque AuthenticationChain" field in DNS presentation format. | of the "opaque AuthenticationChain" field in DNS presentation format | |||
And except for the "extension_data" in Appendix A.1, do not contain | and, except for the "extension_data" in Appendix A.1, do not contain | |||
the "uint16 ExtSupportLifetime" field. | the "uint16 ExtSupportLifetime" field. | |||
For brevity and reproducibility all DNS zones involved with the test | For brevity and reproducibility, all DNS zones involved with the test | |||
vectors are signed using keys with algorithm 13: ECDSA Curve P-256 | vectors are signed using keys with algorithm 13 (ECDSA Curve P-256 | |||
with SHA-256. | with SHA-256). | |||
To reflect operational practice, different zones in the examples are | To reflect operational practice, different zones in the examples are | |||
in different phases of rolling their signing keys: | in different phases of rolling their signing keys: | |||
* All zones use a Key Signing Key (KSK) and Zone Signing Key (ZSK), | * All zones use a Key Signing Key (KSK) and Zone Signing Key (ZSK), | |||
except for the example.com and example.net zones which use a | except for the "example.com" and "example.net" zones, which use a | |||
Combined Signing Key (CSK). | Combined Signing Key (CSK). | |||
* The root and org zones are rolling their ZSK's. | * The root and org zones are rolling their ZSKs. | |||
* The com and org zones are rolling their KSK's. | * The com and org zones are rolling their KSKs. | |||
The test vectors are DNSSEC valid in the same period as the | The test vectors are DNSSEC valid in the same period as the | |||
certificate is valid, which is in between November 28, 2018 and | certificate is valid, which is between November 28, 2018 and December | |||
December 2, 2020 and with the following root trust anchor: | 2, 2020 with the following root trust anchor: | |||
. IN DS ( 47005 13 2 2eb6e9f2480126691594d649a5a613de3052e37861634 | . IN DS ( 47005 13 2 2eb6e9f2480126691594d649a5a613de3052e37861634 | |||
641bb568746f2ffc4d4 ) | 641bb568746f2ffc4d4 ) | |||
The test vectors will authenticate the certificate used with | The test vectors will authenticate the certificate used with | |||
https://example.com/ (https://example.com/), https://example.net/ | "https://example.com/", "https://example.net/", and | |||
(https://example.net/) and https://example.org/ | "https://example.org/" at the time of writing: | |||
(https://example.org/) at the time of writing: | ||||
-----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | |||
MIIHQDCCBiigAwIBAgIQD9B43Ujxor1NDyupa2A4/jANBgkqhkiG9w0BAQsFADBN | MIIHQDCCBiigAwIBAgIQD9B43Ujxor1NDyupa2A4/jANBgkqhkiG9w0BAQsFADBN | |||
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E | MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E | |||
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTgxMTI4MDAwMDAwWhcN | aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTgxMTI4MDAwMDAwWhcN | |||
MjAxMjAyMTIwMDAwWjCBpTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju | MjAxMjAyMTIwMDAwWjCBpTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3Ju | |||
aWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMTwwOgYDVQQKEzNJbnRlcm5ldCBDb3Jw | aWExFDASBgNVBAcTC0xvcyBBbmdlbGVzMTwwOgYDVQQKEzNJbnRlcm5ldCBDb3Jw | |||
b3JhdGlvbiBmb3IgQXNzaWduZWQgTmFtZXMgYW5kIE51bWJlcnMxEzARBgNVBAsT | b3JhdGlvbiBmb3IgQXNzaWduZWQgTmFtZXMgYW5kIE51bWJlcnMxEzARBgNVBAsT | |||
ClRlY2hub2xvZ3kxGDAWBgNVBAMTD3d3dy5leGFtcGxlLm9yZzCCASIwDQYJKoZI | ClRlY2hub2xvZ3kxGDAWBgNVBAMTD3d3dy5leGFtcGxlLm9yZzCCASIwDQYJKoZI | |||
hvcNAQEBBQADggEPADCCAQoCggEBANDwEnSgliByCGUZElpdStA6jGaPoCkrp9vV | hvcNAQEBBQADggEPADCCAQoCggEBANDwEnSgliByCGUZElpdStA6jGaPoCkrp9vV | |||
skipping to change at page 22, line 47 ¶ | skipping to change at line 986 ¶ | |||
wQApBo2yCJo32RMAAAFnXDGWnAAABAMARzBFAiEA5Hn7Q4SOyqHkT+kDsHq7ku7z | wQApBo2yCJo32RMAAAFnXDGWnAAABAMARzBFAiEA5Hn7Q4SOyqHkT+kDsHq7ku7z | |||
RDuM7P4UDX2ft2Mpny0CIE13WtxJAUr0aASFYZ/XjSAMMfrB0/RxClvWVss9LHKM | RDuM7P4UDX2ft2Mpny0CIE13WtxJAUr0aASFYZ/XjSAMMfrB0/RxClvWVss9LHKM | |||
MA0GCSqGSIb3DQEBCwUAA4IBAQBzcIXvQEGnakPVeJx7VUjmvGuZhrr7DQOLeP4R | MA0GCSqGSIb3DQEBCwUAA4IBAQBzcIXvQEGnakPVeJx7VUjmvGuZhrr7DQOLeP4R | |||
8CmgDM1pFAvGBHiyzvCH1QGdxFl6cf7wbp7BoLCRLR/qPVXFMwUMzcE1GLBqaGZM | 8CmgDM1pFAvGBHiyzvCH1QGdxFl6cf7wbp7BoLCRLR/qPVXFMwUMzcE1GLBqaGZM | |||
v1Yh2lvZSLmMNSGRXdx113pGLCInpm/TOhfrvr0TxRImc8BdozWJavsn1N2qdHQu | v1Yh2lvZSLmMNSGRXdx113pGLCInpm/TOhfrvr0TxRImc8BdozWJavsn1N2qdHQu | |||
N+UBO6bQMLCD0KHEdSGFsuX6ZwAworxTg02/1qiDu7zW7RyzHvFYA4IAjpzvkPIa | N+UBO6bQMLCD0KHEdSGFsuX6ZwAworxTg02/1qiDu7zW7RyzHvFYA4IAjpzvkPIa | |||
X6KjBtpdvp/aXabmL95YgBjT8WJ7pqOfrqhpcmOBZa6Cg6O1l4qbIFH/Gj9hQB5I | X6KjBtpdvp/aXabmL95YgBjT8WJ7pqOfrqhpcmOBZa6Cg6O1l4qbIFH/Gj9hQB5I | |||
0Gs4+eH6F9h3SojmPTYkT+8KuZ9w84Mn+M8qBXUQoYoKgIjN | 0Gs4+eH6F9h3SojmPTYkT+8KuZ9w84Mn+M8qBXUQoYoKgIjN | |||
-----END CERTIFICATE----- | -----END CERTIFICATE----- | |||
A.1. _443._tcp.www.example.com | A.1. "_443._tcp.www.example.com" | |||
_443._tcp.www.example.com. 3600 IN TLSA ( 3 1 1 | _443._tcp.www.example.com. 3600 IN TLSA ( 3 1 1 | |||
8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | 8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | |||
922 ) | 922 ) | |||
_443._tcp.www.example.com. 3600 IN RRSIG ( TLSA 13 5 3600 | _443._tcp.www.example.com. 3600 IN RRSIG ( TLSA 13 5 3600 | |||
20201202000000 20181128000000 1870 example.com. | 20201202000000 20181128000000 1870 example.com. | |||
rqY69NnTf4CN3GBGQjKEJCLAMsRkUrXe0JW8IqDb5rQHHzxNqqPeEoi+2vI6S | rqY69NnTf4CN3GBGQjKEJCLAMsRkUrXe0JW8IqDb5rQHHzxNqqPeEoi+2vI6S | |||
z2BhaswpGLVVuoijuVdzxYjmw== ) | z2BhaswpGLVVuoijuVdzxYjmw== ) | |||
example.com. 3600 IN DNSKEY ( 257 3 13 | example.com. 3600 IN DNSKEY ( 257 3 13 | |||
JnA1XgyJTZz+psWvbrfUWLV6ULqIJyUS2CQdhUH9VK35bslWeJpRzrlxCUs7s | JnA1XgyJTZz+psWvbrfUWLV6ULqIJyUS2CQdhUH9VK35bslWeJpRzrlxCUs7s | |||
/TsSfZMaGWVvlsuieh5nHcXzA== ) ; Key ID = 1870 | /TsSfZMaGWVvlsuieh5nHcXzA== ) ; Key ID = 1870 | |||
skipping to change at page 24, line 17 ¶ | skipping to change at line 1048 ¶ | |||
xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | |||
. 86400 IN DNSKEY ( 257 3 13 | . 86400 IN DNSKEY ( 257 3 13 | |||
yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | |||
Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | |||
. 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | . 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | |||
20181128000000 47005 . | 20181128000000 47005 . | |||
0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | 0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | |||
nBT1dtNjIczvLG9pQTnOKUsHQ== ) | nBT1dtNjIczvLG9pQTnOKUsHQ== ) | |||
A hex dump of the "extension_data" of the server's "dnssec_chain" | A hex dump of the "extension_data" of the server's "dnssec_chain" | |||
extension represention this with an ExtSupportLifetime value of 0 is: | extension representation of this with an ExtSupportLifetime value of | |||
0 is: | ||||
0000: 00 00 04 5f 34 34 33 04 5f 74 63 70 03 77 77 77 | 0000: 00 00 04 5f 34 34 33 04 5f 74 63 70 03 77 77 77 | |||
0010: 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 34 00 | 0010: 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 34 00 | |||
0020: 01 00 00 0e 10 00 23 03 01 01 8b d1 da 95 27 2f | 0020: 01 00 00 0e 10 00 23 03 01 01 8b d1 da 95 27 2f | |||
0030: 7f a4 ff b2 41 37 fc 0e d0 3a ae 67 e5 c4 d8 b3 | 0030: 7f a4 ff b2 41 37 fc 0e d0 3a ae 67 e5 c4 d8 b3 | |||
0040: c5 07 34 e1 05 0a 79 20 b9 22 04 5f 34 34 33 04 | 0040: c5 07 34 e1 05 0a 79 20 b9 22 04 5f 34 34 33 04 | |||
0050: 5f 74 63 70 03 77 77 77 07 65 78 61 6d 70 6c 65 | 0050: 5f 74 63 70 03 77 77 77 07 65 78 61 6d 70 6c 65 | |||
0060: 03 63 6f 6d 00 00 2e 00 01 00 00 0e 10 00 5f 00 | 0060: 03 63 6f 6d 00 00 2e 00 01 00 00 0e 10 00 5f 00 | |||
0070: 34 0d 05 00 00 0e 10 5f c6 d9 00 5b fd da 80 07 | 0070: 34 0d 05 00 00 0e 10 5f c6 d9 00 5b fd da 80 07 | |||
0080: 4e 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 ce 1d | 0080: 4e 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 ce 1d | |||
skipping to change at page 26, line 21 ¶ | skipping to change at line 1150 ¶ | |||
0590: 21 55 ba cf 57 d1 fa ad 5b ac 42 d1 7d 94 8c 42 | 0590: 21 55 ba cf 57 d1 fa ad 5b ac 42 d1 7d 94 8c 42 | |||
05a0: 17 36 d9 38 9c 4c 40 11 66 6e a9 5c f1 77 25 bd | 05a0: 17 36 d9 38 9c 4c 40 11 66 6e a9 5c f1 77 25 bd | |||
05b0: 0f a0 0c e5 e7 14 e4 ec 82 cf df ac c9 b1 c8 63 | 05b0: 0f a0 0c e5 e7 14 e4 ec 82 cf df ac c9 b1 c8 63 | |||
05c0: ad 46 00 00 2e 00 01 00 01 51 80 00 53 00 30 0d | 05c0: ad 46 00 00 2e 00 01 00 01 51 80 00 53 00 30 0d | |||
05d0: 00 00 01 51 80 5f c6 d9 00 5b fd da 80 b7 9d 00 | 05d0: 00 00 01 51 80 5f c6 d9 00 5b fd da 80 b7 9d 00 | |||
05e0: de 7a 67 40 ee ec ba 4b da 1e 5c 2d d4 89 9b 2c | 05e0: de 7a 67 40 ee ec ba 4b da 1e 5c 2d d4 89 9b 2c | |||
05f0: 96 58 93 f3 78 6c e7 47 f4 1e 50 d9 de 8c 0a 72 | 05f0: 96 58 93 f3 78 6c e7 47 f4 1e 50 d9 de 8c 0a 72 | |||
0600: df 82 56 0d fb 48 d7 14 de 32 83 ae 99 a4 9c 0f | 0600: df 82 56 0d fb 48 d7 14 de 32 83 ae 99 a4 9c 0f | |||
0610: cb 50 d3 aa ad b1 a3 fc 62 ee 3a 8a 09 88 b6 be | 0610: cb 50 d3 aa ad b1 a3 fc 62 ee 3a 8a 09 88 b6 be | |||
A.2. _25._tcp.example.com NSEC wildcard | A.2. "_25._tcp.example.com" NSEC Wildcard | |||
_25._tcp.example.com. 3600 IN TLSA ( 3 1 1 | _25._tcp.example.com. 3600 IN TLSA ( 3 1 1 | |||
8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | 8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | |||
922 ) | 922 ) | |||
_25._tcp.example.com. 3600 IN RRSIG ( TLSA 13 3 3600 | _25._tcp.example.com. 3600 IN RRSIG ( TLSA 13 3 3600 | |||
20201202000000 20181128000000 1870 example.com. | 20201202000000 20181128000000 1870 example.com. | |||
BZawXvte5SyF8hnXviKDWqll5E2v+RMXqaSE+NOcAMlZOrSMUkfyPqvkv53K2 | BZawXvte5SyF8hnXviKDWqll5E2v+RMXqaSE+NOcAMlZOrSMUkfyPqvkv53K2 | |||
rfL4DFP8rO3VMgI0v+ogrox0w== ) | rfL4DFP8rO3VMgI0v+ogrox0w== ) | |||
*._tcp.example.com. 3600 IN NSEC ( smtp.example.com. RRSIG | *._tcp.example.com. 3600 IN NSEC ( smtp.example.com. RRSIG | |||
NSEC TLSA ) | NSEC TLSA ) | |||
skipping to change at page 27, line 41 ¶ | skipping to change at line 1217 ¶ | |||
8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | 8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | |||
xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | |||
. 86400 IN DNSKEY ( 257 3 13 | . 86400 IN DNSKEY ( 257 3 13 | |||
yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | |||
Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | |||
. 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | . 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | |||
20181128000000 47005 . | 20181128000000 47005 . | |||
0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | 0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | |||
nBT1dtNjIczvLG9pQTnOKUsHQ== ) | nBT1dtNjIczvLG9pQTnOKUsHQ== ) | |||
A.3. _25._tcp.example.org NSEC3 wildcard | A.3. "_25._tcp.example.org" NSEC3 Wildcard | |||
_25._tcp.example.org. 3600 IN TLSA ( 3 1 1 | _25._tcp.example.org. 3600 IN TLSA ( 3 1 1 | |||
8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | 8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | |||
922 ) | 922 ) | |||
_25._tcp.example.org. 3600 IN RRSIG ( TLSA 13 3 3600 | _25._tcp.example.org. 3600 IN RRSIG ( TLSA 13 3 3600 | |||
20201202000000 20181128000000 56566 example.org. | 20201202000000 20181128000000 56566 example.org. | |||
lNp6th/CJel5WsYlLsLadcQ/YdSTJAIOttzYKnNkNzeZ0jxtDyEP818Q1R4lL | lNp6th/CJel5WsYlLsLadcQ/YdSTJAIOttzYKnNkNzeZ0jxtDyEP818Q1R4lL | |||
cYzJ7vCvqb9gFCiCJjK2gAamw== ) | cYzJ7vCvqb9gFCiCJjK2gAamw== ) | |||
dlm7rss9pejqnh0ev6h7k1ikqqcl5mae.example.org. 3600 IN NSEC3 ( | dlm7rss9pejqnh0ev6h7k1ikqqcl5mae.example.org. 3600 IN NSEC3 ( | |||
1 0 1 - t6lf7uuoi0qofq0nvdjroavo46pp20im RRSIG TLSA ) | 1 0 1 - t6lf7uuoi0qofq0nvdjroavo46pp20im RRSIG TLSA ) | |||
skipping to change at page 29, line 19 ¶ | skipping to change at line 1291 ¶ | |||
8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | 8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | |||
xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | |||
. 86400 IN DNSKEY ( 257 3 13 | . 86400 IN DNSKEY ( 257 3 13 | |||
yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | |||
Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | |||
. 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | . 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | |||
20181128000000 47005 . | 20181128000000 47005 . | |||
0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | 0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | |||
nBT1dtNjIczvLG9pQTnOKUsHQ== ) | nBT1dtNjIczvLG9pQTnOKUsHQ== ) | |||
A.4. _443._tcp.www.example.org CNAME | A.4. "_443._tcp.www.example.org" CNAME | |||
_443._tcp.www.example.org. 3600 IN CNAME ( | _443._tcp.www.example.org. 3600 IN CNAME ( | |||
dane311.example.org. ) | dane311.example.org. ) | |||
_443._tcp.www.example.org. 3600 IN RRSIG ( CNAME 13 5 3600 | _443._tcp.www.example.org. 3600 IN RRSIG ( CNAME 13 5 3600 | |||
20201202000000 20181128000000 56566 example.org. | 20201202000000 20181128000000 56566 example.org. | |||
R0dUe6Rt4G+2ablrQH9Zw8j9NhBLMgNYTI5+H7nO8SNz5Nm8w0NZrXv3Qp7gx | R0dUe6Rt4G+2ablrQH9Zw8j9NhBLMgNYTI5+H7nO8SNz5Nm8w0NZrXv3Qp7gx | |||
Qb/a90O696120NsYaZX2+ebBA== ) | Qb/a90O696120NsYaZX2+ebBA== ) | |||
dane311.example.org. 3600 IN TLSA ( 3 1 1 | dane311.example.org. 3600 IN TLSA ( 3 1 1 | |||
8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | 8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | |||
922 ) | 922 ) | |||
skipping to change at page 30, line 44 ¶ | skipping to change at line 1364 ¶ | |||
8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | 8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | |||
xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | |||
. 86400 IN DNSKEY ( 257 3 13 | . 86400 IN DNSKEY ( 257 3 13 | |||
yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | |||
Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | |||
. 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | . 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | |||
20181128000000 47005 . | 20181128000000 47005 . | |||
0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | 0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | |||
nBT1dtNjIczvLG9pQTnOKUsHQ== ) | nBT1dtNjIczvLG9pQTnOKUsHQ== ) | |||
A.5. _443._tcp.www.example.net DNAME | A.5. "_443._tcp.www.example.net" DNAME | |||
example.net. 3600 IN DNAME example.com. | example.net. 3600 IN DNAME example.com. | |||
example.net. 3600 IN RRSIG ( DNAME 13 2 3600 20201202000000 | example.net. 3600 IN RRSIG ( DNAME 13 2 3600 20201202000000 | |||
20181128000000 48085 example.net. | 20181128000000 48085 example.net. | |||
o3uV5k5Ewp5fdrOZt0n4QuH+/Hpku2Lo3CzGRt9/MS2zZt2Qb/AXz435UFQBx | o3uV5k5Ewp5fdrOZt0n4QuH+/Hpku2Lo3CzGRt9/MS2zZt2Qb/AXz435UFQBx | |||
OI/pDnjJcLSd/gBLtqR52WLMA== ) | OI/pDnjJcLSd/gBLtqR52WLMA== ) | |||
; _443._tcp.www.example.net. 3600 IN CNAME ( | ; _443._tcp.www.example.net. 3600 IN CNAME ( | |||
; _443._tcp.www.example.com. ) | ; _443._tcp.www.example.com. ) | |||
_443._tcp.www.example.com. 3600 IN TLSA ( 3 1 1 | _443._tcp.www.example.com. 3600 IN TLSA ( 3 1 1 | |||
8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | 8bd1da95272f7fa4ffb24137fc0ed03aae67e5c4d8b3c50734e1050a7920b | |||
skipping to change at page 32, line 44 ¶ | skipping to change at line 1461 ¶ | |||
mDXqz6KEhhQjT+aQWDt6WFHlA== ) | mDXqz6KEhhQjT+aQWDt6WFHlA== ) | |||
com. 86400 IN DS ( 18931 13 2 20f7a9db42d0e2042fbbb9f9ea015941202 | com. 86400 IN DS ( 18931 13 2 20f7a9db42d0e2042fbbb9f9ea015941202 | |||
f9eabb94487e658c188e7bcb52115 ) | f9eabb94487e658c188e7bcb52115 ) | |||
com. 86400 IN DS ( 28809 13 2 ad66b3276f796223aa45eda773e92c6d98e | com. 86400 IN DS ( 28809 13 2 ad66b3276f796223aa45eda773e92c6d98e | |||
70643bbde681db342a9e5cf2bb380 ) | 70643bbde681db342a9e5cf2bb380 ) | |||
com. 86400 IN RRSIG ( DS 13 1 86400 20201202000000 | com. 86400 IN RRSIG ( DS 13 1 86400 20201202000000 | |||
20181128000000 31918 . | 20181128000000 31918 . | |||
nDiDlBjXEE/6AudhC++Hui1ckPcuAnGbjEASNoxA3ZHjlXRzL050UzePko5Pb | nDiDlBjXEE/6AudhC++Hui1ckPcuAnGbjEASNoxA3ZHjlXRzL050UzePko5Pb | |||
vBKTf6pk8JRCqnfzlo2QY+WXA== ) | vBKTf6pk8JRCqnfzlo2QY+WXA== ) | |||
A.6. _25._tcp.smtp.example.com NSEC Denial of Existence | A.6. "_25._tcp.smtp.example.com" NSEC Denial of Existence | |||
smtp.example.com. 3600 IN NSEC ( www.example.com. A AAAA | smtp.example.com. 3600 IN NSEC ( www.example.com. A AAAA | |||
RRSIG NSEC ) | RRSIG NSEC ) | |||
smtp.example.com. 3600 IN RRSIG ( NSEC 13 3 3600 | smtp.example.com. 3600 IN RRSIG ( NSEC 13 3 3600 | |||
20201202000000 20181128000000 1870 example.com. | 20201202000000 20181128000000 1870 example.com. | |||
rH/K4wghCOm4jpEHwQKiyZzvFIa7qpFySuKIGGetW4SE4O2Mh5jPxcEzf78Hf | rH/K4wghCOm4jpEHwQKiyZzvFIa7qpFySuKIGGetW4SE4O2Mh5jPxcEzf78Hf | |||
crlsQZmnAUlfmBNCygxAd7JNw== ) | crlsQZmnAUlfmBNCygxAd7JNw== ) | |||
example.com. 3600 IN DNSKEY ( 257 3 13 | example.com. 3600 IN DNSKEY ( 257 3 13 | |||
JnA1XgyJTZz+psWvbrfUWLV6ULqIJyUS2CQdhUH9VK35bslWeJpRzrlxCUs7s | JnA1XgyJTZz+psWvbrfUWLV6ULqIJyUS2CQdhUH9VK35bslWeJpRzrlxCUs7s | |||
/TsSfZMaGWVvlsuieh5nHcXzA== ) ; Key ID = 1870 | /TsSfZMaGWVvlsuieh5nHcXzA== ) ; Key ID = 1870 | |||
example.com. 3600 IN RRSIG ( DNSKEY 13 2 3600 | example.com. 3600 IN RRSIG ( DNSKEY 13 2 3600 | |||
20201202000000 20181128000000 1870 example.com. | 20201202000000 20181128000000 1870 example.com. | |||
nYisnu/26Sw1qmGuREa9o/fLgYuA4oNPt4+6PMBZoN0MS8Gjtli9NVRYeSIzt | nYisnu/26Sw1qmGuREa9o/fLgYuA4oNPt4+6PMBZoN0MS8Gjtli9NVRYeSIzt | |||
QHPGSpvRxTUC4tZi62z1UgGDw== ) | QHPGSpvRxTUC4tZi62z1UgGDw== ) | |||
example.com. 172800 IN DS ( 1870 13 2 e9b533a049798e900b5c29c90cd | example.com. 172800 IN DS ( 1870 13 2 e9b533a049798e900b5c29c90cd | |||
25a986e8a44f319ac3cd302bafc08f5b81e16 ) | 25a986e8a44f319ac3cd302bafc08f5b81e16 ) | |||
example.com. 172800 IN RRSIG ( DS 13 2 172800 | example.com. 172800 IN RRSIG ( DS 13 2 172800 | |||
skipping to change at page 34, line 8 ¶ | skipping to change at line 1521 ¶ | |||
8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | 8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | |||
xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | |||
. 86400 IN DNSKEY ( 257 3 13 | . 86400 IN DNSKEY ( 257 3 13 | |||
yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | |||
Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | |||
. 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | . 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | |||
20181128000000 47005 . | 20181128000000 47005 . | |||
0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | 0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | |||
nBT1dtNjIczvLG9pQTnOKUsHQ== ) | nBT1dtNjIczvLG9pQTnOKUsHQ== ) | |||
A.7. _25._tcp.smtp.example.org NSEC3 Denial of Existence | A.7. "_25._tcp.smtp.example.org" NSEC3 Denial of Existence | |||
vkv62jbv85822q8rtmfnbhfnmnat9ve3.example.org. 3600 IN NSEC3 ( | vkv62jbv85822q8rtmfnbhfnmnat9ve3.example.org. 3600 IN NSEC3 ( | |||
1 0 1 - 93u63bg57ppj6649al2n31l92iedkjd6 A AAAA RRSIG ) | 1 0 1 - 93u63bg57ppj6649al2n31l92iedkjd6 A AAAA RRSIG ) | |||
vkv62jbv85822q8rtmfnbhfnmnat9ve3.example.org. 3600 IN RRSIG ( | vkv62jbv85822q8rtmfnbhfnmnat9ve3.example.org. 3600 IN RRSIG ( | |||
NSEC3 13 3 3600 20201202000000 20181128000000 56566 | NSEC3 13 3 3600 20201202000000 20181128000000 56566 | |||
example.org. | example.org. | |||
wn3cePVdc5VPPniYzGp+1CBPOY2m83/A3cjnAb7FTZuwL45B25fwVUyjKQksh | wn3cePVdc5VPPniYzGp+1CBPOY2m83/A3cjnAb7FTZuwL45B25fwVUyjKQksh | |||
gQeV5KgP1cdvPt1BEowKqK4Sw== ) | gQeV5KgP1cdvPt1BEowKqK4Sw== ) | |||
dlm7rss9pejqnh0ev6h7k1ikqqcl5mae.example.org. 3600 IN NSEC3 ( | dlm7rss9pejqnh0ev6h7k1ikqqcl5mae.example.org. 3600 IN NSEC3 ( | |||
1 0 1 - t6lf7uuoi0qofq0nvdjroavo46pp20im RRSIG TLSA ) | 1 0 1 - t6lf7uuoi0qofq0nvdjroavo46pp20im RRSIG TLSA ) | |||
skipping to change at page 35, line 41 ¶ | skipping to change at line 1602 ¶ | |||
8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | 8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | |||
xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | |||
. 86400 IN DNSKEY ( 257 3 13 | . 86400 IN DNSKEY ( 257 3 13 | |||
yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | |||
Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | |||
. 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | . 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | |||
20181128000000 47005 . | 20181128000000 47005 . | |||
0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | 0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | |||
nBT1dtNjIczvLG9pQTnOKUsHQ== ) | nBT1dtNjIczvLG9pQTnOKUsHQ== ) | |||
A.8. _443._tcp.www.insecure.example NSEC3 opt-out insecure delegation | A.8. "_443._tcp.www.insecure.example" NSEC3 Opt-Out Insecure Delegation | |||
c1kgc91hrn9nqi2qjh1ms78ki8p7s75o.example. 43200 IN NSEC3 ( | c1kgc91hrn9nqi2qjh1ms78ki8p7s75o.example. 43200 IN NSEC3 ( | |||
1 1 1 - shn05itmoa45mmnv74lc4p0nnfmimtjt NS SOA RRSIG DNSKEY | 1 1 1 - shn05itmoa45mmnv74lc4p0nnfmimtjt NS SOA RRSIG DNSKEY | |||
NSEC3PARAM ) | NSEC3PARAM ) | |||
c1kgc91hrn9nqi2qjh1ms78ki8p7s75o.example. 43200 IN RRSIG ( | c1kgc91hrn9nqi2qjh1ms78ki8p7s75o.example. 43200 IN RRSIG ( | |||
NSEC3 13 2 43200 20201202000000 20181128000000 15903 | NSEC3 13 2 43200 20201202000000 20181128000000 15903 | |||
example. | example. | |||
pW16gQOLhLpKYgXpGt4XB4o92W/QoPYyG5CjQ+t+g7LBVcCiPQv8ars1j9UOg | pW16gQOLhLpKYgXpGt4XB4o92W/QoPYyG5CjQ+t+g7LBVcCiPQv8ars1j9UOg | |||
RpXUsJhZBDax2dfDhK7zOk7ow== ) | RpXUsJhZBDax2dfDhK7zOk7ow== ) | |||
shn05itmoa45mmnv74lc4p0nnfmimtjt.example. 43200 IN NSEC3 ( | shn05itmoa45mmnv74lc4p0nnfmimtjt.example. 43200 IN NSEC3 ( | |||
1 1 1 - a3ib1dvf1bdtfmd91usrdem5fiiepi6p NS DS RRSIG ) | 1 1 1 - a3ib1dvf1bdtfmd91usrdem5fiiepi6p NS DS RRSIG ) | |||
skipping to change at page 36, line 46 ¶ | skipping to change at line 1646 ¶ | |||
8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | 8wMZZ4lzHdyKZ4fv8kys/t3QMlgvEadbsbyqWrMhwddSXCZYGRrsAbPpireRW | |||
xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | xbVcd1VtOrlFBcRDMTN0R0XEQ== ) ; Key ID = 2635 | |||
. 86400 IN DNSKEY ( 257 3 13 | . 86400 IN DNSKEY ( 257 3 13 | |||
yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | yvX+VNTUjxZiGvtr060hVbrPV9H6rVusQtF9lIxCFzbZOJxMQBFmbqlc8Xclv | |||
Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | Q+gDOXnFOTsgs/frMmxyGOtRg== ) ; Key ID = 47005 | |||
. 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | . 86400 IN RRSIG ( DNSKEY 13 0 86400 20201202000000 | |||
20181128000000 47005 . | 20181128000000 47005 . | |||
0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | 0EPW1ca+N/ZhZPKla77STG734cTeIOjUwq7eW0HsnOfudWmnCEVeco2wLLq9m | |||
nBT1dtNjIczvLG9pQTnOKUsHQ== ) | nBT1dtNjIczvLG9pQTnOKUsHQ== ) | |||
Acknowledgments | ||||
Many thanks to Adam Langley for laying the groundwork for this | ||||
extension in [SERIALIZECHAIN]. The original idea is his, but our | ||||
acknowledgment in no way implies his endorsement. This document also | ||||
benefited from discussions with and review from the following people: | ||||
Daniel Kahn Gillmor, Jeff Hodges, Allison Mankin, Patrick McManus, | ||||
Rick van Rein, Ilari Liusvaara, Eric Rescorla, Gowri Visweswaran, | ||||
Duane Wessels, Nico Williams, and Richard Barnes. | ||||
Authors' Addresses | Authors' Addresses | |||
Viktor Dukhovni | Viktor Dukhovni | |||
Two Sigma | Two Sigma | |||
Email: ietf-dane@dukhovni.org | Email: ietf-dane@dukhovni.org | |||
Shumon Huque | Shumon Huque | |||
Salesforce | Salesforce | |||
415 Mission Street, 3rd Floor | 3rd Floor | |||
San Francisco, CA 94105 | 415 Mission Street | |||
San Francisco, CA 94105 | ||||
United States of America | United States of America | |||
Email: shuque@gmail.com | Email: shuque@gmail.com | |||
Willem Toorop | Willem Toorop | |||
NLnet Labs | NLnet Labs | |||
Science Park 400 | Science Park 400 | |||
1098 XH Amsterdam | 1098 XH Amsterdam | |||
Netherlands | Netherlands | |||
End of changes. 127 change blocks. | ||||
329 lines changed or deleted | 343 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/ |