Network Working Group P. Sood Internet-Draft Google Intended status: Standards Track P. Hoffman Expires: January 1, 2021 ICANN June 30, 2020 Upgrading Communication from Stub Resolvers to DoT or DoH draft-pp-add-stub-upgrade-02 Abstract This document describes methods for a DNS stub resolver to upgrade its communications with a known recursive resolver to include encrytion using DoT or DoH. This protocol is designed for the scenario where the stub resolver already has the IP address of the recursive resolver. Other protocols under develpment address scenarios where the stub resolver wants to discover recursive resolvers that use DoT or DoH. This document does not cover such discovery. Status of This Memo This Internet-Draft is submitted in full conformance with the 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 https://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on January 1, 2021. Copyright Notice Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents Sood & Hoffman Expires January 1, 2021 [Page 1] Internet-Draft Stub upgrade to DoT or DoH June 2020 carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 3 2. Using RESINFO Responses for Upgrade . . . . . . . . . . . . . 3 2.1. Contacting This Resolver Using DoH . . . . . . . . . . . 3 2.2. Contacting This Resolver Using DoT . . . . . . . . . . . 3 2.3. Examples . . . . . . . . . . . . . . . . . . . . . . . . 4 3. Method Overview . . . . . . . . . . . . . . . . . . . . . . . 4 3.1. Order of Desired Protocols . . . . . . . . . . . . . . . 6 4. Method Details . . . . . . . . . . . . . . . . . . . . . . . 6 4.1. Inputs to the Process . . . . . . . . . . . . . . . . . . 6 4.2. TLS Authentication . . . . . . . . . . . . . . . . . . . 7 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 5.1. Registration for doh-templates in the IANA DNS Resolver Information Registry . . . . . . . . . . . . . . . . . . 7 5.2. Registration for dot-ports in the IANA DNS Resolver Information Registry . . . . . . . . . . . . . . . . . . 7 6. Security Considerations . . . . . . . . . . . . . . . . . . . 8 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 8 7.1. Normative References . . . . . . . . . . . . . . . . . . 8 7.2. Informative References . . . . . . . . . . . . . . . . . 9 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9 1. Introduction A stub resolver (hereafter called "a stub") using traditional DNS over port 53 may wish to use encrypted communication with the recursive resolver (hereafter called "a resolver"). In such a scenario, the stub needs to know how to probe the resolver to find out if it can use encrypted communication. This document describes a mechanism for a stub that knows the IP address of the resolver to do so. It is assumed that the IP address was received insecurely, such as through DHCP. The method in this document assumes that a stub wants to attempt to upgrade its communication with the resolver to either DNS-over-TLS (DoT, [RFC7858]) or DNS-over-HTTPS (DoH, [RFC8484]). The method is basically to use a DNS request as defined in [I-D.pp-add-resinfo] to get information about whether the resolver supports DoT or DoH. The method can later be extended to other secure transports for stub-to- resolver communication transports. Sood & Hoffman Expires January 1, 2021 [Page 2] Internet-Draft Stub upgrade to DoT or DoH June 2020 1.1. Definitions In the rest of this document, the term "resolver" without qualification means "recursive resolver" as defined in [RFC8499]. Also, the term "stub" is used to mean "stub resolver". The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. 2. Using RESINFO Responses for Upgrade This document defines two entries for the IANA DNS Resolver Information Registry that is defined in [I-D.pp-add-resinfo]. 2.1. Contacting This Resolver Using DoH The "doh-templates" name is used to specify the URI template or templates that can be used by the stub resolver for DoH queries. The value MUST be an array of URI templates. Each element of the array in the value is a JSON string. The host part of the URI template MUST be an IP address. [[ For future: maybe drop the "MUST be an IP address" restriction and say that it can be either an IP address or host name. ]] The array in the value can be empty, which indicates that the resolver does not offer DoH service. An empty array and the absence of a name/value pair for "doh-templates" have identical meanings. The value of "doh-templates" is an array of strings instead of just one string because a resolver might have more than one IP address or URL paths. The order of the elements in the array has no meaning; that is, the array could instead be considered a set. [[ This section needs to be updated to handle DoH over HTTP/3. These updates then need to be reflected in Section 3. ]] 2.2. Contacting This Resolver Using DoT The "dot-ports" name is used to specify the port(s) that can be used by the stub resolver for DoT queries. The value MUST be an array of port numbers. Each element of the array in the value is a JSON number. Sood & Hoffman Expires January 1, 2021 [Page 3] Internet-Draft Stub upgrade to DoT or DoH June 2020 The value of "dot-ports" is an array of numbers instead of just one number because a resolver might support DoT on more than one port. The order of the elements in the array has no meaning; that is, the array could instead be considered a set. The array in the value can be empty, which indicates that the resolver does not offer DoT service. An empty array and the absence of a name/value pair for "dot-ports" have identical meanings. [[ For future: maybe add "dot-hostnames" to enable authentication. ]] 2.3. Examples A resolver has two IP addresses, 192.0.2.222 and 203.0.113.77. It offers DoH service, and offers DoT service on the default port. It's response to the RESINFO query might be either one of: { "dot-ports": [ 853 ], "doh-templates": [ "https://203.0.113.77//dns-query{?dns}", "https://192.0.2.222//dns-query{?dns}" ] } A resolver does not offer DoH service, but does offer DoT service on the default port. It's response to the RESINFO query might be either one of: { "dot-ports": [ 853 ], "doh-templates": [] } or { "dot-ports": [ 853 ] } 3. Method Overview The pseudocode for the method is: # Things the stub resolver knows # dohCapable Does the stub know how to do DoH # dotCapable Does the stub know how to do DoT # resIP IP address of resolver # upgradeNoAuth Does the stub want to upgrade even if it can't authenticate the TLS session # insecureOK Does the stub want to use unauthenticated classic DNS if DoH/DoT upgrades fail [[ Need to fix dohCapable to deal with DoH templates that point to resolvers other than the one queried. ]] Sood & Hoffman Expires January 1, 2021 [Page 4] Internet-Draft Stub upgrade to DoT or DoH June 2020 if dohCapable: send a DNS query of resolver-info.arpa/IN/RESINFO if there is a non-empty "doh-templates" name in the response: for each template in the name/value pair: start TLS session on resIP, port from DoH template if it succeeds if it authenticates correctly resolve the URI template if 200-level response use result to do DoH; finished else if 300-level response follow redirect, act appropriately else if 400-level response continue else if upgradeNoAuth: resolve the URI template if 200-level response use result to do DoH; finished else if 300-level response follow redirect, act appropriately else if 400-level response continue else continue else continue # no DoH template worked if dotCapable: send a DNS query of resolver-info.arpa/IN/RESINFO if there is a non-empty "dot-ports" name in the response: for each port in the name/value pair: start TLS session on resIP and the port number if it succeeds if it authenticates correctly start doing DoT; finished else if upgradeNoAuth: start doing DoT; finished else continue else continue # no DoT port worked if insecureOK: Use unencrypted DNS on port 53 else DNS transport setup failed Sood & Hoffman Expires January 1, 2021 [Page 5] Internet-Draft Stub upgrade to DoT or DoH June 2020 3.1. Order of Desired Protocols The pseudocode in the previous section attempts to use DoH, DoT, and unencrypted DNS, in that order. This is done to keep the pseudocode simple while demonstrating one possible order of transport selection. A stub implementation could attempt some or all of the available DNS transports in an implementation-specific or user-defined order. For example, possible lists of transports to attempt might be: o DoH, DoT, classic DNS o DoT, DoH o DoT, classic DNS o Classic DNS 4. Method Details 4.1. Inputs to the Process The method described here requires the following information. It is listed with variable names from the pseudocode in Section 3. resIP The IP address of resolver. This can be either an IPv4 or IPv6 address. dohCapable Set to true if the stub knows how to be a DoH client dotCapable Set to true if the stub knows how to be a DoT client upgradeNoAuth Set to true the stub wants to use unauthenticated DoT or DoH if it is available. Note that using unauthenticated DoT or DoH is inherently insecure because an on-path attacker can impersonate the resolver. insecureOK Set to true if the stub wants to keep using classic (unencrypted) DNS on port 53 if the attempt to upgrade fails. Note that setting this to false will cause further DNS queries to fail if upgrade fails. [[ Add some possible implementation examples. Here's one. ]] For example, if an OS implementation's design is "just try TLS on port 853 of the current resolver", resIP is the resolver address, dohCapable is false, dotCapable is true, and upgradeNoAuth is set to true. Sood & Hoffman Expires January 1, 2021 [Page 6] Internet-Draft Stub upgrade to DoT or DoH June 2020 4.2. TLS Authentication In this mechanism, the stub has an IP address of the resolver. It does not necessarily have a domain name associated with that IP address. In order to authenticate TLS sessions, the stub resolver must have a set of TLS trust anchors, such as those maintained by some operating systems. If the stub has a domain name associated with the resolver's IP address, and if the resolver uses that domain name in one of the subject identifiers in its certificate during the TLS exchange, the stub can use the domain name for authentication of the TLS session. The stub always has an IP address for the resolver. If the resolver uses the same IP address used by the stub in one of the subject identifiers in its certificate during the TLS exchange, the stub can use the IP address for authentication of the TLS session. A resolver that uses this method to publish its information SHOULD, if possible, have a TLS certificate whose subject identifiers contain any of the IP addresses that stubs might be using for the resolver. At the time that this document is published, getting IP addresses in TLS certificates is possible, but there are only a few widely-trusted CAs that issue such certificates. [RFC8738] describes a protocol that may cause IP address certificates to become more common. 5. IANA Considerations This document defines two entries for the IANA DNS Resolver Information Registry that is defined in [I-D.pp-add-resinfo]. 5.1. Registration for doh-templates in the IANA DNS Resolver Information Registry Name: doh-templates Value type: Array of strings Specification: This document, Section 2.1 5.2. Registration for dot-ports in the IANA DNS Resolver Information Registry Name: dot-ports Value type: Array of numbers Sood & Hoffman Expires January 1, 2021 [Page 7] Internet-Draft Stub upgrade to DoT or DoH June 2020 Specification: This document, Section 2.2 6. Security Considerations The method described in this document explicitly allows a stub to perform DNS communications over traditional unencrypted, unauthenticated DNS on port 53. The method described in this document explicitly allows a stub to choose to allow unauthenticated TLS. In this case, the resulting communication will be susceptible to obvious and well-understood attacks from an attacker in the path of the communications. 7. References 7.1. Normative References [I-D.pp-add-resinfo] Sood, P. and P. Hoffman, "DNS Resolver Information Self- publication", draft-pp-add-resinfo-01 (work in progress), May 2020. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, . [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., and P. Hoffman, "Specification for DNS over Transport Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May 2016, . [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, . [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, . [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, January 2019, . Sood & Hoffman Expires January 1, 2021 [Page 8] Internet-Draft Stub upgrade to DoT or DoH June 2020 7.2. Informative References [RFC8738] Shoemaker, R., "Automated Certificate Management Environment (ACME) IP Identifier Validation Extension", RFC 8738, DOI 10.17487/RFC8738, February 2020, . Authors' Addresses Puneet Sood Google Email: puneets@google.com Paul Hoffman ICANN Email: paul.hoffman@icann.org Sood & Hoffman Expires January 1, 2021 [Page 9]