Re: [Doh] WG Review: DNS Over HTTPS (doh)

Mark Nottingham <> Tue, 19 September 2017 00:26 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 63AB91332D7; Mon, 18 Sep 2017 17:26:34 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.721
X-Spam-Status: No, score=-2.721 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key) header.b=UrxDNdI2; dkim=pass (2048-bit key) header.b=KMQXIRbB
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id QKdTE9jtleWT; Mon, 18 Sep 2017 17:26:31 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id C2BF6134285; Mon, 18 Sep 2017 17:26:31 -0700 (PDT)
Received: from compute3.internal (compute3.nyi.internal []) by mailout.nyi.internal (Postfix) with ESMTP id 26B5E20E7B; Mon, 18 Sep 2017 20:26:31 -0400 (EDT)
Received: from frontend2 ([]) by compute3.internal (MEProxy); Mon, 18 Sep 2017 20:26:31 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc:x-sasl-enc; s=fm1; bh=6XodGbEeEVWhrDmJ3B hzCHThDpbxAaUZFBZGB8Nwc7g=; b=UrxDNdI20nAyltiZKqh5z001IXTSjdJ/37 6Ge91teTEJz+Jt5spbn5okbH4tElzw9ON09wbi+373ZURWLhdvOVKv8UajKva7XC GmamTmgjoedWfFUv7UvoUzqDlaGENrsRFNKVI3orJP1M7FgwdlOB8wClU4i9Sq8D U+eSN11UQdhFxRI+wVpljE8w/cUckEISgqhmd83nO68QBCLFket5bLtZYD8lYJ/w z37VF4Gv84OhN2yzpD9niTc5X5OiDbEWp1Ka9nClyMQFkDBO9DxJlSWzVgJOyOcP x/seodMBVvTCv45NojEd0g+aS81lGnjSZJrsiDhycb8ISTbrAkpg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s= fm1; bh=6XodGbEeEVWhrDmJ3BhzCHThDpbxAaUZFBZGB8Nwc7g=; b=KMQXIRbB RJ15dn2UQrR3OCKAorjbq1iD1M0Nsm2lwYvP4CXL8hy674TkVvVlnyTTYkq7xlW/ EW015kyYPT5ux1MaR/sTiz2QNfWG8ACB/pZCVmfe3f4UNmzF1yfXy6Gzri5GHWYc Qz3pBgkIxcAHEQVa6V3wd2KdEbJMJZEIVM23ib3cAdRnKt6ElA9DznQDOkv0jBdW L8bPhb47c2eB3G6vziIitvWZUb9TlAbN+0pg1GNdgGkYBk/X6AMmE3GJZbJ4PY61 XmIPzMa2u27nmtPk8FP4wPojEDjEyBXErDQ45eBMnbTtsXhEhkhT410YLnhooH2z jGZ6tRkR4uNNIg==
X-ME-Sender: <xms:NmTAWWPtOR9RShY3hi87kHO0rbI_pgkWri3yYydhCI-gOB_bKp2ruw>
X-Sasl-enc: UEfuyPh8mKQEzv0mgNaYtHuF8OvpbxJArd7puIfvPJMq 1505780790
Received: from [] ( []) by (Postfix) with ESMTPA id 0F8012473F; Mon, 18 Sep 2017 20:26:28 -0400 (EDT)
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
From: Mark Nottingham <>
In-Reply-To: <>
Date: Tue, 19 Sep 2017 10:26:25 +1000
Cc: Adam Roach <>,, Paul Hoffman <>, IETF <>
Content-Transfer-Encoding: quoted-printable
Message-Id: <>
References: <> <> <> <> <> <> <> <> <> <> <>
To: Ted Hardie <>
X-Mailer: Apple Mail (2.3273)
Archived-At: <>
Subject: Re: [Doh] WG Review: DNS Over HTTPS (doh)
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: DNS Over HTTPS <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 19 Sep 2017 00:26:34 -0000

Hi Ted,

Sorry, threading is a bit confusing below (thanks, GMail).

> On 19 Sep 2017, at 3:20 am, Ted Hardie <> wrote:
> On Sat, Sep 16, 2017 at 8:00 PM, Mark Nottingham <> wrote:
> > So, I don't that this is established.  One mental model for this work is that DNS, having started with UDP and TCP as transports, has now added a set of additional secure transports.  Two of those were defined in DPRIV; this defines another.  From that perspective, any time an application requires a DNS name to be resolved, the relevant local code would try the set of secure transports until it got an answer.  The application may not know which is used and does not specify it; it is simply getting the DNS answer back that allows it to proceed.
> Every time people start talking in this manner and referring to HTTP as a "transport", I get flashbacks to WS-* and what a glorious failure that was.
> If it helps, I am happy to say "facilitating protocol".  The mental model question for the charter is really:
> Does this add a new tool for DNS systems attempting resolution to use when previous efforts are blocked?  So any DNS resolution might use it, whether from a browser, an app, or system call, but that those would not *specify* it be used?

