Panellicense

Enable DNSSEC for cPanel-hosted zones without breaking resolution

A working DNSSEC rollout for cPanel — enable per-zone signing, publish the DS record at your registrar, verify with dig, and survive the first key rollover without going dark.

8 min readUpdated 2026-05-17cpanel · whm · dnssec · dns
schema: HowToschema: FAQPageschema: BreadcrumbList

cPanel has shipped native DNSSEC since v76 and the workflow has barely changed since: WHM generates a key per zone, signs the zone, prints a DS record, and waits for you to publish it at the registrar. The signing side is genuinely a one-click operation. Everything that goes wrong with DNSSEC on cPanel happens after that click — at the registrar, at the resolver, or during the first rollover six months later.

This guide is the end-to-end path: enable signing on a zone, push the DS record, verify the chain of trust, automate it across hundreds of domains, and avoid the two failure modes that take a zone offline for the duration of its TTL.

What WHM actually generates

Click Enable DNSSEC on a zone and cPanel does four things:

  1. Generates a key pair in /var/cpanel/domain_keys/ (ECDSA Curve P-256 / SHA-256 by default — algorithm 13).
  2. Adds a DNSKEY record to the zone.
  3. Re-signs the zone, producing RRSIG records for every RRset and NSEC chain records for authenticated denial.
  4. Prints a DS record — the fingerprint you publish at your registrar so the parent .com / .net / .io zone vouches for your key.

By default cPanel uses a single CSK (combined signing key) rather than the classic KSK/ZSK split. One key signs everything. It's simpler, it's smaller on the wire, and the rollover story is straightforward — at the cost of needing a DS update at the registrar every time you rotate. For shared hosting that's the right trade.

Step 1 — Enable signing on a single zone

From the UI: WHM → Home → DNS Functions → DNSSEC Keys → pick the domain → Enable DNSSEC. From the command line, which scales:

whmapi1 enable_dnssec_for_domains domain=example.com

Then read the DS record back:

whmapi1 fetch_ds_records_for_domains domain=example.com

The output gives you three fields you'll need at the registrar: the key tag, the algorithm (13), the digest type (2 = SHA-256), and the digest itself.

"key_tag": "12345",
"algorithm": "13",
"digest_type": "2",
"digest": "A1B2C3D4E5F6..."

If the zone is part of a cPanel DNS cluster, enabling DNSSEC on the primary syncs the keys and signed records to every DNSONLY peer automatically — provided cluster trust is healthy. Verify on a peer with cat /var/named/example.com.db | grep RRSIG before declaring it done.

Step 2 — Publish the DS record at the registrar

This is the half of DNSSEC that cPanel can't do for you. Until the DS record exists in the parent zone, your signed zone is invisible to validating resolvers — they fall back to treating it as unsigned, so nothing breaks, but you also haven't gained anything.

The registrar UI varies, but the four fields are always the same: key tag, algorithm, digest type, digest. Paste them exactly. A single hex character off and the chain of trust is broken — and resolvers will return SERVFAIL for the entire zone the moment validation starts.

Some registrars (Cloudflare Registrar, Gandi, Porkbun) accept DS updates via API. If you operate at scale, wire this into your provisioning — manual paste is the single most common source of typos in any DNSSEC deployment.

Step 3 — Verify the chain of trust

Three commands cover the verification path:

# Is the zone serving DNSKEY?
dig +noall +answer DNSKEY example.com

# Is the parent serving the DS?
dig +noall +answer DS example.com @8.8.8.8

# Does a validating resolver accept the whole chain?
dig +dnssec +cd=0 example.com SOA @1.1.1.1

The third one is the test that matters. If the response includes ad in the flags (flags: qr rd ra ad), the chain validates end-to-end. If it returns SERVFAIL, the chain is broken — usually a DS/DNSKEY mismatch, occasionally a stale cached negative response that times out within an hour.

For a one-shot end-to-end check including timeline visibility, DNSViz and Verisign's DNSSEC Debugger render the chain as a graph — useful for sending to a customer who's claiming "my DNSSEC is broken."

Step 4 — Roll out across all zones

For a host with hundreds of domains, sign them in a single pass and capture the DS records to a file your billing system can email to customers:

# Sign every cPanel-managed zone
for domain in $(whmapi1 listaccts --output=jsonpretty | jq -r '.data.acct[].domain'); do
  whmapi1 enable_dnssec_for_domains domain="$domain"
  whmapi1 fetch_ds_records_for_domains domain="$domain" \
    --output=jsonpretty > "/root/dnssec-ds/${domain}.json"
