In precedenza, le applicazioni basate sul web richiedevano le estensioni del browser per usare come DANE, DNS-SD Service Discovery o persino per la risoluzione qualsiasi cosa diversa dagli indirizzi IP, come i record MX. Per usare funzionalità che dipendono da DNSSEC come i record SSHFP, qualsiasi estensione devono convalidare le DNSSEC perché il browser o il sistema operativo potrebbero non farlo.
Dal 2016, Google Public DNS offre un'API ottimizzata per il web per DoH con DNSSEC una convalida che non richiede la configurazione o le estensioni del browser o del sistema operativo. I parametri di query GET semplici e le risposte JSON consentono ai client di analizzare utilizzando le comuni API web ed evitare dettagli complessi per il formato dei messaggi DNS, come compressione dei pointer per i nomi di dominio.
Per informazioni su DoH, consulta la pagina generale della documentazione del DoH. in generale, come intestazioni HTTP, gestione dei reindirizzamenti, best practice per la privacy e Codici di stato HTTP.
La pagina Trasporti sicuri ha
Esempi di riga di comando curl
per DoH e informazioni comuni a DoH e DNS su
TLS (DoT), ad esempio supporto TLS e troncamento del DNS.
Specifica API JSON
Tutte le chiamate API sono richieste HTTP GET. Nel caso di parametri duplicati, viene utilizzato solo il primo valore.
Parametri supportati
- nome
stringa, obbligatorio
L'unico parametro obbligatorio. Sono accettati i caratteri di escape RFC 4343.
- La lunghezza (dopo la sostituzione delle barre rovesciate) deve essere compresa tra 1 e 253 (ignorando un punto finale facoltativo, se presente).
- Tutte le etichette (parti del nome tra i punti) devono avere una lunghezza compresa tra 1 e 63 byte.
- Nomi non validi come
.example.com
,example..com
o stringa vuota get 400 Richiesta non valida. - I caratteri non ASCII devono essere punycoded (
xn--qxam
, nonελ
).
- tipo
stringa, valore predefinito:
1
Il tipo RR può essere rappresentato come un numero in [1, 65535] o una stringa canonica (senza distinzione tra maiuscole e minuscole, ad esempio
A
oaaaa
). Puoi utilizzare255
per "QUALSIASI" ma tieni presente che non si tratta di una sostituzione per l'invio di query relative ai record A e AAAA o MX. I server dei nomi autorevoli non devono restituire tutti i record per queste query. altri non rispondono e altri (ad esempio cloudflare.com) restituiscono solo HINFO.- cd
booleano, valore predefinito:
false
Il flag CD (Checking Disabled). Usa
cd=1
ocd=true
per disabilitare la convalida DNSSEC. usa il parametrocd=0
,cd=false
o nessun parametrocd
per abilitare la convalida delle DNSSEC.- num.
stringa, valore predefinito: vuoto
Opzione per il tipo di contenuti desiderato. Utilizza
ct=application/dns-message
per ricevere un messaggio DNS binario nell' corpo HTTP della risposta al posto del testo JSON. Utilizzact=application/x-javascript
per richiedere esplicitamente testo JSON. Altri valori per il tipo di contenuto vengono ignorati e vengono restituiti i contenuti JSON predefiniti.- do
booleano, valore predefinito:
false
Il flag DO (DNSSEC OK). Usa
do=1
odo=true
per includere i record DNSSEC (RRSIG, NSEC, NSEC3); usa il parametrodo=0
,do=false
o nessun parametrodo
per omettere i record DNSSEC.Le applicazioni devono sempre gestire (e ignorare, se necessario) eventuali DNSSEC i record nelle risposte JSON, che potrebbero essere inclusi in altre implementazioni, e potremmo modificare il comportamento predefinito delle risposte JSON in futuro. Le risposte dei messaggi DNS binari rispettano sempre il valore del flag DO.
- edns_client_subnet
stringa, valore predefinito: vuoto
L'opzione edns0-client-subnet. Il formato corrisponde a un indirizzo IP con una subnet mask. Esempi:
1.2.3.4/24
,2001:700:300::/48
.Se utilizzi DNS over HTTPS per problemi di privacy e non vuoi qualsiasi parte del tuo indirizzo IP da inviare a server dei nomi autorevoli per la precisione della posizione geografica, utilizza
edns_client_subnet=0.0.0.0/0
. Il DNS pubblico di Google di solito invia informazioni di rete approssimative (di solito azzerando l'ultima parte dell'indirizzo IPv4).- random_padding
stringa, ignorato
Il valore di questo parametro viene ignorato. Esempio:
XmkMw~o_mgP2pf.gpw-Oi5dK
.Client API preoccupati per i possibili attacchi alla privacy side-channel che utilizzano delle dimensioni di pacchetti delle richieste GET HTTPS può usare questa soluzione delle stesse dimensioni inserendo dati casuali per le richieste. Per evitare un'interpretazione errata dell'URL, limita i caratteri di spaziatura interna ai caratteri URL non prenotati: lettere maiuscole e minuscole, cifre, trattini, punti, trattini bassi e tilde.
Risposta DNS in JSON
Una risposta positiva (i commenti aggiunti qui non sono presenti nelle risposte effettive):
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "apple.com.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Answer":
[
{
"name": "apple.com.", // Always matches name in the Question section
"type": 1, // A - Standard DNS RR type
"TTL": 3599, // Record's time-to-live in seconds
"data": "17.178.96.59" // Data for A - IP address as text
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.172.224.47"
},
{
"name": "apple.com.",
"type": 1,
"TTL": 3599,
"data": "17.142.160.59"
}
],
"edns_client_subnet": "12.34.56.78/0" // IP address / scope prefix-length
}
Fai riferimento a RFC 7871 (subnet client EDNS) per dettagli su "scopePrefix-length" (lunghezza del prefisso dell'ambito) e su come influisce sulla memorizzazione nella cache.
Una risposta all'errore con informazioni diagnostiche:
{
"Status": 2, // SERVFAIL - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question":
[
{
"name": "dnssec-failed.org.", // FQDN with trailing dot
"type": 1 // A - Standard DNS RR type
}
],
"Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/."
}
Record SPF e TXT con virgolette incorporate e attribuzione dei server dei nomi:
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "*.dns-example.info.", // FQDN with trailing dot
"type": 99 // SPF - Standard DNS RR type
}
],
"Answer": [
{
"name": "*.dns-example.info.", // Always matches name in Question
"type": 99, // SPF - Standard DNS RR type
"TTL": 21599, // Record's time-to-live in seconds
"data": "\"v=spf1 -all\"" // Data for SPF - quoted string
}
],
"Comment": "Response from 216.239.38.110"
// Uncached responses are attributed to the authoritative name server
}
{
"Status": 0, // NOERROR - Standard DNS response code (32 bit integer).
"TC": false, // Whether the response is truncated
"RD": true, // Always true for Google Public DNS
"RA": true, // Always true for Google Public DNS
"AD": false, // Whether all response data was validated with DNSSEC
"CD": false, // Whether the client asked to disable DNSSEC
"Question": [
{
"name": "s1024._domainkey.yahoo.com.", // FQDN with trailing dot
"type": 16 // TXT - Standard DNS RR type
}
],
"Answer": [
{
"name": "s1024._domainkey.yahoo.com.", // Always matches Question name
"type": 16, // TXT - Standard DNS RR type
"data": "\"k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm\"\"JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;\""
// Data for TXT - multiple quoted strings
}
],
}
Stringhe DNS
Tutti i record TXT sono codificati come un'unica stringa JSON, inclusi gli utilizzi di file TXT più lunghi formati di registrazione come RFC 4408 (SPF) oppure RFC 4871 (DKIM).
EDNS
Il meccanismo di estensione EDNS generale non è supportato. L'opzione Subnet client EDNS (edns-client-subnet) è un parametro Richiesta GET e un campo di primo livello nella risposta JSON.