That sounds like an implementation choice, not a protocol decision. What in the protocol could constrain that?

> Does this add a method for Web application to directly resolve DNS resource records

Well, once it's available over HTTP, that's certainly possible. A quick search for "DNS lookup online" shows many people doing that already, albeit with different formats.

> using a resolver self-identified in the Javascript? So DNS resolutions are instantiated and consumed by Javascript without any intermediation by the local DNS resolver or the browser's DNS rules?

What does "a resolver self-identified in the Javascript" mean, exactly?

Are you supposing some sort of rendezvous system where I can "install" a DOH resolver from one origin and have it affect requests sent to another?

Doing so isn't possible on the current Web, so enabling it would require some fairly heavy lifting at the W3C and/or WHATWG (which on the face of it, they're not likely to think is sane). I can only hope that defining such a thing is out of scope for this WG, as we truly don't have the expertise here.

> Does this charter aim for the working group to do both?
> As currently written, I see the charter describing 1.  There has been an argument that it also do 2 or that 2 becomes possible when 1 is specified and is thus automatically part of the scope.  If that is the case, I believe the charter needs a re-write to describe it.  

See above.

> > The name of the group (DNS over HTTP), the justification at the beginning of the charter:
> >
> > This will enable the domain name system to function over certain paths where existing DNS methods (UDP, TLS, and DTLS) experience problems. This will enable the domain name system to function over certain paths where existing DNS methods (UDP, TLS, and DTLS)
> > experience problems.
> >
> > and Paul's input draft all point to that interpretation.  Note especially that Paul's draft provides the UDP wireformat as response.  To me, that strongly hints that the results of this get handed to the same bit of code that would take the UDP wireformat from other transports (like UDP) and do what it would have done with data retreived from any of those.  That behavior makes sense for DNS transported over HTTP, where you are talking to an authoritative server or shared resolver over a new transport.
> I don't disagree that the charter lays out that the goal is to enable the use case of DNS using HTTP semantics -- that's hopefully uncontroversial.
> > That order of operations does not make sense as a new resource type available to web applications, in part because they can't tell from examining the URI whether the resulting *resource* obeys CORS or not.
> It's not clear why that's an important property. Why is it necessary?
> If it goes into a browser or system cache, it is an important property; it may also be important depending on the UI result.  If the JavaScript-internal resolution process feeds other parts of the page, it may even be a problem.

When you say "cache", do you mean HTTP or DNS? I'm afraid I still don't get what you're looking for here.

>  > There are serious attacks here that even DNSSEC won't catch, because a malicious server and cooperating JavaScript app could give correct answers that are non performant (like the search engine instance on the most distant continent).
> Who would be consuming these answers? How is this different from configuring your system to use a malicious DNS resolver (either in an application or the OS)?
> Because the JavaScript you download could pick the resolver.  The OS and browser are largely trusted; the JavaScript is largely not.

OK, this seems to indicate you *do* think that somehow arbitrary JS can take over DNS resolution for the system or browser. What led you to that conclusion?

>  > And, if there really was a handoff to the local DNS subsystem for parsing and processing, the JavaScript also wouldn't be able to tell whether the result they get from that subsystem is the one that the just retrieved (because a cache entry from some other system may have a different SOA record and be returned as a result instead).  To avoid that, they would have build udp wireformat parsers into the downloadable javascript.
> >
> > I think if you want the second, a way of making DNS resources available to web applications, you need a very different approach; it may be valuable, but I don't believe this charter covers it.  If it is meant to, it needs a major re-write.
> I agree there are significant risks when using DNS. I think the question is what to do about it.
> One thing the WG could do would be to write some Security Considerations about the different ways this could be sub-optimal or even dangerous.
> I don't see how giving the protocol a new URI scheme avoids these risks, given that the defined resources would be available over HTTP still.
> It gives the browser something to look at.  If it rejects udp-wireformat mime types being returned from HTTPS URIs but accepts them from dnsh URIs, it can handle the data differently.
>  I don't know that browsers want to do that, mind you, I'm simple saying that the working group could decide that this was a reasonable facility to consider.  Ruling out ways for the ecosystem to distinguish this from other web resources seems to be the wrong way to go, at least to me.

Again, I don't think this WG should be attempting to allow any sort of automated control of browser or system DNS resolution from the Web (e.g., JS, triggered by arbitrary URI schemes, mime types, whatever); I've seen zero desire from any implementer to allow that, it's fraught with security, privacy and other issues, and has dubious benefit.

The use case that I believe most have in mind is "as a user, I want to configure my [browser, OS] to use *this* DOH service for DNS resolution" -- where that configuration is manual; e.g., a configuration textbox or dropdown in the browser, or a file in /etc. It might be made more user-friendly; e.g., it could be automatic when the user goes into the ill-defined "private mode." 

The current charter allows that. I *think* the issues you're concerned about are in a very different area -- roughly, "automated control of DNS resolution." I'm not sure where you got the sense that this was on the table, but if it will help, write it out of the charter.


Mark Nottingham