DNSSEC Checker
This DNSSEC checker tests a domain's chain of trust from the root to its records, shows which resolvers refuse it, and how to fix it.

One verdictSecure, not signed, signed but not linked, changing keys or broken, from our own check of every signature, never from one resolver's error code.Why it brokeThe break named in plain words, with the fix at your DNS host and registrar in their own words, and the DS or key to copy.The chain of trustIANA's root key, the TLD, then the domain: each link's key tags, algorithms and whether it verifies.What resolvers answerGoogle, Cloudflare and Quad9 asked side by side: validated, refused, and their own error codes.What is DNSSEC and how does the chain of trust work?
DNSSEC signs a domain's DNS records so a resolver can prove an answer is genuine. Trust runs down a chain: the root's key, which every validating resolver already holds, vouches for the TLD's key through a DS record, the TLD's key vouches for the domain's, and the domain's key signs its records.
Each link has two halves. The parent publishes a DS record: the digest of one of the child's keys (DNSKEY). The child signs its own key set with that key (RRSIG). A resolver checks that the digest matches and the signature verifies, then trusts the child's keys and moves down.
The first link has no parent: IANA publishes the root's key digests as the trust anchor, and resolvers ship with them. This checker starts from IANA's file and verifies every link itself, so Secure means the whole chain, not one resolver's say-so.
- IANA's trust anchor
2032638696 - . (root)IANA's trust anchor
38696→ key38696signs the key set verified - .orgDS
26974→ key26974signs the key set verified - isc.orgDS
7250→ key7250signs the key set verified - SOA + Akey
27566verified
Sources:rfc-editor.org
How do I check if DNSSEC is enabled?
Enter the domain in the checker above. It reads the DS at the parent and the domain's keys, verifies every link from the root, and gives one verdict: secure, not signed, signed but not linked, changing keys or broken, or says it couldn't check.
Two records decide it. A DS at the registry means the domain says it is signed; DNSKEY records in the zone mean it is. Both, with signatures that verify, is Secure. Neither is Not signed, which is not an error. Keys with no DS is an island: signed, but resolvers treat it as unsigned.
A resolver's AD flag shows the same from the outside: it is set only when the resolver validated the answer. The checker shows what Google, Cloudflare and Quad9 answered beside its own verdict.
| Verdict | Name | DS at parent | Keys | Google answered |
|---|---|---|---|---|
| Secure | isc.org | 7250 | 2 | validated (AD) |
| Secure | cloudflare.com | 2371 | 2 | validated (AD) |
| Not signed | github.com | – | – | answered, not validated |
| Signed, not linked | no-ds.extended-dns-errors.com | – | 2 | answered, not validated |
| Broken | dnssec-failed.org | 42069 | 2 | SERVFAIL |
| Couldn't check | ed448.extended-dns-errors.com | 61596 | 2 | answered, not validated |
Why does my domain fail DNSSEC validation?
Because a link of the chain doesn't verify, and a validating resolver then answers SERVFAIL instead of the address. The commonest cause is a DS left at the registry after the domain's DNS moved: the DS names a key the new host doesn't have.
The other breaks: a DS while the zone is no longer signed, signatures that expired because the signer stopped, a DS and keys of different algorithms after a half-done change, and a DS whose digest was copied wrong. Each fails on every validating resolver at once.
Resolvers say why in an Extended DNS Error, but they don't agree on the code for the same break: Google and Cloudflare send 9 for dnssec-failed.org, Quad9 sends 6. The checker diagnoses from the records and shows their codes only as evidence.
| Name | What's wrong | Cloudflare | Quad9 | |
|---|---|---|---|---|
| dnssec-failed.org | The DS matches no key | SERVFAIL · EDE 9 | SERVFAIL · EDE 9 | SERVFAIL · EDE 6 |
| ds-bad-tag.extended-dns-errors.com | The DS matches no key | SERVFAIL · EDE 9 | SERVFAIL · EDE 9 | SERVFAIL · EDE 6 |
| ds-bogus-digest-value.extended-dns-errors.com | Right tag, wrong digest | SERVFAIL · EDE 9 | SERVFAIL · EDE 6 | SERVFAIL · EDE 9 |
| no-dnskey.extended-dns-errors.com | A DS, but no keys | SERVFAIL · EDE 10 | SERVFAIL · EDE 9 | SERVFAIL · EDE 10 |
| no-rrsig-all.extended-dns-errors.com | The DS's key signs nothing | SERVFAIL · EDE 10 | SERVFAIL · EDE 10 | SERVFAIL · EDE 10 |
| rrsig-exp-all.extended-dns-errors.com | Signatures expired | SERVFAIL · EDE 7 | SERVFAIL · EDE 7 | SERVFAIL · EDE 7 |
| rrsig-not-yet-all.extended-dns-errors.com | Signatures not valid yet | SERVFAIL · EDE 8 | SERVFAIL · EDE 8 | SERVFAIL · EDE 8 |
Sources:rfc-editor.orgdevelopers.google.comrdap.publicinterestregistry.orgextended-dns-errors.com
How do I turn on DNSSEC at my DNS host and registrar?
Turn DNSSEC on at your DNS host first: it signs the zone and shows a DS record. Then add that DS at your registrar, which sends it to the registry. Some registrars ask for the public key (DNSKEY) instead and make the DS themselves.
Route 53 Domains, OVHcloud and Gandi take the key, not the digest; GoDaddy, Namecheap, Hover and Name.com take the DS. When the DNS host is also the registrar, the DS is often added for you: Cloudflare Registrar reads the zone's CDS record, and IONOS adds it when it signs.
Some nameservers don't sign at all: DigitalOcean's and Hostinger's say so in their own help pages. With them, the only safe state is no DS at the registry.
DS record (for most registrars)
isc.org. IN DS7250132A30B3F78B6DDE9A4A9A2AD0C805518B4F49EC62E7D3F4531D33DE697CDA01CB2
- key tag
- algorithm
- digest type
- SHA-256 digest of the key
DNSKEY (for registrars that take the key)
isc.org. IN DNSKEY257313zEoOfseNFDM+E8spu7RR2Ar/GzFqAehe4yapWLiv6McIUF6xmI5GcIQ3+uLAizS2cNWHt6EArVj8ogjtrRXwfw==
- flags: 257 = key-signing key
- protocol (always 3)
- algorithm
- public key
- ProviderIts nameservers sign
- Cloudflareyes, when you turn it on
- Amazon Route 53yes, when you turn it on
- Google Cloud DNSyes, when you turn it on
- Azure DNSyes, when you turn it on
- DigitalOceanno
- Hostingerno
- OVHcloudyes, on by default
- IONOSwith a paid plan
- Gandiyes, when you turn it on
- GoDaddyyes, when you turn it on
- Namecheapyes, when you turn it on
- Porkbunyes, when you turn it on
- Squarespaceyes, on by default
- ProviderIts registrar form takes
- Cloudflare Registrarnothing: it reads your CDS
- GoDaddythe DS
- Namecheapthe DS
- Porkbunthe DS or the DNSKEY
- Gandithe DNSKEY
- Squarespace Domainsthe DS
- Name.comthe DS
- Hoverthe DS
- Hostingerthe DS
- IONOSthe DS, by email
- OVHcloudthe DNSKEY
- Amazon Route 53 Domainsthe DNSKEY
Sources:developers.cloudflare.comdocs.aws.amazon.comcloud.google.comgodaddy.comdocs.gandi.nethelp.ovhcloud.comdocs.digitalocean.comhostinger.com
How do I turn DNSSEC off safely before moving DNS hosts?
Remove the DS at the registrar first, wait until its TTL has passed so resolvers forget it, and only then stop signing or change nameservers. Done the other way round, resolvers that still hold the DS refuse the domain until it expires.
Cloudflare, Route 53, Google Cloud DNS and Azure all document this order; Cloudflare puts the wait at commonly 24 to 48 hours and keeps the keys 1.5 times the DS TTL after. One registrar's help page gives the reverse order: don't follow it.
Moving between two DNS hosts without a gap needs both to sign with each other's keys (multi-signer DNSSEC). Cloudflare and Google Cloud DNS document a way; Route 53 says it isn't supported. For most moves, going unsigned until the old DS has expired is the safe path.
Safe
- Remove the DS at the registrar
- Wait for the DS TTL (1 h at .org)
- Change nameservers or stop signing
Unsafe
- Stop signing first
- Resolvers holding the DS answer SERVFAIL until it expires
- Remove the DS at the registrar
Sources:rfc-editor.orgdevelopers.cloudflare.comdocs.aws.amazon.comcloud.google.comlearn.microsoft.com
Which DNSSEC algorithms should I use?
Algorithm 13 (ECDSA P-256 with SHA-256) or 15 (Ed25519) for new keys, and SHA-256 (digest type 2) for the DS. RSASHA1 (5 and 7) and SHA-1 DS digests must not be used for signing any more: RFC 9905 deprecated them in 2025.
The rules now live in IANA's registries (RFC 9904). Algorithm 8 (RSA with SHA-256) is still recommended; .org's own keys use it. Resolvers still validate RSASHA1 zones today, but RFC 9905 tells them to treat those zones as unsigned, so moving off it is overdue.
NSEC3, the signed way to say a name doesn't exist, should use 0 extra iterations and no salt (RFC 9276). Some hosts' fixed defaults still add both.
| Number | Algorithm | For signing | This checker |
|---|---|---|---|
| 1 | RSAMD5 | MUST NOT | can't verify it here |
| 3 | DSA | MUST NOT | can't verify it here |
| 5 | RSASHA1 | MUST NOT | verifies it, says must migrate |
| 6 | DSA-NSEC3-SHA1 | MUST NOT | can't verify it here |
| 7 | RSASHA1-NSEC3-SHA1 | MUST NOT | verifies it, says must migrate |
| 8 | RSASHA256 | RECOMMENDED | verifies it |
| 10 | RSASHA512 | NOT RECOMMENDED | verifies it |
| 12 | ECC-GOST | MUST NOT | can't verify it here |
| 13 | ECDSAP256SHA256 | RECOMMENDED | verifies it |
| 14 | ECDSAP384SHA384 | MAY | verifies it |
| 15 | ED25519 | RECOMMENDED | verifies it |
| 16 | ED448 | MAY | can't verify it here |
| 17 | SM2SM3 | MAY | can't verify it here |
| 18 | ML-DSA-44 | MAY | can't verify it here |
| 23 | ECC-GOST12 | MAY | can't verify it here |
DS digest types
1SHA-1 MUST NOT2SHA-256 RECOMMENDED3GOST R 34.11-94 MUST NOT4SHA-384 MAY5GOST R 34.11-2012 MAY6SM3 MAY
Does my resolver validate DNSSEC?
Ask your resolver for a signed domain with dig and look at the flags: a validating resolver sets ad (authentic data) on the answer. No ad flag means your resolver passes answers on without checking them.
Google Public DNS, Cloudflare 1.1.1.1 and Quad9 all validate, as their own documentation says. Your device may not use the resolver you think: a browser with DNS over HTTPS, a VPN or iCloud Private Relay sends lookups elsewhere, so test from the place you care about.
delv checks the signatures on your own machine from the root key, whatever your resolver does. A page in your browser can only test the resolver that browser uses, and only by loading a deliberately broken name beside a working one.
$ dig isc.org SOA +dnssec
;; ->>HEADER<<- opcode: QUERY, status: NOERROR
;; flags: qr rd ra ad; QUERY: 1
- Google Public DNS validates · ADEach resolver's own word
- Cloudflare 1.1.1.1 validates · ADEach resolver's own word
- Quad9 validates · ADEach resolver's own word
Sources:rfc-editor.orgdevelopers.google.comdevelopers.cloudflare.comquad9.netfirefox-source-docs.mozilla.orgchromium.orgsupport.apple.com
DNSSEC questions
How do I check if DNSSEC is enabled for a domain?
dig example.com DS +short shows the registry's side and dig example.com DNSKEY +short the zone's.What does it mean when DNSSEC validation fails?
What is a DS record?
What happens if I turn off DNSSEC without removing the DS record?
How long does a DS record change take?
Is it bad if my domain isn't signed with DNSSEC?
Why does my DS record have key tag 2371?
Which DNSSEC algorithm should I use?
Missing something?Suggest a feature or a new tool
Related tools
DNS Health Check
Grade a domain's DNS: delegation, nameservers, SOA, DNSSEC and mail in 40 checks
NS Lookup
Discover nameservers for any domain with provider detection
DNS Lookup
Every DNS record from the domain's own nameservers, beside Google's and Cloudflare's cache
CAA Record Checker
See which certificate authorities may issue for a domain, read the way a CA reads CAA, against the certificates in use; then generate a correct set
SSL Certificate Check
Verify SSL certificate validity and security details
DNS Leak Test
See which DNS servers really resolve your lookups and whether your VPN leaks DNS requests to your internet provider
