I don’t see DoH as an issue, but Mozilla/Cloudflare are also pushing an encrypted replacement for SNI (Server Name Indication), which is an issue for privacy.
Back when SSL was young, you could only map a single DNS name to an IP for SSL/TLS - the DNS name mapped to the IP that presented the matching SSL/TLS certificate. This was in contrast with HTTP, where virtual hosting allowed the web server to read the Host header in the HTTP request, and deliver the appropriate content. This allowed a single IP address to serve multiple websites.
The inability to do this in SSL/TLS was a major restriction, so an extension was added to the TLS specification - Server Name Indication. In the initial client connection request (the ClientHello), the client can specify the server that it is expecting to connect to. The HTTPS server can then present the correct certificate for the SSL/TLS negotiation and website content.
The problem is that SNI has to be presented before the server sends a certificate, and before the conversation is secured by encryption. In fact, the SNI name is sent as plain text, and can be sniffed out of the SSL/TLS conversation by ISPs, carriers, authorities and the like. Even for massively shared IP addresses (such as a Content Delivery Network like Akami or Cloudflare), the plaintext SNI inclusion allows identification of destination sites.
It’s also the case that the server certificate is delivered in plain text and can be sniffed. However, in the latest revision of TLS, (TLS1.3) the server certificate is returned after encryption is negotiated.
The Encrypted SNI (ESNI) proposal from Cloudflare and Mozilla does prevent this exposure, but does it by pushing this process to the CDN networks (notably, Cloudflare). A DNS/DoH lookup provides a IP address and includes a public key so that the SNI extension can be encrypted in the ClientHello. This is better, but the destination IP may still reveal the destination site. Here is where Cloudflare comes in - their CDN IP addresses host multiple HTTPS sites, so the destination address does not reveal anything significant. A further proposal extension allows the client to query the CDN IP address to get a list of supported SNI names.
The reason I don’t like this is that it forces companies that care about privacy for their customers into the hands of the CDN networks - they have to use a CDN network to prevent destination IP analysis, and they have to allow the CDN network supplying the terminating the IP address to be responsible for terminating SSL/TLS.
People are concerned about Google abusing DoH, but they ignore the play that Cloudflare is making here. If ESNI as envisioned by Cloudflare gets traction, then everyone hosting HTTPS gets driven into the hands of the Akamis and Cloudflares of this world. It would also seem likely that the big cloud providers (Azure/AWS/Google Cloud/Alibaba/etc) would get into the same space by providing the same sort of fronting services to aggregate IPs, delivering requests to cloud or remotely hosted sites via encrypted tunnels.