done

Customers who manage their own registrar then have a self-serve handoff: send them the DS record, link them to their registrar's DNSSEC docs, and follow up in 48 hours with dig DS to confirm it landed. Customers whose domains are at a registrar you also operate — the common case for hosting + domain bundles — can be automated end to end.

Step 5 — Plan for the first rollover

DNSSEC keys should rotate. cPanel doesn't automate rollover, which means at some point you'll need to do it manually. The safe sequence is:

  1. Add a new key alongside the existing one (whmapi1 add_dnssec_key).
  2. Wait for the new DNSKEY to propagate everywhere — at least one full TTL, conservatively two.
  3. Publish the new DS at the registrar.
  4. Wait for the parent TTL on the old DS to fully expire from caches.
  5. Remove the old DS at the registrar.
  6. Wait for that change to propagate.
  7. Remove the old key from the zone.

Skip any of these waits and resolvers will hold a cached DS that points at a DNSKEY you've already deleted — SERVFAIL until their cache expires.

Common failure modes

  1. Algorithm mismatch. Registrar UI says "algorithm 8" but cPanel generated algorithm 13. SERVFAIL. Re-enter the registrar form with the correct number.
  2. Digest typo. One hex character off in a 64-character digest. Validators reject the whole chain. Copy-paste, never retype.
  3. DS pushed before signing complete. Window of a few seconds where the zone has no DNSKEY served yet — but the DS is already public. Wait for dig DNSKEY to succeed first.
  4. Cluster sync lag. Enabling DNSSEC on the primary signs only the primary if cluster trust is broken. Confirm with dnssec-verify -o example.com /var/named/example.com.db on every peer.
  5. Forgetting subdomains served from a different DNS. If mail.example.com is hosted externally (Microsoft 365, Google Workspace MX records), the parent zone signing only covers what cPanel serves. External records remain unsigned unless that provider signs them separately.

FAQ

Does cPanel support DNSSEC by default?+
Yes, since cPanel & WHM v76. It's available in WHM → DNS Functions → DNSSEC Keys with no extra license or add-on required. The signing is automatic per zone once enabled.
What algorithm should I use for DNSSEC on cPanel?+
ECDSA Curve P-256 / SHA-256 (algorithm 13). It produces smaller signatures than RSA/SHA-256 (algorithm 8), keeps DNS responses under common UDP fragmentation thresholds, and is supported by every validating resolver in production.
Why does my DNSSEC-enabled zone return SERVFAIL?+
Almost always a chain-of-trust break: the DS record at the registrar doesn't match the DNSKEY on the nameserver. Check the key tag, algorithm number, digest type, and digest string against the WHM output and re-enter at the registrar.
How do I disable DNSSEC for a single domain?+
Run `whmapi1 disable_dnssec_for_domains domain=example.com`, then remove the DS record at the registrar. Do the registrar removal first if you want to avoid a SERVFAIL window — but in practice the chain breaks cleanly either way.
Does cPanel automate DNSSEC key rotation?+
No. Rotation is manual: add a new key, wait for propagation, push the new DS to the registrar, wait again, then remove the old key. The cPanel API supports each step but doesn't orchestrate them — you script the sequence yourself.
Will enabling DNSSEC slow down DNS resolution?+
Marginally. Signed responses are larger (typically 200-400 bytes vs 80-120 for unsigned), and validating resolvers do extra cryptographic work. Real-world latency impact is in the low-millisecond range and not user-visible.

Next steps

  • If you haven't built the underlying nameserver redundancy yet, the cPanel DNS cluster with DNSONLY guide is the prerequisite — DNSSEC on a single-server setup means a reboot takes the chain offline.
  • For the mail-authentication half of the deliverability story, see SPF, DKIM, and DMARC on cPanel — DNSSEC doesn't sign DKIM keys but it does protect them from spoofing in transit.
  • If you're sizing a fleet that needs DNSSEC across hundreds of zones, the cPanel license tier breakdown covers which tier supports the account counts you're planning.
Switch in an afternoon

Switch from your current reseller — free.

We migrate active cPanel, Plesk, LiteSpeed and CloudLinux licenses from any reseller. We prorate the first month so you never pay twice, and your customers see zero downtime during the swap.