draft-ietf-dnsop-dnssec-roadblock-avoidance-05.txt   rfc8027.txt 
DNSOP W. Hardaker Internet Engineering Task Force (IETF) W. Hardaker
Internet-Draft Parsons Request for Comments: 8027 USC/ISI
Intended status: Best Current Practice O. Gudmundsson BCP: 207 O. Gudmundsson
Expires: February 12, 2017 CloudFlare Category: Best Current Practice CloudFlare
S. Krishnaswamy ISSN: 2070-1721 S. Krishnaswamy
Parsons Parsons
August 11, 2016 November 2016
DNSSEC Roadblock Avoidance DNSSEC Roadblock Avoidance
draft-ietf-dnsop-dnssec-roadblock-avoidance-05.txt
Abstract Abstract
This document describes problems that a Validating DNS resolver, This document describes problems that a Validating DNS resolver,
stub-resolver or application might run into within a non-compliant stub-resolver, or application might run into within a non-compliant
infrastructure. It outlines potential detection and mitigation infrastructure. It outlines potential detection and mitigation
techniques. The scope of the document is to create a shared approach techniques. The scope of the document is to create a shared approach
to detect and overcome network issues that a DNSSEC software/system to detect and overcome network issues that a DNSSEC software/system
may face. may face.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This memo documents an Internet Best Current Practice.
provisions of BCP 78 and BCP 79.
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 http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months This document is a product of the Internet Engineering Task Force
and may be updated, replaced, or obsoleted by other documents at any (IETF). It represents the consensus of the IETF community. It has
time. It is inappropriate to use Internet-Drafts as reference received public review and has been approved for publication by the
material or to cite them other than as "work in progress." Internet Engineering Steering Group (IESG). Further information on
BCPs is available in Section 2 of RFC 7841.
This Internet-Draft will expire on February 12, 2017. Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc8027.
Copyright Notice Copyright Notice
Copyright (c) 2016 IETF Trust and the persons identified as the Copyright (c) 2016 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 1. Introduction ....................................................3
1.1. Notation . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1. Notation ...................................................3
1.2. Background . . . . . . . . . . . . . . . . . . . . . . . 3 1.2. Background .................................................3
1.3. Implementation experiences . . . . . . . . . . . . . . . 4 1.3. Implementation Experiences .................................4
1.3.1. Test Zone Implementation . . . . . . . . . . . . . . 4 1.3.1. Test Zone Implementation ............................4
2. Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Goals ...........................................................4
3. Detecting DNSSEC Non-Compliance . . . . . . . . . . . . . . . 5 3. Detecting DNSSEC Non-compliance .................................5
3.1. Determining DNSSEC support in recursive resolvers . . . . 6 3.1. Determining DNSSEC Support in Recursive Resolvers ..........5
3.1.1. Supports UDP answers . . . . . . . . . . . . . . . . 6 3.1.1. Supports UDP Answers ................................6
3.1.2. Supports TCP answers . . . . . . . . . . . . . . . . 6 3.1.2. Supports TCP Answers ................................6
3.1.3. Supports EDNS0 . . . . . . . . . . . . . . . . . . . 7 3.1.3. Supports EDNS0 ......................................6
3.1.4. Supports the DO bit . . . . . . . . . . . . . . . . . 7 3.1.4. Supports the DO Bit .................................7
3.1.5. Supports the AD bit DNSKEY algorithm 5 and 8 . . . . 7 3.1.5. Supports the AD Bit DNSKEY Algorithms 5 and/or 8 ....7
3.1.6. Returns RRsig for signed answer . . . . . . . . . . . 8 3.1.6. Returns RRSIG for Signed Answer .....................7
3.1.7. Supports querying for DNSKEY records . . . . . . . . 8 3.1.7. Supports Querying for DNSKEY Records ................8
3.1.8. Supports querying for DS records . . . . . . . . . . 8 3.1.8. Supports Querying for DS Records ....................8
3.1.9. Supports negative answers with NSEC records . . . . . 9 3.1.9. Supports Negative Answers with NSEC Records .........8
3.1.10. Supports negative answers with NSEC3 records . . . . 9 3.1.10. Supports Negative Answers with NSEC3 Records .......9
3.1.11. Supports queries where DNAME records lead to an 3.1.11. Supports Queries Where DNAME Records Lead
answer . . . . . . . . . . . . . . . . . . . . . . . 10 to an Answer .......................................9
3.1.12. Permissive DNSSEC . . . . . . . . . . . . . . . . . . 10 3.1.12. Permissive DNSSEC .................................10
3.1.13. Supports Unknown RRtypes . . . . . . . . . . . . . . 10 3.1.13. Supports Unknown RRtypes ..........................10
3.2. Direct Network Queries . . . . . . . . . . . . . . . . . 10 3.2. Direct Network Queries ....................................10
3.2.1. Support for Remote UDP Over Port 53 . . . . . . . . . 11 3.2.1. Support for Remote UDP over Port 53 ................10
3.2.2. Support for Remote UDP With Fragmentation . . . . . . 11 3.2.2. Support for Remote UDP with Fragmentation ..........11
3.2.3. Support for Outbound TCP Over Port 53 . . . . . . . . 11 3.2.3. Support for Outbound TCP over Port 53 ..............11
3.3. Support for DNSKEY and DS combinations . . . . . . . . . 12 3.3. Support for DNSKEY and DS Combinations ....................11
4. Aggregating The Results . . . . . . . . . . . . . . . . . . . 12 4. Aggregating the Results ........................................12
4.1. Resolver capability description . . . . . . . . . . . . . 12 4.1. Resolver Capability Description ...........................12
5. Roadblock Avoidance . . . . . . . . . . . . . . . . . . . . . 13 5. Roadblock Avoidance ............................................13
5.1. Partial Resolver Usage . . . . . . . . . . . . . . . . . 16 5.1. Partial Resolver Usage ....................................16
5.1.1. Known Insecure Lookups . . . . . . . . . . . . . . . 16 5.1.1. Known Insecure Lookups .............................16
5.1.2. Partial NSEC/NSEC3 Support . . . . . . . . . . . . . 16 5.1.2. Partial NSEC/NSEC3 Support .........................16
6. Start-Up and Network Connectivity Issues . . . . . . . . . . 16 6. Start-Up and Network Connectivity Issues .......................16
6.1. What To Do . . . . . . . . . . . . . . . . . . . . . . . 17 6.1. What to Do ................................................17
7. Quick Test . . . . . . . . . . . . . . . . . . . . . . . . . 17 7. Quick Test .....................................................17
7.1. Test negative answers Algorithm 5 . . . . . . . . . . . . 18 7.1. Test Negative Answers Algorithm 5 .........................17
7.2. Test Algorithm 8 . . . . . . . . . . . . . . . . . . . . 18 7.2. Test Algorithm 8 ..........................................18
7.3. Test Algorithm 13 . . . . . . . . . . . . . . . . . . . . 18 7.3. Test Algorithm 13 .........................................18
7.4. Fails when DNSSEC does not validate . . . . . . . . . . . 18 7.4. Fails When DNSSEC Does Not Validate .......................18
8. Security Considerations . . . . . . . . . . . . . . . . . . . 18 8. Security Considerations ........................................18
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 9. Normative References ...........................................18
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 Acknowledgments ...................................................19
11. Normative References . . . . . . . . . . . . . . . . . . . . 19 Authors' Addresses ................................................19
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 19
1. Introduction 1. Introduction
This document describes problems observable during DNSSEC ([RFC4034], This document describes problems observable during DNSSEC ([RFC4034]
[RFC4035]) deployment that derive from non-compliant infrastructure. [RFC4035]) deployment that derive from non-compliant infrastructure.
It poses potential detection and mitigation techniques. It poses potential detection and mitigation techniques.
1.1. Notation 1.1. Notation
In this document a "Host Validator" can either be a validating stub- In this document, a "Host Validator" can either be a validating stub-
resolver, such as library that an application has linked in, or a resolver, such as a library that an application has linked in, or a
validating resolver daemon running on the same machine. It may or validating resolver daemon running on the same machine. It may or
may not be trying to use upstream caching resolvers during its own may not be trying to use upstream caching resolvers during its own
resolution process; both cases are covered by the tests defined in resolution process; both cases are covered by the tests defined in
this document. this document.
The sub-variant of this is a "Validating Forwarding Resolver", which The sub-variant of this is a "Validating Forwarding Resolver", which
is a resolver that is configured to use upstream Resolvers when is a resolver that is configured to use upstream Resolvers when
possible. A Validating Forward Resolver also needs to perform the possible. A Validating Forwarding Resolver also needs to perform the
tests outlined in this document before using an upstream recursive tests outlined in this document before using an upstream recursive
resolver. resolver.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119]. document are to be interpreted as described in [RFC2119].
1.2. Background 1.2. Background
Deployment of DNSSEC validation is hampered by network components Deployment of DNSSEC validation is hampered by network components
that make it difficult or sometimes impossible for validating that make it difficult or sometimes impossible for validating
resolvers to effectively obtain the DNSSEC data they need. This can resolvers to effectively obtain the DNSSEC data they need. This can
occur for many different reasons including, but not limited to: occur for many different reasons including, but not limited to, the
following:
o Because recursive resolvers and DNS proxies [RFC5625] are not o Recursive resolvers and DNS proxies [RFC5625] not being fully
fully DNSSEC compliant DNSSEC compliant
o Because resolvers are not DNSSEC aware o Resolvers not being DNSSEC aware
o Because "middle-boxes" actively block, modify and/or restrict o "Middleboxes" actively blocking, modifying, and/or restricting
outbound traffic to the DNS port (53) either UDP and/or TCP . outbound traffic to the DNS port (53) either UDP and/or TCP
o In-path network components not allowing UDP fragments
o In-path network components do not allow UDP fragments
This document talks about ways that a Host Validator can detect the This document talks about ways that a Host Validator can detect the
state of the network it is attached to, and ways to hopefully state of the network it is attached to, and ways to hopefully
circumvent the problems associated with the network defects it circumvent the problems associated with the network defects it
discovers. The tests described in this document may be performed on discovers. The tests described in this document may be performed on
any validating resolver to detect and prevent problems. While these any validating resolver to detect and prevent problems. While these
recommendations are mainly aimed at Host Validators it it prudent to recommendations are mainly aimed at Host Validators, it is prudent to
perform these tests from regular Validating Resolvers before enabling perform these tests from regular validating resolvers, just to make
just to make sure things work. sure things work.
There are situations where a host can not talk directly to a There are situations where a host cannot talk directly to a Resolver;
Resolver; the tests below can not address how to overcome that, and the tests below cannot address how to overcome that, and inconsistent
inconsistent results can be seen in such cases. This can happen, for results can be seen in such cases. This can happen, for instance,
instance, when there are DNS proxies/forwarders between the user and when there are DNS proxies/forwarders between the user and the actual
the actual resolvers. resolvers.
1.3. Implementation experiences 1.3. Implementation Experiences
Multiple lessons learned from multiple implementations led to the Multiple lessons learned from multiple implementations led to the
development of this document, including (in alphabetical order) development of this document, including (in alphabetical order)
DNSSEC-Tools' DNSSEC-Check, DNSSEC_Resolver_Check, dnssec-trigger, DNSSEC-Tools' DNSSEC-Check, DNSSEC_Resolver_Check, dnssec-trigger,
FCC_Grade. and FCC_Grade.
Detecting lack of support for specified DNSKEY algorithms and DS Detecting lack of support for specified Domain Name System Key
digest algorithms is outside the scope of this document but the (DNSKEY) algorithms and Delegation Signer (DS) digest algorithms is
document provides information on how to do that, see sample test outside the scope of this document, but the document provides
tool: https://github.com/ogud/DNSSEC_ALG_Check information on how to do that. See the sample test tool:
<https://github.com/ogud/DNSSEC_ALG_Check>.
This document does describe compliance tests for algorithms 5, 7 and This document does describe compliance tests for algorithms 5, 7, and
13 with DS digest algorithms 1 and 2. 13 with DS digest algorithms 1 and 2.
1.3.1. Test Zone Implementation 1.3.1. Test Zone Implementation
In this document, the "test.example.com" domain is used to refer to In this document, the "test.example.com" domain is used to refer to
DNS records which contain test records that have known DNSSEC DNS records that contain test records that have known DNSSEC
properties associated with them. For example, the "badsign- properties associated with them. For example, the "badsign-
a.test.example.com" domain is used below to refer to a DNS A record a.test.example.com" domain is used below to refer to a DNS A record
where the signatures published for it are invalid (i.e., they are where the signatures published for it are invalid (i.e., they are
"bad signatures" that should cause a validation failure). "bad signatures" that should cause a validation failure).
At the time of this publication, the "test.dnssec-tools.org" domain At the time of this publication, the "test.dnssec-tools.org" domain
implements all of these test records. Thus, it may be possible to implements all of these test records. Thus, it may be possible to
replace "test.example.com" in this document with "test.dnssec- replace "test.example.com" in this document with "test.dnssec-
tools.org" when performing real-world tests. tools.org" when performing real-world tests.
2. Goals 2. Goals
This document is intended to show how a Host Validator can detect the This document is intended to show how a Host Validator can detect the
capabilities of a recursive resolver, and work around any problems capabilities of a recursive resolver and work around any problems
that could potentially affect DNSSEC resolution. This enables the that could potentially affect DNSSEC resolution. This enables the
Host Validator to make use of the caching functionality of the Host Validator to make use of the caching functionality of the
recursive resolver, which is desirable in that it decreases network recursive resolver, which is desirable in that it decreases network
traffic and improves response times. traffic and improves response times.
A Host Validator has two choices: it can wait to determine that it A Host Validator has two choices: it can wait to determine that it
has problems with a recursive resolver based on the results that it has problems with a recursive resolver based on the results that it
is getting from real-world queries issued to it, or it can is getting from real-world queries issued to it or it can proactively
proactively test for problems (Section 3) to build a work around list test for problems (Section 3) to build a workaround list ahead of
ahead of time (Section 5). There are pros and cons to both of these time (Section 5). There are pros and cons to both of these paths
paths that are application specific, and this document does not that are application specific, and this document does not attempt to
attempt to provide guidance about whether proactive tests should or provide guidance about whether proactive tests should or should not
should not be used. Either way, DNSSEC roadblock avoidance be used. Either way, DNSSEC roadblock avoidance techniques ought to
techniques ought to be used when needed and if possible. be used when needed and if possible.
Note: Besides being useful for Host Validators, the same tests can be Note: Besides being useful for Host Validators, the same tests can be
used for a recursive resolver to check if its upstream connections used for a recursive resolver to check if its upstream connections
hinder DNSSEC validation. hinder DNSSEC validation.
3. Detecting DNSSEC Non-Compliance 3. Detecting DNSSEC Non-compliance
A Host Validator may choose to determine early-on what roadblocks
exist that may hamper its ability to perform DNSSEC look-ups. This
section outlines tests that can be done to test certain features of
the surrounding network.
These tests should be performed when a resolver determines its This section outlines tests that a validator should perform in order
network infrastructure has changed. Certainly a resolver should to test certain features of the surrounding network. A resolver
perform these tests when first starting, but MAY also perform these should perform these tests when first starting but MAY also perform
tests when they've detected network changes (e.g. address changes, or these tests when it has detected network changes (e.g., address
network reattachment, etc). changes, network reattachment, or etc.).
NOTE: when performing these tests against an address, we make the Note: When performing these tests against an address, we make the
following assumption about that address: It is a uni-cast address or following assumption about that address: it is a unicast address or
an any-cast [RFC4786] cluster where all servers have identical an anycast [RFC4786] cluster where all servers have identical
configuration and connectivity. configuration and connectivity.
NOTE: when performing these tests we also assume that the path is Note: When performing these tests, we also assume that the path is
clear of "DNS interfering" middle-boxes, like firewalls, proxies, clear of "DNS-interfering" middleboxes, like firewalls, proxies, or
forwarders. Presence of such infrastructure can easily make a forwarders. The presence of such infrastructure can easily make a
recursive resolver appear to be improperly performing. It is beyond recursive resolver appear to be functioning improperly. It is beyond
the scope of the document as how to work around such interference, the scope of the document as how to work around such interference,
although the tests defined in this document may indicate when such although the tests defined in this document may indicate when such
misbehaving middle-ware is causing interference. misbehaving middleware is causing interference.
NOTE: This document specifies two sets of tests to perform: a Note: This document specifies two sets of tests to perform: a
comprehensive one and a fast one. The fast one will detect most comprehensive one and a fast one. The fast one will detect most
common problems, thus if the fast one passes then the comprehensive common problems; thus, if the fast one passes, then the comprehensive
MAY be considered passed as well. one MAY be considered passed as well.
3.1. Determining DNSSEC support in recursive resolvers 3.1. Determining DNSSEC Support in Recursive Resolvers
Ideally, a Host Validator can make use of the caching present in Ideally, a Host Validator can make use of the caching present in
recursive resolvers. This section discusses the tests that a recursive resolvers. This section discusses the tests that a
recursive resolver MUST pass in order to be fully usable as a DNS recursive resolver MUST pass in order to be fully usable as a DNS
cache. cache.
Unless stated otherwise, all of the following tests SHOULD have the Unless stated otherwise:
Recursion Desired (RD) flag set when sending out a query and SHOULD
be sent over UDP. Unless otherwise stated, the tests MUST NOT have
the DO bit set or utilize any of the other DNSSEC related
requirements, like EDNS0, unless otherwise specified. The tests are
designed to check for support of one feature at a time.
3.1.1. Supports UDP answers o all of the following tests SHOULD have the Recursion Desired (RD)
flag set when sending out a query and queries SHOULD be sent over
UDP.
Purpose: This tests basic DNS over UDP functionality to a resolver. o the tests MUST NOT have the DNSSEC OK (DO) bit set or utilize any
of the other DNSSEC-related requirements, like Extension
Mechanisms for DNS (EDNS0).
The tests are designed to check for support of one feature at a time.
3.1.1. Supports UDP Answers
Purpose: This tests basic DNS-over-UDP functionality to a resolver.
Test: A DNS request is sent to the resolver under test for an A Test: A DNS request is sent to the resolver under test for an A
record for a known existing domain, such as good-a.test.example.com. record for a known existing domain, such as good-a.test.example.com.
SUCCESS: A DNS response was received that contains an A record in the SUCCESS: A DNS response was received that contains an A record in the
answer section. (The data itself does not need to be checked.) answer section. (The data itself does not need to be checked.)
Note: an implementation MAY chose to not perform the rest of the Note: An implementation MAY chose not to perform the rest of the
tests if this test fails, as it is highly unlikely that the resolver tests if this test fails, as it is highly unlikely that the resolver
under test will pass any of the remaining tests. under test will pass any of the remaining tests.
3.1.2. Supports TCP answers 3.1.2. Supports TCP Answers
Purpose: This tests basic TCP functionality to a resolver. Purpose: This tests basic TCP functionality to a resolver.
Test: A DNS request is sent over TCP to the resolver under test for Test: A DNS request is sent over TCP to the resolver under test for
an A record for a known existing domain, such as good- an A record for a known existing domain, such as good-
a.test.example.com. a.test.example.com.
SUCCESS: A DNS response was received that contains an A record in the SUCCESS: A DNS response was received that contains an A record in the
answer section. (The data itself does not need to be checked.) answer section. (The data itself does not need to be checked.)
3.1.3. Supports EDNS0 3.1.3. Supports EDNS0
Purpose: Test whether a resolver properly supports the EDNS0 Purpose: Test whether a resolver properly supports the EDNS0
extension option. extension option.
Pre-requisite: "Supports UDP or TCP". Prerequisite: Supports UDP or TCP.
Test: Send a request to the resolver under test for an A record for a Test: Send a request to the resolver under test for an A record for a
known existing domain, such as good-a.test.example.com, with an EDNS0 known existing domain, such as good-a.test.example.com, with an EDNS0
OPT record in the additional section. OPT record in the additional section.
SUCCESS: A DNS response was received that contains an EDNS0 option SUCCESS: A DNS response was received that contains an EDNS0 option
with version number 0. with version number 0.
3.1.4. Supports the DO bit 3.1.4. Supports the DO Bit
Purpose: This tests whether a resolver has minimal support of the DO Purpose: This tests whether a resolver has minimal support of the DO
bit. bit.
Pre-requisite: "Supports EDNS0". Prerequisite: Supports EDNS0.
Test: Send a request to the resolver under test for an A record for a Test: Send a request to the resolver under test for an A record for a
known existing domain such as good-a.test.example.com. Set the DO known existing domain, such as good-a.test.example.com. Set the DO
bit in the outgoing query. bit in the outgoing query.
SUCCESS: A DNS response was received that contains the DO bit set. SUCCESS: A DNS response was received that contains the DO bit set.
Note: this only tests that the resolver sets the DO bit in the Note: This only tests that the resolver set the DO bit in the
response. Later tests will determine if the DO bit was actually made response. Later tests will determine if the DO bit was actually made
use of. Some resolvers successfully pass this test because they use of. Some resolvers successfully pass this test because they
simply copy the unknown flags into the response. These resolvers simply copy the unknown flags into the response. These resolvers
will fail the later tests. will fail the later tests.
3.1.5. Supports the AD bit DNSKEY algorithm 5 and 8 3.1.5. Supports the AD Bit DNSKEY Algorithms 5 and/or 8
Purpose: This tests whether the resolver is a validating resolver. Purpose: This tests whether the resolver is a validating resolver.
Pre-requisite: "Supports the DO bit". Prerequisite: Supports the DO bit.
Test: Send requests to the resolver under test for an A record for a Test: Send requests to the resolver under test for an A record for a
known existing domain in a DNSSEC signed zone which is verifiable to known existing domain in a DNSSEC-signed zone that is verifiable to a
a configured trust anchor, such as good-a.test.example.com using the configured trust anchor, such as good-a.test.example.com using the
root's published DNSKEY or DS record as a trust anchor. Set the DO root's published DNSKEY or DS record as a trust anchor. Set the DO
bit in the outgoing query. This test should be done twice, once for bit in the outgoing query. This test should be done twice: once for
a zone that contains algorithm 5 (RSASHA1) and another for algorithm a zone that contains algorithm 5 (RSASHA1) and again for algorithm 8
8 (RSASHA256). (RSASHA256).
SUCCESS: A DNS response was received that contains the AD bit set for SUCCESS: A DNS response was received that contains the Authentic Data
algorithm 5 (RSASHA1). (AD) bit set for algorithm 5 (RSASHA1).
BONUS: The AD bit is set for a resolver that supports Algorithm 8 BONUS: The AD bit is set for a resolver that supports algorithm 8
RSASHA256 (RSASHA256).
3.1.6. Returns RRsig for signed answer 3.1.6. Returns RRSIG for Signed Answer
Purpose: This tests whether a resolver will properly return RRSIG Purpose: This tests whether a resolver will properly return Resource
records when the DO bit is set. Record Signature (RRSIG) records when the DO bit is set.
Pre-requisite: "Supports the DO bit". Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an A record for a Test: Send a request to the resolver under test for an A record for a
known existing domain in a DNSSEC signed zone, such as good- known existing domain in a DNSSEC-signed zone, such as good-
a.test.example.com. Set the DO bit in the outgoing query. a.test.example.com. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains at least one RRSIG SUCCESS: A DNS response was received that contains at least one RRSIG
record. record.
3.1.7. Supports querying for DNSKEY records 3.1.7. Supports Querying for DNSKEY Records
Purpose: This tests whether a resolver can query for and receive a Purpose: This tests whether a resolver can query for and receive a
DNSKEY record from a signed zone. DNSKEY record from a signed zone.
Pre-requisite: "Supports the DO bit." Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an DNSKEY record Test: Send a request to the resolver under test for a DNSKEY record
which is known to exist in a signed zone, such as test.example.com/ that is known to exist in a signed zone, such as test.example.com/
DNSKEY. Set the DO bit in the outgoing query. DNSKEY. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains a DNSKEY record in SUCCESS: A DNS response was received that contains a DNSKEY record in
the answer section. the answer section.
Note: Some DNSKEY RRset's are large and if the network path has Note: Some DNSKEY Resource Record Sets (RRsets) are large and, if the
problems with large answers this query may result in either false network path has problems with large answers, this query may result
positive or false negative. In general the DNSKEY queried for should in either a false positive or a false negative. In general, the
be small enough to fit into a 1220 byte answer, to avoid false DNSKEY queried for should be small enough to fit into a 1220-byte
negative result when TCP is disabled. However, querying many zones answer to avoid a false negative result when TCP is disabled.
will result in answers greater than 1220 bytes so DNS over TCP MUST However, querying many zones will result in answers greater than 1220
be available for DNSSEC use in general. bytes, so DNS over TCP MUST be available for DNSSEC use in general.
3.1.8. Supports querying for DS records 3.1.8. Supports Querying for DS Records
Purpose: This tests whether a resolver can query for and receive a DS Purpose: This tests whether a resolver can query for and receive a DS
record from a signed zone. record from a signed zone.
Pre-requisite: "Supports the DO bit." Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an DS record
which is known to exist in a signed zone, such as test.example.com/ Test: Send a request to the resolver under test for a DS record that
DS. Set the DO bit in the outgoing query. is known to exist in a signed zone, such as test.example.com/DS. Set
the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains a DS record in the SUCCESS: A DNS response was received that contains a DS record in the
answer section. answer section.
3.1.9. Supports negative answers with NSEC records 3.1.9. Supports Negative Answers with NSEC Records
Purpose: This tests whether a resolver properly returns NSEC records Purpose: This tests whether a resolver properly returns NextSECure
for a non-existing domain in a DNSSEC signed zone. (NSEC) records for a nonexisting domain in a DNSSEC-signed zone.
Pre-requisite: "Supports the DO bit." Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an A record which Test: Send a request to the resolver under test for an A record that
is known to not exist in an NSEC signed zone, such as non- is known to not exist in an NSEC-signed zone, such as
existent.test.example.com. Set the DO bit in the outgoing query. nonexistent.test.example.com. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains an NSEC record. SUCCESS: A DNS response was received that contains an NSEC record.
Note: The query issued in this test MUST be sent to a NSEC signed Note: The query issued in this test MUST be sent to an NSEC-signed
zone. Getting back appropriate NSEC3 records does not indicate a zone. Getting back appropriate NSEC3 records does not indicate a
failure, but a bad test. failure, but a bad test.
3.1.10. Supports negative answers with NSEC3 records 3.1.10. Supports Negative Answers with NSEC3 Records
Purpose: This tests whether a resolver properly returns NSEC3 records Purpose: This tests whether a resolver properly returns NSEC3 records
([RFC5155]) for a non-existing domain in a DNSSEC signed zone. ([RFC5155]) for a nonexisting domain in a DNSSEC-signed zone.
Pre-requisite: "Supports the DO bit." Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an A record which Test: Send a request to the resolver under test for an A record that
is known to be non-existent in a zone signed using NSEC3, such as is known to be nonexistent in a zone signed using NSEC3, such as
non-existent.nsec3-ns.test.example.com. Set the DO bit in the nonexistent.nsec3-ns.test.example.com. Set the DO bit in the
outgoing query. outgoing query.
SUCCESS: A DNS response was received that contains an NSEC3 record. SUCCESS: A DNS response was received that contains an NSEC3 record.
Bonus: If the AD bit is set, this validator supports algorithm 7 Bonus: If the AD bit is set, this validator supports algorithm 7
RSASHA1-NSEC3-SHA1 (RSASHA1-NSEC3-SHA1).
Note: The query issued in this test MUST be sent to a NSEC3 signed Note: The query issued in this test MUST be sent to an NSEC3-signed
zone. Getting back appropriate NSEC records does not indicate a zone. Getting back appropriate NSEC records does not indicate a
failure, but a bad test. failure, but a bad test.
3.1.11. Supports queries where DNAME records lead to an answer 3.1.11. Supports Queries Where DNAME Records Lead to an Answer
Purpose: This tests whether a resolver can query for an A record in a Purpose: This tests whether a resolver can query for an A record in a
zone with a known DNAME referral for the record's parent. zone with a known DNAME referral for the record's parent.
Test: Send a request to the resolver under test for an A record which Test: Send a request to the resolver under test for an A record that
is known to exist in a signed zone within a DNAME referral child is known to exist in a signed zone within a DNAME-referral child
zone, such as good-a.dname-good-ns.test.example.com. zone, such as good-a.dname-good-ns.test.example.com.
SUCCESS: A DNS response was received that contains a DNAME in the SUCCESS: A DNS response was received that contains a DNAME in the
answer section. An RRSIG MUST also be received in the answer section answer section. An RRSIG MUST also be received in the answer section
that covers the DNAME record. that covers the DNAME record.
3.1.12. Permissive DNSSEC 3.1.12. Permissive DNSSEC
Purpose: To see if a validating resolver is ignoring DNSSEC Purpose: To see if a validating resolver is ignoring DNSSEC
validation failures. validation failures.
Pre-requisite: Supports the AD bit. Prerequisite: Supports the AD bit.
Test: ask for data from a broken DNSSEC delegation such as badsign- Test: Ask for data from a broken DNSSEC delegation, such as badsign-
a.test.example.com. a.test.example.com.
SUCCESS: A reply was received with the Rcode set to SERVFAIL SUCCESS: A reply was received with the Rcode set to SERVFAIL.
3.1.13. Supports Unknown RRtypes 3.1.13. Supports Unknown RRtypes
Purpose: Some DNS Resolvers/gateways only support some RRtypes. This Purpose: Some DNS Resolvers/gateways only support some Resource
causes problems for applications that need recently defined types. Record Types (RRtypes). This causes problems for applications that
need recently defined types.
Pre-requisite: "Supports UDP or TCP". Prerequisite: Supports UDP or TCP.
Test: Send a request for recently defined type or unknown type in the Test: Send a request for a recently defined type or an unknown type
20000-22000 range, that resolves to a server that will return an in the 20000-22000 range, that resolves to a server that will return
answer for all types, such as alltypes.example.com (a server today an answer for all types, such as alltypes.example.com (a server today
that supports this: alltypes.res.dnssecready.org) that supports this is alltypes.res.dnssecready.org).
SUCCESS: A DNS response was retrieved that contains the type SUCCESS: A DNS response was retrieved that contains the type
requested in the answer section. requested in the answer section.
3.2. Direct Network Queries 3.2. Direct Network Queries
If need be, a Host Validator may need to make direct queries to If needed, a Host Validator may need to make direct queries to
authoritative servers or known Open Recursive Resolvers in order to authoritative servers or known Open Recursive Resolvers in order to
collect data. To do that, a number of key network features MUST be collect data. To do that, a number of key network features MUST be
functional. functional.
3.2.1. Support for Remote UDP Over Port 53 3.2.1. Support for Remote UDP over Port 53
Purpose: This tests basic UDP functionality to outside the local Purpose: This tests basic UDP functionality to outside the local
network. network.
Test: A DNS request is sent to a known distant authoritative server Test: A DNS request is sent to a known distant authoritative server
for a record known to be within that server's authoritative data. for a record known to be within that server's authoritative data.
Example: send a query to the address of ns1.test.example.com for the Example: send a query to the address of ns1.test.example.com for the
good-a.test.example.com/A record. good-a.test.example.com/A record.
SUCCESS: A DNS response was received that contains an A record in the SUCCESS: A DNS response was received that contains an A record in the
answer section. answer section.
Note: an implementation can use the local resolvers for determining Note: An implementation can use the local resolvers for determining
the address of the name server that is authoritative for the given the address of the name server that is authoritative for the given
zone. The recursive bit MAY be set for this request, but does not zone. The recursive bit MAY be set for this request, but it does not
need to be. need to be.
3.2.2. Support for Remote UDP With Fragmentation 3.2.2. Support for Remote UDP with Fragmentation
Purpose: This tests if the local network can receive fragmented UDP Purpose: This tests if the local network can receive fragmented UDP
answers answers.
Pre-requisite: Local UDP traffic > 1500 in size is possible Prerequisite: Local UDP traffic > 1500 bytes in size is possible.
Test: A DNS request is sent over UDP to a known distant DNS address Test: A DNS request is sent over UDP to a known distant DNS address
asking for a record that has answer larger than 2000 bytes. For asking for a record that has an answer larger than 2000 bytes. For
example, send a query for the test.example.com/DNSKEY record with the example, send a query for the test.example.com/DNSKEY record with the
DO bit set in the outgoing query. DO bit set in the outgoing query.
Success: A DNS response was received that contains the large answer. SUCCESS: A DNS response was received that contains the large answer.
Note: A failure in getting large answers over UDP is not a serious Note: A failure in getting large answers over UDP is not a serious
problem if TCP is working. problem if TCP is working.
3.2.3. Support for Outbound TCP Over Port 53 3.2.3. Support for Outbound TCP over Port 53
Purpose: This tests basic TCP functionality to outside the local Purpose: This tests basic TCP functionality to outside the local
network. network.
Test: A DNS request is sent over TCP to a known distant authoritative Test: A DNS request is sent over TCP to a known distant authoritative
server for a record known to be within that server's authoritative server for a record known to be within that server's authoritative
data. Example: send a query to the address of ns1.test.example.com data. Example: send a query to the address of ns1.test.example.com
for the good-a.test.example.com/A record. for the good-a.test.example.com/A record.
SUCCESS: A DNS response was received that contains an A record in the SUCCESS: A DNS response was received that contains an A record in the
answer section. answer section.
Note: an implementation can use the local resolvers for determining Note: An implementation can use the local resolvers for determining
the address of the name server that is authoritative for the given the address of the name server that is authoritative for the given
zone. The recursive bit MAY be set for this request, but does not zone. The recursive bit MAY be set for this request, but it does not
need to be. need to be.
3.3. Support for DNSKEY and DS combinations 3.3. Support for DNSKEY and DS Combinations
Purpose: These tests can check what algorithm combinations are Purpose: This test can check what algorithm combinations are
supported. supported.
Pre-requisite: At least one of above tests has returned the AD bit Prerequisite: Supports the AD bit for Algorithms 5 and/or 8.
set proving that the upstream is validating
Test: A DNS request is sent over UDP to the resolver under test for a Test: A DNS request is sent over UDP to the resolver under test for a
known combination of the DS algorithm number (N) and DNSKEY algorithm known combination of the DS algorithm number (N) and DNSKEY algorithm
number (M) of the example form ds-N.alg-M-nsec.test.example.com. number (M) of the example form ds-N.alg-M-nsec.test.example.com.
Examples: Examples:
ds-2.alg-13-nsec.test.example.com TXT ds-2.alg-13-nsec.test.example.com TXT
or or
ds-4.alg-13-nsec3.test.example.com TXT. ds-4.alg-13-nsec3.test.example.com TXT
SUCCESS: a DNS response is received with the AD bit set and with a SUCCESS: A DNS response is received with the AD bit set and with a
matching record type in the answer section. matching record type in the answer section.
Note: for algorithms 6 and 7, NSEC is not defined thus query for alg- Note: For algorithms 6 and 7, NSEC is not defined; thus, a query for
M-nsec3 is required. Similarly NSEC3 is not defined for algorithms alg-M-nsec3 is required. Similarly, NSEC3 is not defined for
1, 3 and 5. Furthermore algorithms 2, 4, 9, 11 do not currently have algorithms 1, 3, and 5. Furthermore, algorithms 2, 4, 9, and 11 do
definitions for signed zones. not currently have definitions for signed zones.
4. Aggregating The Results 4. Aggregating the Results
Some conclusions can be drawn from the results of the above tests in Some conclusions can be drawn from the results of the above tests in
an "aggregated" form. This section defines some labels to assign to an "aggregated" form. This section defines some labels to assign to
a resolver under test given the results of the tests run against a resolver under test given the results of the tests run against
them. them.
4.1. Resolver capability description 4.1. Resolver Capability Description
This section will group and label certain common results This section will group and label certain common results.
Resolvers are classified into following broad behaviors: Resolvers are classified into the following broad behaviors:
Validator: The resolver passes all DNSSEC tests and had the AD bit Validator: The resolver passes all DNSSEC tests and had the AD bit
appropriately set. appropriately set.
DNSSEC Aware: The resolver passes all DNSSEC tests, but does not DNSSEC-Aware: The resolver passes all DNSSEC tests, but it does not
appropriately set the AD bit on answers, indicating it is not appropriately set the AD bit on answers, indicating it is not
validating. A Host Validator will function fine using this validating. A Host Validator will function fine using this
resolver as a forwarder. resolver as a forwarder.
Non-DNSSEC capable: The resolver is not DNSSEC aware and will make Non-DNSSEC-Capable: The resolver is not DNSSEC-aware and will make
it hard for a Host Validator to operate behind it. It MAY be it hard for a Host Validator to operate behind it. It MAY be
usable for querying for data that is in known insecure sections of usable to query for data that is in known insecure sections of the
the DNS tree. DNS tree.
Not a DNS Resolver: This is a improperly behaving resolver and not Not a DNS Resolver: This is an improperly behaving resolver and
should not be used at all. should not be used at all.
While it would be great if all resolvers fell cleanly into one of the While it would be great if all resolvers fell cleanly into one of the
broad categories above, that is not the case. For that reason it is broad categories above, that is not the case. For that reason, it is
necessary to augment the classification with more descriptive result, necessary to augment the classification with a more descriptive
this is done by adding the word "Partial" in front of Validator/ result. This is done by adding the word "Partial" in front of
DNSSEC Aware classifications, followed by sub-descriptors of what is Validator/DNSSEC-aware classifications, followed by sub-descriptors
not working. of what is not working.
Unknown: Failed the Unknown test Unknown: Failed the unknown test
DNAME: Failed the DNAME test DNAME: Failed the DNAME test
NSEC3: Failed the NSEC3 test NSEC3: Failed the NSEC3 test
TCP: TCP not available TCP: TCP not available
SlowBig: UDP is size limited but TCP fallback works SlowBig: UDP is size limited, but TCP fallback works
NoBig: TCP not available and UDP is size limited NoBig: TCP not available and UDP is size limited
Permissive: Passes data known to fail validation Permissive: Passes data known to fail validation
5. Roadblock Avoidance 5. Roadblock Avoidance
The goal of this document is to tie the above tests and aggregations The goal of this document is to tie the above tests and aggregations
to avoidance practices; however the document does not specify exactly to avoidance practices; however, the document does not specify
how to do that. exactly how to do that.
Once we have determined what level of support is available in the Once we have determined what level of support is available in the
network, we can determine what must be done in order to effectively network, we can determine what must be done in order to effectively
act as a validating resolver. This section discusses some of the act as a validating resolver. This section discusses some of the
options available given the results from the previous sections. options available given the results from the previous sections.
The general fallback approach can be described by the following The general fallback approach can be described by the following
sequence: sequence:
If the resolver is labeled as "Validator" or "DNSSEC aware": If the resolver is labeled as "Validator" or "DNSSEC-aware":
Send queries through this resolver and perform local Send queries through this resolver and perform local
validation on the results. validation on the results.
If validation fails, try the next resolver If validation fails, try the next resolver.
Else if the resolver is labeled "Not a DNS Resolver" or Else, if the resolver is labeled "Not a DNS Resolver" or
"Non-DNSSEC capable": "Non-DNSSEC-capable":
Mark it as unusable and try next resolver Mark it as unusable and try the next resolver.
Else if no more resolvers are configured and if direct queries Else if no more resolvers are configured and if direct queries
are supported: are supported:
1. Try iterating from the Root 1. Try iterating from the Root.
2. If the answer is SECURE/BOGUS: 2. If the answer is SECURE/BOGUS:
Return the result of the iteration Return the result of the iteration.
3. If the answer is INSECURE: 3. If the answer is INSECURE:
Re-query "Non-DNSSEC capable" servers and return Re-query "Non-DNSSEC-capable" servers and return
answers from them w/o the AD bit set to the client. answers from them without the AD bit set to the client.
This will increase the likelihood that split-view unsigned This will increase the likelihood that split-view unsigned
answers are found. answers are found.
Else: Else:
Return an error code and log a failure Return an error code and log a failure.
While attempting resolution through a particular recursive name While attempting resolution through a particular recursive name
server with a particular transport method that worked, any transport- server with a particular transport method that worked, any transport-
specific parameters MUST be remembered in order to avoid any specific parameters MUST be remembered in order to avoid any
unnecessary fallback attempts. unnecessary fallback attempts.
Transport-specific parameters MUST also be remembered for each Transport-specific parameters MUST also be remembered for each
authoritative name server that is queried while performing an authoritative name server that is queried while performing an
iterative mode lookup. iterative mode lookup.
Any transport settings that are remembered for a particular name Any transport settings that are remembered for a particular name
server MUST be periodically refreshed; they should also be refreshed server MUST be periodically refreshed; they should also be refreshed
when an error is encountered as described below. when an error is encountered as described below.
For a stub resolver, problems with the name server can manifest For a stub resolver, problems with the name server can manifest
themselves under the following types of error conditions: themselves under the following types of error conditions:
o No Response, error response or missing DNSSEC meta-data o No Response, error response, or missing DNSSEC metadata
o Illegal Response: An illegal response is received, which prevents o Illegal Response: An illegal response is received, which prevents
the validator from fetching all necessary records required for the validator from fetching all the necessary records required for
constructing an authentication chain. This could result when constructing an authentication chain. This could result when
referral loops are encountered, when any of the antecedent zone referral loops are encountered, when any of the antecedent zone
delegations are lame, when aliases are erroneously followed for delegations are lame, when aliases are erroneously followed for
certain RRtypes (such as SOA, DNSKEYs or DS records), or when certain RRtypes (such as Start of Authority (SOA), DNSKEYs, or DS
resource records for certain types (e.g. DS) are returned from a records), or when resource records for certain types (e.g., DS)
zone that is not authoritative for such records. are returned from a zone that is not authoritative for such
records.
o Bogus Response: A Bogus Response is received, when the o Bogus Response: A Bogus Response is received, when the
cryptographic assertions in the authentication chain do not cryptographic assertions in the authentication chain do not
validate properly. validate properly.
For each of the above error conditions a validator MAY adopt the For each of the above error conditions, a validator MAY adopt the
following dynamic fallback technique, preferring a particular following dynamic fallback technique, preferring a particular
approach if it is known to work for a given name server or zone from approach if it is known to work for a given name server or zone from
previous attempts. previous attempts.
o No response, error response, or missing DNSSEC meta-data: o No response, error response, or missing DNSSEC metadata:
* Re-try with different EDNS0 sizes (4096, 1492, None) * Retry with different EDNS0 sizes (4096, 1492, or None).
* Re-try with TCP only * Retry with TCP only.
* Perform an iterative query starting from the Root if the * Perform an iterative query starting from the Root if the
previous error was returned from a lookup that had recursion previous error was returned from a lookup that had recursion
enabled. enabled.
* Re-try using an alternative transport method, if this * Retry using an alternative transport method, if this
alternative method is known (configured) to be supported by the alternative method is known (configured) to be supported by the
nameserver in question. name server in question.
o Illegal Response o Illegal Response
* Perform an iterative query starting from the Root if the * Perform an iterative query starting from the Root if the
previous error was returned from a lookup that had recursion previous error was returned from a lookup that had recursion
enabled. enabled.
* Check if any of the antecedent zones up to the closest * Check if any of the antecedent zones up to the closest
configured trust anchor are provably insecure. configured trust anchor are Insecure.
o Bogus Response o Bogus Response
* Perform an iterative query starting from the Root if the * Perform an iterative query starting from the Root if the
previous error was returned from a lookup that had recursion previous error was returned from a lookup that had recursion
enabled. enabled.
For each fallback technique, attempts to multiple potential name For each fallback technique, attempts to reach multiple potential
servers should be skewed such that the next name server is tried when name servers should be skewed such that the next name server is tried
the previous one encounters an error, a timeout is reached, or when the previous one returns an error or a timeout is reached.
whichever is earlier.
The validator SHOULD remember, in its zone-specific fallback cache, The validator SHOULD remember, in its zone-specific fallback cache,
any broken behavior identified for a particular zone for a duration any broken behavior identified for a particular zone for a duration
of that zone's SOA negative TTL. of that zone's SOA-negative TTL.
The validator MAY place name servers that exhibit broken behavior The validator MAY place name servers that exhibit broken behavior
into a blacklist, and bypass these name servers for all zones that into a blacklist and bypass these name servers for all zones that
they are authoritative for. The validator MUST time out entries in they are authoritative for. The validator MUST time out entries in
this name server blacklist periodically, where this interval could be this name server blacklist periodically, where this interval could be
set to be the same as the DNSSEC BAD cache default TTL. set to be the same as the DNSSEC BAD cache default TTL.
5.1. Partial Resolver Usage 5.1. Partial Resolver Usage
It may be possible to use Non-DNSSEC Capable caching resolvers in It may be possible to use Non-DNSSEC-Capable caching resolvers in
careful ways if maximum optimization is desired. This section careful ways if maximum optimization is desired. This section
describes some of the advanced techniques that could be used to use a describes some of the advanced techniques that could be implemented
resolver in at least a minimal way. Most of the time this would be to use a resolver in at least a minimal way. Most of the time, this
unnecessary, except in the case where none of the resolvers are fully would be unnecessary; the exception being the case where none of the
compliant and thus the choices would be to use them at least resolvers are fully compliant and, thus, the choice would be to use
minimally or not at all (and no caching benefits would be available). them at least minimally or not at all (and no caching benefits would
be available).
5.1.1. Known Insecure Lookups 5.1.1. Known Insecure Lookups
If a resolver is Non-DNSSEC Capable but a section of the DNS tree has If a resolver is Non-DNSSEC-Capable but a section of the DNS tree has
been determined to be Provably Insecure [RFC4035], then queries to been determined to be Insecure [RFC4035], then queries to this
this section of the tree MAY be sent through Non-DNSSEC Capable section of the tree MAY be sent through the Non-DNSSEC-Capable
caching resolver. caching resolver.
5.1.2. Partial NSEC/NSEC3 Support 5.1.2. Partial NSEC/NSEC3 Support
Resolvers that understand DNSSEC generally, and understand NSEC but Resolvers that understand DNSSEC generally, and understand NSEC but
not NSEC3 are partially usable. These resolvers generally also lack not NSEC3, are partially usable. These resolvers generally also lack
support for Unknown types, rendering them mostly useless and to be support for unknown types, rendering them mostly useless and to be
avoided. avoided.
6. Start-Up and Network Connectivity Issues 6. Start-Up and Network Connectivity Issues
A number of scenarios will produce either short-term or long-term A number of scenarios will produce either short-term or long-term
connectivity issues with respect to DNSSEC validation. Consider the connectivity issues with respect to DNSSEC validation. Consider the
following cases: following cases:
Time Synchronization: Time synchronization problems can occur when Time Synchronization: Time synchronization problems can occur when
a device which has been off for a period of time and the clock is a device has been off for a period of time and the clock is no
no longer in close synchronization with "real time" or when a longer in close synchronization with "real time" or when a device
device always has clock set to the same time during start-up. always has the clock set to the same time during start-up. This
This will cause problems when the device needs to resolve their will cause problems when the device needs to resolve its source of
source of time synchronization, such as "ntp.example.com". time synchronization, such as "ntp.example.com".
Changing Network Properties: A newly established network Changing Network Properties: A newly established network
connection may change state shortly after a HTTP-based pay-wall connection may change state shortly after an HTTP-based paywall
authentication system has been used. This especially common in authentication system has been used. This is especially common in
hotel, airport and coffee-shop style networks, where DNSSEC, hotel, airport, and coffee-shop networks where DNSSEC, validation,
validation and even DNS are not functional until the user proceeds and even DNS are not functional until the user proceeds through a
through a series of forced web pages used to enable their network. series of forced web pages used to enable their network. The
The tests in Section 3 will produce very different results before tests in Section 3 will produce very different results before and
and after the network authorization has succeeded. APIs exist on after the network authorization has succeeded. APIs exist on many
many operating systems to detect initial network device status operating systems to detect initial network device status changes,
changes, such as right after DHCP has finished, but few (none?) such as right after DHCP has finished, but few (none?) exist to
exist to detect that authentication through a pay-wall has detect that authentication through a paywall has succeeded.
succeeded.
There are only two choices when situations like this happen: There are only two choices when situations like this happen:
Continue to perform DNSSEC processing, which will likely result in Continue to perform DNSSEC processing, which will likely result in
all DNS requests failing. This is the most secure route, but all DNS requests failing. This is the most secure route, but
causes the most operational grief for users. causes the most operational grief for users.
Turn off DNSSEC support until the network proves to be usable. Turn off DNSSEC support until the network proves to be usable.
This allows the user to continue using the network, at the This allows the user to continue using the network, at the cost of
sacrifice of security. It also allows for a denial of security- security. It also allows for a denial-of-service attack if a man-
service attack if a man-in-the-middle can convince a device that in-the-middle can convince a device that DNSSEC is impossible.
DNSSEC is impossible.
6.1. What To Do 6.1. What to Do
If the Host Validator detects that DNSSEC resolution is not possible If the Host Validator detects that DNSSEC resolution is not possible,
it SHOULD log the event and/or SHOULD report an error to the user. it SHOULD log the event and/or SHOULD report an error to the user.
In the case there is no user, then no reporting can be performed and In the case where there is no user, no reporting can be performed;
thus the device MAY have a policy of action, like continue or fail. thus, the device MAY have a policy of action, like continue or fail.
Until middle boxes allow DNSSEC protected information to traverse Until middleboxes allow DNSSEC-protected information to traverse them
them consistently, software implementations may need to offer this consistently, software implementations may need to offer this choice
choice to let users pick the security level they require. Note that to let users pick the security level they require. Note that
continuing without DNSSEC protection in the absence of a notification continuing without DNSSEC protection in the absence of a notification
or report could lead to situations where users assume a level of or report could lead to situations where users assume a level of
security that does not exist. security that does not exist.
7. Quick Test 7. Quick Test
The quick tests defined below make the assumption that the questions The quick tests defined below make the assumption that the questions
to be asked are of a real resolver and the only real question is: to be asked are of a real resolver; and the only real question is:
"how complete is the DNSSEC support?". This quick test as been "How complete is the DNSSEC support?". This quick test has been
implemented in few programs developed at IETF hackthons at IETF-91 implemented in a few programs developed at IETF hackathons at IETF 93
and IETF-92. The programs use a common grading method. For each and IETF 94. The programs use a common grading method. For each
question that returns expected answer the resolver gets a point. If question that returns an expected answer, the resolver gets a point.
the AD bit is set as expected the resolver gets a second point. If the AD bit is set as expected, the resolver gets a second point.
7.1. Test negative answers Algorithm 5 7.1. Test Negative Answers Algorithm 5
Query: realy-doesnotexist.test.example.com. A Query: realy-doesnotexist.test.example.com. A
Answer: RCODE= NXDOMAIN, Empty Answer, Authority: NSEC proof Answer: RCODE= NXDOMAIN, Empty Answer, Authority: NSEC-proof
7.2. Test Algorithm 8 7.2. Test Algorithm 8
Query: alg-8-nsec3.test.example.com. SOA Query: alg-8-nsec3.test.example.com. SOA
Answer: RCODE= 0, Answer: SOA record Answer: RCODE= 0, Answer: SOA record
7.3. Test Algorithm 13 7.3. Test Algorithm 13
Query: alg-13-nsec.test.example.com. SOA Query: alg-13-nsec.test.example.com. SOA
Answer: RCODE= 0, Answer: SOA record Answer: RCODE= 0, Answer: SOA record
7.4. Fails when DNSSEC does not validate 7.4. Fails When DNSSEC Does Not Validate
Query: dnssec-failed.test.example.com. SOA Query: dnssec-failed.test.example.com. SOA
Answer: RCODE= SERVFAIL, empty answer, and authority, AD=0 Answer: RCODE= SERVFAIL, empty answer, and authority, AD=0
8. Security Considerations 8. Security Considerations
This document discusses problems that may occur while deploying the This document discusses problems that may occur while deploying the
DNSSEC protocol. It describes what may be possible to help detect DNSSEC protocol. It describes what may be possible to help detect
and mitigate these problems. Following the outlined suggestions will and mitigate these problems. Following the outlined suggestions will
result in a more secure DNSSEC operational environment than if DNSSEC result in a more secure DNSSEC-operational environment than if DNSSEC
was simply disabled. was simply disabled.
9. IANA Considerations 9. Normative References
No IANA actions are required.
10. Acknowledgments
We thank the IESG and DNSOP working group members for their extensive
comments and suggestions.
11. Normative References
[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, March 1997. Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "Resource Records for the DNS Security Extensions", Rose, "Resource Records for the DNS Security Extensions",
RFC 4034, March 2005. RFC 4034, DOI 10.17487/RFC4034, March 2005,
<http://www.rfc-editor.org/info/rfc4034>.
[RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S. [RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "Protocol Modifications for the DNS Security Rose, "Protocol Modifications for the DNS Security
Extensions", RFC 4035, March 2005. Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005,
<http://www.rfc-editor.org/info/rfc4035>.
[RFC4786] Abley, J. and K. Lindqvist, "Operation of Anycast [RFC4786] Abley, J. and K. Lindqvist, "Operation of Anycast
Services", BCP 126, RFC 4786, DOI 10.17487/RFC4786, Services", BCP 126, RFC 4786, DOI 10.17487/RFC4786,
December 2006, <http://www.rfc-editor.org/info/rfc4786>. December 2006, <http://www.rfc-editor.org/info/rfc4786>.
[RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS [RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS
Security (DNSSEC) Hashed Authenticated Denial of Security (DNSSEC) Hashed Authenticated Denial of
Existence", RFC 5155, March 2008. Existence", RFC 5155, DOI 10.17487/RFC5155, March 2008,
<http://www.rfc-editor.org/info/rfc5155>.
[RFC5625] Bellis, R., "DNS Proxy Implementation Guidelines", [RFC5625] Bellis, R., "DNS Proxy Implementation Guidelines",
BCP 152, RFC 5625, DOI 10.17487/RFC5625, August 2009, BCP 152, RFC 5625, DOI 10.17487/RFC5625, August 2009,
<http://www.rfc-editor.org/info/rfc5625>. <http://www.rfc-editor.org/info/rfc5625>.
Acknowledgments
We thank the IESG and DNSOP working group members for their extensive
comments and suggestions.
Authors' Addresses Authors' Addresses
Wes Hardaker Wes Hardaker
Parsons USC/ISI
P.O. Box 382 P.O. Box 382
Davis, CA 95617 Davis, CA 95617
US United States of America
Email: ietf@hardakers.net Email: ietf@hardakers.net
Olafur Gudmundsson Olafur Gudmundsson
CloudFlare CloudFlare
San Francisco, CA 94107 San Francisco, CA 94107
USA United States of America
Email: olafur+ietf@cloudflare.com Email: olafur+ietf@cloudflare.com
Suresh Krishnaswamy Suresh Krishnaswamy
Parsons Parsons
7110 Samuel Morse Dr 7110 Samuel Morse Dr
Columbia, MD 21046 Columbia, MD 21046
US United States of America
Email: suresh@tislabs.com Email: suresh@tislabs.com
 End of changes. 159 change blocks. 
344 lines changed or deleted 344 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/