| < draft-ietf-doh-dns-over-https-01.txt | draft-ietf-doh-dns-over-https-02.txt > | |||
|---|---|---|---|---|
| Network Working Group P. Hoffman | Network Working Group P. Hoffman | |||
| Internet-Draft ICANN | Internet-Draft ICANN | |||
| Intended status: Standards Track P. McManus | Intended status: Standards Track P. McManus | |||
| Expires: May 3, 2018 Mozilla | Expires: June 1, 2018 Mozilla | |||
| October 30, 2017 | November 28, 2017 | |||
| DNS Queries over HTTPS | DNS Queries over HTTPS | |||
| draft-ietf-doh-dns-over-https-01 | draft-ietf-doh-dns-over-https-02 | |||
| Abstract | Abstract | |||
| DNS queries sometimes experience problems with end to end | DNS queries sometimes experience problems with end to end | |||
| connectivity at times and places where HTTPS flows freely. | connectivity at times and places where HTTPS flows freely. | |||
| HTTPS provides the most practical mechanism for reliable end to end | HTTPS provides the most practical mechanism for reliable end to end | |||
| communication. Its use of TLS provides integrity and confidentiality | communication. Its use of TLS provides integrity and confidentiality | |||
| guarantees and its use of HTTP allows it to interoperate with | guarantees and its use of HTTP allows it to interoperate with | |||
| proxies, firewalls, and authentication systems where required for | proxies, firewalls, and authentication systems where required for | |||
| transit. | transit. | |||
| This document describes how to run DNS service over HTTP using | This document describes how to run DNS service over HTTP using | |||
| https:// URIs. | https:// URIs. | |||
| [[ There is a repository for this draft at | [[ There is a repository for this draft at https://github.com/dohwg/ | |||
| https://github.com/paulehoffman/draft-ietf-doh-dns-over-https ]]. | draft-ietf-doh-dns-over-https ]]. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on May 3, 2018. | This Internet-Draft will expire on June 1, 2018. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | |||
| skipping to change at page 2, line 26 ¶ | skipping to change at page 2, line 26 ¶ | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 3. Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 4. Protocol Requirements . . . . . . . . . . . . . . . . . . . . 4 | 4. Protocol Requirements . . . . . . . . . . . . . . . . . . . . 4 | |||
| 4.1. Non-requirements . . . . . . . . . . . . . . . . . . . . 4 | 4.1. Non-requirements . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. The HTTP Request . . . . . . . . . . . . . . . . . . . . . . 4 | 5. The HTTP Request . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5.1. DNS Wire Format . . . . . . . . . . . . . . . . . . . . . 5 | 5.1. DNS Wire Format . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 5.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5.2. Examples . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. The HTTP Response . . . . . . . . . . . . . . . . . . . . . . 6 | 6. The HTTP Response . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 6.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 7. HTTP Integration . . . . . . . . . . . . . . . . . . . . . . 8 | 7. HTTP Integration . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 8 | 7.1. HTTP/2 . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8.1. Registration of Well-Known URI . . . . . . . . . . . . . 8 | 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8.2. Registration of application/dns-udpwireformat Media Type 8 | 8.1. Registration of Well-Known URI . . . . . . . . . . . . . 9 | |||
| 9. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 8.2. Registration of application/dns-udpwireformat Media Type 9 | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 10 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 10. Operational Considerations . . . . . . . . . . . . . . . . . 12 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 11 | 11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 11 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| Appendix A. Previous Work on DNS over HTTP or in Other Formats . 12 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 12 | 12.2. Informative References . . . . . . . . . . . . . . . . . 13 | |||
| Appendix A. Previous Work on DNS over HTTP or in Other Formats . 14 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| 1. Introduction | 1. Introduction | |||
| The Internet does not always provide end to end reachability for | The Internet does not always provide end to end reachability for | |||
| native DNS. On-path network devices may spoof DNS responses, block | native DNS. On-path network devices may spoof DNS responses, block | |||
| DNS requests, or just redirect DNS queries to different DNS servers | DNS requests, or just redirect DNS queries to different DNS servers | |||
| that give less-than-honest answers. | that give less-than-honest answers. | |||
| Over time, there have been many proposals for using HTTP and HTTPS as | Over time, there have been many proposals for using HTTP and HTTPS as | |||
| a substrate for DNS queries and responses. To date, none of those | a substrate for DNS queries and responses. To date, none of those | |||
| proposals have made it beyond early discussion, partially due to | proposals have made it beyond early discussion, partially due to | |||
| disagreement about what the appropriate formatting should be and | disagreement about what the appropriate formatting should be and | |||
| partially because they did not follow HTTP best practices. | partially because they did not follow HTTP best practices. | |||
| This document defines a specific protocol for sending DNS [RFC1035] | This document defines a specific protocol for sending DNS [RFC1035] | |||
| queries and getting DNS responses over modern versions of HTTP | queries and getting DNS responses over HTTP [RFC7540] using https:// | |||
| [RFC7540] using https:// (and therefore TLS [RFC5246] security for | (and therefore TLS [RFC5246] security for integrity and | |||
| integrity and confidentiality). | confidentiality). Each DNS query-response pair is mapped into a HTTP | |||
| request-response pair. | ||||
| The described approach is more than a tunnel over HTTP. It | The described approach is more than a tunnel over HTTP. It | |||
| establishes default media formatting types for requests and responses | establishes default media formatting types for requests and responses | |||
| but uses normal HTTP content negotiation mechanisms for selecting | but uses normal HTTP content negotiation mechanisms for selecting | |||
| alternatives that endpoints may prefer in anticipation of serving new | alternatives that endpoints may prefer in anticipation of serving new | |||
| use cases. In addition to this media type negotiation, it aligns | use cases. In addition to this media type negotiation, it aligns | |||
| itself with HTTP features such as caching, proxying, and compression. | itself with HTTP features such as caching, proxying, and compression. | |||
| The integration with HTTP provides a transport suitable for both | The integration with HTTP provides a transport suitable for both | |||
| traditional DNS clients and native web applications seeking access to | traditional DNS clients and native web applications seeking access to | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 42 ¶ | |||
| protocol). Similarly, a client that supports this protocol is called | protocol). Similarly, a client that supports this protocol is called | |||
| a "DNS API client". | a "DNS API client". | |||
| In this document, the key words "MUST", "MUST NOT", "REQUIRED", | In this document, the key words "MUST", "MUST NOT", "REQUIRED", | |||
| "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", | |||
| and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 | and "OPTIONAL" are to be interpreted as described in BCP 14, RFC 2119 | |||
| [RFC2119]. | [RFC2119]. | |||
| 3. Use Cases | 3. Use Cases | |||
| There are two primary use cases for this protocol. | There are two initial use cases for this protocol. | |||
| The primary use case is to prevent on-path network devices from | The primary use case is to prevent on-path network devices from | |||
| interfering with native DNS operations. This interference includes, | interfering with DNS operations. This interference includes, but is | |||
| but is not limited to, spoofing DNS responses, blocking DNS requests, | not limited to, spoofing DNS responses, blocking DNS requests, and | |||
| and tracking. HTTP authentication and proxy friendliness are | tracking. | |||
| expected to make this protocol function in some environments where | ||||
| unsecured DNS ([DNS]) or DNS directly on TLS ([RFC7858]) would not. | ||||
| A secondary use case is web applications that want to access DNS | In this use, clients - whether operating systems or individual | |||
| information. Standardizing an HTTPS mechanism allows this to be done | applications - will be explicitly configured to use a DOH server as a | |||
| in a way consistent with the cross-origin resource sharing security | recursive resolver by its user (or administrator). They might use | |||
| model of the web [CORS] and also integrate the caching mechanisms of | the DOH server for all queries, or only for a subset of them. The | |||
| DNS with those of HTTP. These applications may be interested in | specific configuration mechanism is out of scope for this document. | |||
| using a different media type than traditional clients. | ||||
| A secondary use case is allowing web applications to access DNS | ||||
| information, by using existing APIs in browsers to access it over | ||||
| HTTP in a safe way consistent with Cross Origin Resource Sharing | ||||
| (CORS) [CORS]. | ||||
| This is technically already possible (since the server controls both | ||||
| the HTTP resources it exposes and the use of browser APIs by its | ||||
| content), but standardisation might make this easier to accomplish. | ||||
| Note that in this second use, the browser does not consult the DOH | ||||
| server or use its responses for any DNS lookups outside the scope of | ||||
| the application using them; i.e., there is (currently) no API that | ||||
| allows a Web site to poison DNS for others. | ||||
| [[ This paragraph is to be removed when this document is published as | [[ This paragraph is to be removed when this document is published as | |||
| an RFC ]] Note that these use cases are different than those in a | an RFC ]] Note that these use cases are different than those in a | |||
| similar protocol described at [I-D.ietf-dnsop-dns-wireformat-http]. | similar protocol described at [I-D.ietf-dnsop-dns-wireformat-http]. | |||
| The use case for that protocol is proxying DNS queries over HTTP | The use case for that protocol is proxying DNS queries over HTTP | |||
| instead of over DNS itself. The use cases in this document all | instead of over DNS itself. The use cases in this document all | |||
| involve query origination instead of proxying. | involve query origination instead of proxying. | |||
| 4. Protocol Requirements | 4. Protocol Requirements | |||
| skipping to change at page 5, line 13 ¶ | skipping to change at page 5, line 31 ¶ | |||
| The URI scheme MUST be https. | The URI scheme MUST be https. | |||
| A client can be configured with a DNS API URI, or it can discover the | A client can be configured with a DNS API URI, or it can discover the | |||
| URI. This document defines a well-known URI path of "/.well-known/ | URI. This document defines a well-known URI path of "/.well-known/ | |||
| dns-query" so that a discovery process that produces a domain name or | dns-query" so that a discovery process that produces a domain name or | |||
| domain name and port can be used to construct the DNS API URI. (See | domain name and port can be used to construct the DNS API URI. (See | |||
| Section 8 for the registration of this in the well-known URI | Section 8 for the registration of this in the well-known URI | |||
| registry.) DNS API servers SHOULD use this well-known path to help | registry.) DNS API servers SHOULD use this well-known path to help | |||
| contextualize DNS Query requests that use server push [RFC7540]. | contextualize DNS Query requests that use server push [RFC7540]. | |||
| A DNS API Client encodes the DNS query into the HTTP request using | A DNS API Client encodes a single DNS query into the HTTP request | |||
| either the HTTP GET or POST methods. | using either the HTTP GET or POST methods. | |||
| When using the POST method, the DNS query is included as the message | When using the POST method the DNS query is included as the message | |||
| body of the HTTP request and the Content-Type request header | body of the HTTP request and the Content-Type request header | |||
| indicates the media type of the message. POST-ed requests are | indicates the media type of the message. POST-ed requests are | |||
| smaller than their GET equivalents. | smaller than their GET equivalents. | |||
| When using the GET method, the URI path MUST contain a query | When using the GET method the URI path MUST contain a query parameter | |||
| parameter of the form content-type=TTT and another of the form | with the name of ct and a value indicating the media-format used for | |||
| body=BBBB, where "TTT" is the media type of the format used for the | the body parameter. The value may either be an explicit media type | |||
| body parameter, and "BBB" is the content of the body encoded with | (e.g. ct=application/dns-udpwireformat&body=...) or it may be empty. | |||
| base64url [RFC4648]. Using the GET method is friendlier to many HTTP | An empty value indicates the default application/dns-udpwireformat | |||
| cache implementations. | type (e.g. ct&body=...). | |||
| When using the GET method the URI path MUST contain a query parameter | ||||
| with the name of body. The value of the parameter is the content of | ||||
| the request encoded with base64url [RFC4648]. Using the GET method | ||||
| is friendlier to many HTTP cache implementations. | ||||
| The DNS API Client SHOULD include an HTTP "Accept:" request header to | The DNS API Client SHOULD include an HTTP "Accept:" request header to | |||
| say what type of content can be understood in response. The client | say what type of content can be understood in response. The client | |||
| MUST be prepared to process "application/dns-udpwireformat" | MUST be prepared to process "application/dns-udpwireformat" | |||
| Section 5.1 responses but MAY process any other type it receives. | Section 5.1 responses but MAY process any other type it receives. | |||
| In order to maximize cache friendliness, DNS API clients using media | In order to maximize cache friendliness, DNS API clients using media | |||
| formats that include DNS ID, such as application/dns-udpwireformat, | formats that include DNS ID, such as application/dns-udpwireformat, | |||
| should use a DNS ID of 0 in every DNS request. HTTP semantics | SHOULD use a DNS ID of 0 in every DNS request. HTTP correlates | |||
| correlate the request and response, thus eliminating the need for the | request and response, thus eliminating the need for the ID in a media | |||
| ID in a media type such as application/dns-udpwireformat. | type such as application/dns-udpwireformat and the use of a varying | |||
| DNS ID can cause semantically equivalent DNS queries to be cached | ||||
| separately. | ||||
| DNS API clients can use HTTP/2 padding and compression in the same | DNS API clients can use HTTP/2 padding and compression in the same | |||
| way that other HTTP/2 clients use (or don't use) them. | way that other HTTP/2 clients use (or don't use) them. | |||
| 5.1. DNS Wire Format | 5.1. DNS Wire Format | |||
| The media type is "application/dns-udpwireformat". The body is the | The media type is "application/dns-udpwireformat". The body is the | |||
| DNS on-the-wire format is defined in [RFC1035]. | DNS on-the-wire format is defined in [RFC1035]. | |||
| When using the GET method, the body MUST be encoded with base64url | When using the GET method, the body MUST be encoded with base64url | |||
| [RFC4648]. Padding characters for base64url MUST NOT be included. | [RFC4648]. Padding characters for base64url MUST NOT be included. | |||
| When using the POST method, the body is not encoded. | When using the POST method, the body is not encoded. | |||
| DNS API clients using the DNS wire format MAY have one or more | DNS API clients using the DNS wire format MAY have one or more | |||
| EDNS(0) extensions [RFC6891] in the request. | EDNS(0) extensions [RFC6891] in the request. | |||
| 5.2. Examples | 5.2. Examples | |||
| For example, assume a DNS API server is following this specification | These examples use HTTP/2 style formatting from [RFC7540]. | |||
| on origin https://dnsserver.example.net/ and the well-known path. | ||||
| The DNS API client chooses to send its requests in appliation/dns- | ||||
| udpwirefomat but indicates it can parse replies in that format or as | ||||
| a JSON-based content type. | ||||
| The examples uses HTTP/2 formatting from [RFC7540]. | ||||
| A query for the IN A records for "www.example.com" with recursion | For this example assume a DNS API server is following this | |||
| turned on using the GET method and a wireformat request would be: | specification on origin https://dnsserver.example.net/ and the well- | |||
| known path. The DNS API client chooses to send its requests in | ||||
| application/dns-udpwirefomat but indicates it can parse replies in | ||||
| that format or as a hypothetical JSON-based content type. The | ||||
| application/simpledns+json type used by this example is currently | ||||
| fictitious. | ||||
| :method = GET | :method = GET | |||
| :scheme = https | :scheme = https | |||
| :authority = dnsserver.example.net | :authority = dnsserver.example.net | |||
| :path = /.well-known/dns-query? (no CR) | :path = /.well-known/dns-query?ct& (no CR) | |||
| content-type=application/dns-udpwireformat& (no CR) | ||||
| body=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB | body=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB | |||
| accept = application/dns-udpwireformat, application/simpledns+json | accept = application/dns-udpwireformat, application/simpledns+json | |||
| The same DNS query, using the POST method would be: | The same DNS query, using the POST method would be: | |||
| :method = POST | :method = POST | |||
| :scheme = https | :scheme = https | |||
| :authority = dnsserver.example.net | :authority = dnsserver.example.net | |||
| :path = /.well-known/dns-query | :path = /.well-known/dns-query | |||
| accept = application/dns-udpwireformat, application/simpledns+json | accept = application/dns-udpwireformat, application/simpledns+json | |||
| skipping to change at page 7, line 18 ¶ | skipping to change at page 7, line 39 ¶ | |||
| response format will be defined in the future. | response format will be defined in the future. | |||
| The DNS response for "application/dns-udpwireformat" in Section 5.1 | The DNS response for "application/dns-udpwireformat" in Section 5.1 | |||
| MAY have one or more EDNS(0) extensions, depending on the extension | MAY have one or more EDNS(0) extensions, depending on the extension | |||
| definition of the extensions given in the DNS request. | definition of the extensions given in the DNS request. | |||
| Native HTTP methods are used to correlate requests and responses. | Native HTTP methods are used to correlate requests and responses. | |||
| Responses may be returned in a different temporal order than requests | Responses may be returned in a different temporal order than requests | |||
| were made using the protocols native multi-streaming functionality. | were made using the protocols native multi-streaming functionality. | |||
| In the HTTP responses, the HTTP cache headers SHOULD be set to expire | The Answer section of a DNS response contains one or more RRsets. | |||
| at the same time as the shortest DNS TTL in the response. Because | (RRsets are defined in [RFC7719].) According to [RFC2181], each | |||
| DNS provides only caching but not revalidation semantics, DNS over | resource record in an RRset is supposed to have the Time To Live | |||
| HTTP responses should not carry revalidation response headers (such | (TTL) freshness information. Different RRsets in the Answer section | |||
| as Last-Modified: or Etag:) or return 304 responses. | can have different TTLs, though it is only possible for the HTTP | |||
| response to have a single freshness lifetime. The HTTP response | ||||
| freshness lifetime ([RFC7234] Section 4.2) should be coordinated with | ||||
| the Resource Record bearing the smallest TTL in the Answer section of | ||||
| the response. The HTTP freshness lifetime SHOULD be set to expire at | ||||
| the same time any of the DNS Records reach a 0 TTL. The response | ||||
| freshness lifetime MUST NOT be greater than that indicated by the DNS | ||||
| Record with the smallest TTL in the response. | ||||
| A DNS API Client that receives a response without an explicit | ||||
| freshness lifetime MUST NOT assign that response a heuristic | ||||
| freshness ([RFC7234] Section 4.2.2.) greater than that indicated by | ||||
| the DNS Record with the smallest TTL in the response. | ||||
| A DNS API Server MUST be able to process application/dns- | A DNS API Server MUST be able to process application/dns- | |||
| udpwireformat request messages. | udpwireformat request messages. | |||
| A DNS API Server SHOULD respond with HTTP status code 415 upon | A DNS API Server SHOULD respond with HTTP status code 415 upon | |||
| receiving a media type it is unable to process. | receiving a media type it is unable to process. | |||
| This document does not change the definition of any HTTP response | This document does not change the definition of any HTTP response | |||
| codes or otherwise proscribe their use. | codes or otherwise proscribe their use. | |||
| HTTP revalidation of cached DNS information may be of limited value | ||||
| as revalidation provides only a bandwidth benefit and DNS | ||||
| transactions are normally latency bound instead. Furthermore, the | ||||
| HTTP response headers that enable revalidation (such as "Last- | ||||
| Modified" and "Etag") are often fairly large when compared to the | ||||
| overall DNS response size, and have a variable nature that creates | ||||
| constant pressure on the HTTP/2 compression dictionary [RFC7541]. | ||||
| Other types of DNS data, such as zone transfers, may be larger and | ||||
| benefit more from revalidation. DNS API servers may wish to consider | ||||
| whether providing these optional response headers is worthwhile. | ||||
| 6.1. Example | 6.1. Example | |||
| This is an example response for a query for the IN A records for | This is an example response for a query for the IN A records for | |||
| "www.example.com" with recursion turned on. The response bears one | "www.example.com" with recursion turned on. The response bears one | |||
| record with an address of 93.184.216.34 and a TTL of 128 seconds. | record with an address of 93.184.216.34 and a TTL of 128 seconds. | |||
| :status = 200 | :status = 200 | |||
| content-type = application/dns-udpwireformat | content-type = application/dns-udpwireformat | |||
| content-length = 64 | content-length = 64 | |||
| cache-control = max-age=128 | cache-control = max-age=128 | |||
| skipping to change at page 8, line 9 ¶ | skipping to change at page 9, line 5 ¶ | |||
| abcd 8180 0001 0001 0000 0000 0377 7777 | abcd 8180 0001 0001 0000 0000 0377 7777 | |||
| 0765 7861 6d70 6c65 0363 6f6d 0000 0100 | 0765 7861 6d70 6c65 0363 6f6d 0000 0100 | |||
| 0103 7777 7707 6578 616d 706c 6503 636f | 0103 7777 7707 6578 616d 706c 6503 636f | |||
| 6d00 0001 0001 0000 0080 0004 5db8 d822 | 6d00 0001 0001 0000 0080 0004 5db8 d822 | |||
| 7. HTTP Integration | 7. HTTP Integration | |||
| This protocol MUST be used with https scheme URI [RFC7230]. | This protocol MUST be used with https scheme URI [RFC7230]. | |||
| This protocol MUST use HTTP/2 [RFC7540] or its successors in order to | 7.1. HTTP/2 | |||
| satisfy the security requirements of DNS over HTTPS. Further, the | ||||
| messages in classic UDP based DNS [RFC1035] are inherently unordered | The minimum version of HTTP used by DOH SHOULD be HTTP/2 [RFC7540]. | |||
| and have low overhead. A competitive HTTP transport needs to support | ||||
| reordering, priority, parallelism, and header compression, all of | The messages in classic UDP based DNS [RFC1035] are inherently | |||
| which are supported by HTTP/2 [RFC7540] or its successors. | unordered and have low overhead. A competitive HTTP transport needs | |||
| to support reordering, parallelism, priority, and header compression | ||||
| to acheive similar performance. Those features were introduced to | ||||
| HTTP in HTTP/2 [RFC7540]. Earlier versions of HTTP are capable of | ||||
| conveying the semantic requirements of DOH but would result in very | ||||
| poor performance for many uses cases. | ||||
| 8. IANA Considerations | 8. IANA Considerations | |||
| 8.1. Registration of Well-Known URI | 8.1. Registration of Well-Known URI | |||
| This specification registers a Well-Known URI [RFC5785]: | This specification registers a Well-Known URI [RFC5785]: | |||
| o URI Suffix: dns-query | o URI Suffix: dns-query | |||
| o Change Controller: IETF | o Change Controller: IETF | |||
| o Specification Document(s): [this specification] | o Specification Document(s): [this specification] | |||
| 8.2. Registration of application/dns-udpwireformat Media Type | 8.2. Registration of application/dns-udpwireformat Media Type | |||
| To: ietf-types@iana.org | To: ietf-types@iana.org | |||
| Subject: Registration of MIME media type | Subject: Registration of MIME media type | |||
| pplication/dns-udpwireformat | application/dns-udpwireformat | |||
| MIME media type name: application | MIME media type name: application | |||
| MIME subtype name: dns-udpwireformat | MIME subtype name: dns-udpwireformat | |||
| Required parameters: n/a | Required parameters: n/a | |||
| Optional parameters: n/a | Optional parameters: n/a | |||
| Encoding considerations: This is a binary format. The contents are a | Encoding considerations: This is a binary format. The contents are a | |||
| skipping to change at page 10, line 8 ¶ | skipping to change at page 11, line 8 ¶ | |||
| Restrictions on usage: n/a | Restrictions on usage: n/a | |||
| Author: Paul Hoffman, paul.hoffman@icann.org | Author: Paul Hoffman, paul.hoffman@icann.org | |||
| Change controller: IESG | Change controller: IESG | |||
| 9. Security Considerations | 9. Security Considerations | |||
| Running DNS over HTTPS relies on the security of the underlying HTTP | Running DNS over HTTPS relies on the security of the underlying HTTP | |||
| connection. By requiring at least [RFC7540] levels of support for | transport. Implementations utilizing HTTP/2 benefit from the TLS | |||
| TLS, this protocol expects to use current best practices for secure | profile defined in [RFC7540] Section 9.2. | |||
| transport. | ||||
| Session level encryption has well known weaknesses with respect to | Session level encryption has well known weaknesses with respect to | |||
| traffic analysis which might be particularly acute when dealing with | traffic analysis which might be particularly acute when dealing with | |||
| DNS queries. Sections 10.6 (Compression) and 10.7 (Padding) of | DNS queries. Sections 10.6 (Compression) and 10.7 (Padding) of | |||
| [RFC7540] provide some further advice on mitigations within an HTTP/2 | [RFC7540] provide some further advice on mitigations within an HTTP/2 | |||
| context. | context. | |||
| The HTTPS connection provides transport security for the interaction | ||||
| between the DNS API server and client, but does not inherently ensure | ||||
| the authenticity of DNS data. A DNS API client may also perform full | ||||
| DNSSEC validation of answers received from a DNS API server or it may | ||||
| choose to trust answers from a particular DNS API server, much as a | ||||
| DNS client might choose to trust answers from its recurvise DNS | ||||
| resolver. | ||||
| [[ From the WG charter: | [[ From the WG charter: | |||
| The working group will analyze the security and privacy issues that | The working group will analyze the security and privacy issues that | |||
| could arise from accessing DNS over HTTPS. In particular, the | could arise from accessing DNS over HTTPS. In particular, the | |||
| working group will consider the interaction of DNS and HTTP caching. | working group will consider the interaction of DNS and HTTP caching. | |||
| ]] | ]] | |||
| A server that is acting both as a normal web server and a DNS API | A server that is acting both as a normal web server and a DNS API | |||
| server is in a position to choose which DNS names it forces a client | server is in a position to choose which DNS names it forces a client | |||
| skipping to change at page 10, line 46 ¶ | skipping to change at page 12, line 5 ¶ | |||
| [[ From the WG charter: | [[ From the WG charter: | |||
| The working group may define mechanisms for discovery of DOH servers | The working group may define mechanisms for discovery of DOH servers | |||
| similar to existing mechanisms for discovering other DNS servers if | similar to existing mechanisms for discovering other DNS servers if | |||
| the chairs determine that there is both sufficient interest and | the chairs determine that there is both sufficient interest and | |||
| working group consensus. | working group consensus. | |||
| ]] | ]] | |||
| 10. Acknowledgments | 10. Operational Considerations | |||
| Local policy considerations and similar factors mean different DNS | ||||
| servers may provide different results to the same query: for instance | ||||
| in split DNS configurations [RFC6950]. It logically follows that the | ||||
| server which is queried can influence the end result. Therefore a | ||||
| client's choice of DNS server may affect the responses it gets to its | ||||
| queries. | ||||
| The HTTPS channel used by this specification establishes secure two | ||||
| party communication between the DNS API Client and the DNS API | ||||
| Server. Filtering or inspection systems that rely on unsecured | ||||
| transport of DNS will not function in a DNS over HTTPS environment. | ||||
| Many HTTPS implementations perform real time third party checks of | ||||
| the revocation status of the certificates being used by TLS. If this | ||||
| check is done as part of the DNS API server connection procedure and | ||||
| the check itself requires DNS resolution to connect to the third | ||||
| party a deadlock can occur. The use of an OCSP [RFC6960] server is | ||||
| one example of how this can happen. DNS API servers SHOULD utilize | ||||
| OCSP Stapling [RFC6961] to provide the client with certificate | ||||
| revocation information that does not require contacting a third | ||||
| party. | ||||
| 11. Acknowledgments | ||||
| Joe Hildebrand contributed lots of material for a different iteration | Joe Hildebrand contributed lots of material for a different iteration | |||
| of this document. Helpful early comments were given by Ben Schwartz | of this document. Helpful early comments were given by Ben Schwartz | |||
| and Mark Nottingham. | and Mark Nottingham. | |||
| 11. References | 12. References | |||
| 11.1. Normative References | 12.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, <https://www.rfc- | DOI 10.17487/RFC2119, March 1997, <https://www.rfc- | |||
| editor.org/info/rfc2119>. | editor.org/info/rfc2119>. | |||
| skipping to change at page 11, line 32 ¶ | skipping to change at page 13, line 15 ¶ | |||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, | (TLS) Protocol Version 1.2", RFC 5246, | |||
| DOI 10.17487/RFC5246, August 2008, <https://www.rfc- | DOI 10.17487/RFC5246, August 2008, <https://www.rfc- | |||
| editor.org/info/rfc5246>. | editor.org/info/rfc5246>. | |||
| [RFC5785] Nottingham, M. and E. Hammer-Lahav, "Defining Well-Known | [RFC5785] Nottingham, M. and E. Hammer-Lahav, "Defining Well-Known | |||
| Uniform Resource Identifiers (URIs)", RFC 5785, | Uniform Resource Identifiers (URIs)", RFC 5785, | |||
| DOI 10.17487/RFC5785, April 2010, <https://www.rfc- | DOI 10.17487/RFC5785, April 2010, <https://www.rfc- | |||
| editor.org/info/rfc5785>. | editor.org/info/rfc5785>. | |||
| [RFC6960] Santesson, S., Myers, M., Ankney, R., Malpani, A., | ||||
| Galperin, S., and C. Adams, "X.509 Internet Public Key | ||||
| Infrastructure Online Certificate Status Protocol - OCSP", | ||||
| RFC 6960, DOI 10.17487/RFC6960, June 2013, | ||||
| <https://www.rfc-editor.org/info/rfc6960>. | ||||
| [RFC6961] Pettersen, Y., "The Transport Layer Security (TLS) | ||||
| Multiple Certificate Status Request Extension", RFC 6961, | ||||
| DOI 10.17487/RFC6961, June 2013, <https://www.rfc- | ||||
| editor.org/info/rfc6961>. | ||||
| [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Message Syntax and Routing", | Protocol (HTTP/1.1): Message Syntax and Routing", | |||
| RFC 7230, DOI 10.17487/RFC7230, June 2014, | RFC 7230, DOI 10.17487/RFC7230, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7230>. | <https://www.rfc-editor.org/info/rfc7230>. | |||
| [RFC7234] Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, | ||||
| Ed., "Hypertext Transfer Protocol (HTTP/1.1): Caching", | ||||
| RFC 7234, DOI 10.17487/RFC7234, June 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7234>. | ||||
| [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | [RFC7540] Belshe, M., Peon, R., and M. Thomson, Ed., "Hypertext | |||
| Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | Transfer Protocol Version 2 (HTTP/2)", RFC 7540, | |||
| DOI 10.17487/RFC7540, May 2015, <https://www.rfc- | DOI 10.17487/RFC7540, May 2015, <https://www.rfc- | |||
| editor.org/info/rfc7540>. | editor.org/info/rfc7540>. | |||
| [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D., | [RFC7541] Peon, R. and H. Ruellan, "HPACK: Header Compression for | |||
| and P. Hoffman, "Specification for DNS over Transport | HTTP/2", RFC 7541, DOI 10.17487/RFC7541, May 2015, | |||
| Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May | <https://www.rfc-editor.org/info/rfc7541>. | |||
| 2016, <https://www.rfc-editor.org/info/rfc7858>. | ||||
| 11.2. Informative References | ||||
| [CORS] W3C, "Cross-Origin Resource Sharing", 2014, | 12.2. Informative References | |||
| <https://www.w3.org/TR/cors/>. | ||||
| [DNS] Mockapetris, P., "Domain names - implementation and | [CORS] "Cross-Origin Resource Sharing", n.d., | |||
| specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | <https://fetch.spec.whatwg.org/#http-cors-protocol>. | |||
| November 1987, <https://www.rfc-editor.org/info/rfc1035>. | ||||
| [I-D.ietf-dnsop-dns-wireformat-http] | [I-D.ietf-dnsop-dns-wireformat-http] | |||
| Song, L., Vixie, P., Kerr, S., and R. Wan, "DNS wire- | Song, L., Vixie, P., Kerr, S., and R. Wan, "DNS wire- | |||
| format over HTTP", draft-ietf-dnsop-dns-wireformat-http-01 | format over HTTP", draft-ietf-dnsop-dns-wireformat-http-01 | |||
| (work in progress), March 2017. | (work in progress), March 2017. | |||
| [RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS | ||||
| Specification", RFC 2181, DOI 10.17487/RFC2181, July 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2181>. | ||||
| [RFC6147] Bagnulo, M., Sullivan, A., Matthews, P., and I. van | [RFC6147] Bagnulo, M., Sullivan, A., Matthews, P., and I. van | |||
| Beijnum, "DNS64: DNS Extensions for Network Address | Beijnum, "DNS64: DNS Extensions for Network Address | |||
| Translation from IPv6 Clients to IPv4 Servers", RFC 6147, | Translation from IPv6 Clients to IPv4 Servers", RFC 6147, | |||
| DOI 10.17487/RFC6147, April 2011, <https://www.rfc- | DOI 10.17487/RFC6147, April 2011, <https://www.rfc- | |||
| editor.org/info/rfc6147>. | editor.org/info/rfc6147>. | |||
| [RFC6891] Damas, J., Graff, M., and P. Vixie, "Extension Mechanisms | [RFC6891] Damas, J., Graff, M., and P. Vixie, "Extension Mechanisms | |||
| for DNS (EDNS(0))", STD 75, RFC 6891, | for DNS (EDNS(0))", STD 75, RFC 6891, | |||
| DOI 10.17487/RFC6891, April 2013, <https://www.rfc- | DOI 10.17487/RFC6891, April 2013, <https://www.rfc- | |||
| editor.org/info/rfc6891>. | editor.org/info/rfc6891>. | |||
| [RFC6950] Peterson, J., Kolkman, O., Tschofenig, H., and B. Aboba, | ||||
| "Architectural Considerations on Application Features in | ||||
| the DNS", RFC 6950, DOI 10.17487/RFC6950, October 2013, | ||||
| <https://www.rfc-editor.org/info/rfc6950>. | ||||
| [RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | ||||
| Terminology", RFC 7719, DOI 10.17487/RFC7719, December | ||||
| 2015, <https://www.rfc-editor.org/info/rfc7719>. | ||||
| Appendix A. Previous Work on DNS over HTTP or in Other Formats | Appendix A. Previous Work on DNS over HTTP or in Other Formats | |||
| The following is an incomplete list of earlier work that related to | The following is an incomplete list of earlier work that related to | |||
| DNS over HTTP/1 or representing DNS data in other formats. | DNS over HTTP/1 or representing DNS data in other formats. | |||
| The list includes links to the tools.ietf.org site (because these | The list includes links to the tools.ietf.org site (because these | |||
| documents are all expired) and web sites of software. | documents are all expired) and web sites of software. | |||
| o https://tools.ietf.org/html/draft-mohan-dns-query-xml | o https://tools.ietf.org/html/draft-mohan-dns-query-xml | |||
| End of changes. 34 change blocks. | ||||
| 88 lines changed or deleted | 190 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/ | ||||