# https://www.petefreitag.com/blog/dns-over-https/
function dnsq --description "Query DNS name(s) over HTTPs using JSON"
argparse --ignore-unknown 'h/help' 'd/dns=' 'n/name=+' 't/type=+' -- $argv
if set -q _flag_help
echo "Usage: $_ example.com"
echo ' -n --name DNS query name(s)'
echo ' -t --type DNS query type(s), ex: A (default), MX, TXT...'
echo ' -d --dns DNS query endpoint: cloudflare (default), google'
echo ' -h --help Print this help message and exit'
return 0
end
if not set -q _flag_name && test (count $argv) -eq 0
echo 'Missing name parameter.'
return 1
end
if not set -q _flag_type
set _flag_type 'A'
end
switch $_flag_dns
case 'google'
set url 'https://dns.google/resolve'
case 'cloudflare' '*'
set url 'https://cloudflare-dns.com/dns-query'
end
for type in $_flag_type
for name in $_flag_name $argv
set query (string join '&' (string join '=' 'name' $name) (string join '=' 'type' $type))
if isatty stdout && type -q jq
curl --header 'Accept: application/dns-json' --silent (string join '?' $url $query) | jq -r
else
curl --header 'Accept: application/dns-json' --silent (string join '?' $url $query)
end
end
end
end
In this case how is dns.google or cloudflare-dns.com resolved?
Maybe in this case, because the author of the post only cares to check whether certain domains resolve or not, having the DNS server be resolved by normal DNS not DNS over HTTPS is fine, and that in other cases you’d hardcode an IP like with normal DNS resolution?
dns.google is 8.8.8.8 and cloudflare-dns.com is 1.1.1.1. You can replace the names with those IPs in the curl commands if you want, the certificates are valid for the IPs too.
Web browsers usually. Chrome uses Google's, Firefox uses Cloudflare's. You can change it in the settings, but the reason it works out of the box is because it's shipped with an IP pre-set.
As a CA, you may sign a certificate for anything. Public CAs don't do it for IPs for obvious reasons, but if you're cloudflare or Google, you can coax them with enough money and goodwill to sign a cert for your very expensive quad-single-digit ip, especially if you manage to motivate that request with the fact that the IP is a DNS resolver and can't be pointed at by a domain in the first place.
They're valid because the certificates include ipAddress Subject Alternative Names. PKIX (the RFC explaining how the X.500 system's X.509 certificates are to be repurposed for use on the Internet) explains several different names for Internet things, the "alternative names" and the most common you'll have seen is the dnsName, but ipAddress is also in there.
As to how and when they're issued, section 3.2.2.5 of the Baseline Requirements explains how an Applicant can prove this is their IP address and so they're entitled to a certificate for that address. Note that the CA is entitled to choose which if any of the methods listed in 3.2.2.5 they will use, and it's not uncommon for the answer to be "None of them".
> Note that the CA is entitled to choose which if any of the methods listed in 3.2.2.5 they will use, and it's not uncommon for the answer to be "None of them".
That's not what the baseline says:
> The CA SHALL confirm that prior to issuance, the CA has validated each IP Address listed in the Certificate using at least one of the methods specified in this section.
You are confusing 3.2.2.5.4 with "no verification". It's done, just that the baseline trust that you are not an idiot and have some basis to confirm the ip address belongs to someone. And even that particular section has a sunset clause:
> CAs SHALL NOT perform validations using this method after July 31, 2019. Completed validations using this method SHALL NOT be re‐used for certificate issuance after July 31, 2019. Any certificate issued prior to August 1, 2019 containing an IP Address that was validated using any method that was permitted under the prior version of this Section 3.2.2.5 MAY continue to be used without revalidation until such certificate naturally expires.
Ah, I thought about my choice of phrase "None of them" and I regretted it but was busy.
I meant that it's not uncommon to just not issue such certificates, rather than you don't verify but you issue anyway, you don't verify because you always refuse to issue.
As a CA, you may sign a certificate for anything. Public CAs don't do it for IPs for obvious reasons, but if you're cloudflare or Google, you can coax them with enough money and goodwill to sign a cert for your very expensive quad-single-digit ip, especially if you manage to motivate that request with the fact that the IP is a DNS resolver and can't be pointed at by a domain in the first place