dnswizdocs

TLS certs

dnswiz can issue Let’s Encrypt certificates for any name in your zones. The DNS-01 challenge solves itself, dnswiz writes the _acme-challenge TXT, waits for propagation, then strips it. You get a cert without ever touching your registrar or running certbot.

  1. Open the zone, pick a record (any A/AAAA/CNAME/ANAME).
  2. Click Get TLS cert.
  3. The drawer generates a private key in your browser (it never leaves your device) and submits the CSR.
  4. ~30 seconds later: cert + chain + key download as a .zip.

The private key is never stored server-side. dnswiz keeps a record of the issuance (name, expiry, fingerprint) for renewal tracking but doesn’t see the key.

CAA pre-flight

Before issuance, dnswiz checks the zone’s CAA records to see if Let’s Encrypt is allowed to issue for the name. If CAA exists but omits letsencrypt.org, the drawer prompts you to add it with one click before continuing, most “issuance failed” surprises come from inherited CAA from a parent zone you forgot about.

From the CLI

# Mint an API key in Settings → API keys, then:
export DNSWIZ_API_KEY=dnswiz_xxxx

# One-shot: issue + write cert.pem / chain.pem / key.pem
dnswiz cert issue --name www.example.com --out ./certs/

# Renew everything within 30 days of expiry. Idempotent.
dnswiz cert renew --all --out ./certs/

Get the dnswiz CLI from the downloads page.

Auto-renewal

dnswiz watches every issued cert and fires notifications at 30 days, 14 days, 7 days, and on expiry through any notification channel configured in Settings. Each threshold fires at most once per cert, so you get a heads-up, not a flood.

Re-running dnswiz cert renew --all from cron is the standard auto-renew loop. The renewal threshold is 30 days by default (configurable in admin settings).

Coverage gap detector

The dashboard’s Names without certs tile lists every A/AAAA/CNAME/ ANAME in your workspace that resolves to a public IP but has no covering TLS cert. Click one to open the issue drawer pre-filled.

It works because dnswiz knows both what your DNS points at and which names already have a cert, so it can tell you exactly what’s exposed without one.

Rate limits

Let’s Encrypt’s account-wide rate limits apply, most notably 50 certs per registered domain per week and 5 duplicate certs per week. The console + CLI surface LE’s response verbatim when limits hit; the dashboard cert tile shows a count of issuances this week so you can pace yourself.

Operator can tighten LE limits further in Admin Settings → Cert issuance (e.g., cap to 10 issuances/day across the tenant) to prevent runaway loops.

Choosing a CA

dnswiz speaks plain RFC 8555 ACME, so any compliant CA works. The admin Settings page ships these presets:

CADirectoryNeeds EABNotes
Let’s Encrypt (production)acme-v02.api.letsencrypt.orgNoThe default. Free, ubiquitous, well-known rate limits.
Let’s Encrypt (staging)acme-staging-v02.api.letsencrypt.orgNoUntrusted certs, much looser limits. For testing only.
ZeroSSLacme.zerossl.comYesFree tier with higher per-domain limits than LE.
Google Trust Servicesdv.acme-v02.api.pki.googYesFree DV certs, Google’s chain.
Buypass Go SSLapi.buypass.comNoFree, Norwegian CA, 180-day certs (vs 90 elsewhere).

“Custom…” lets the operator paste any other ACME directory URL.

Why switch CAs? The single best reason is a fallback for LE’s weekly per-domain cap during an incident. If your main customer domain hits the 50/week limit at 3 a.m. and a renewal is failing, flipping to ZeroSSL or Google Trust Services lets the next issuance go through immediately, with no other config change.

Workspace-level override (per-tenant)

The CA above is the platform default. Each workspace can also pick its own CA at Settings → TLS certificate provider:

Workspaces that haven’t customized inherit the platform default, so nothing changes for them when the operator switches CAs.

EAB (External Account Binding)

ZeroSSL and Google Trust Services require EAB: a kid (key identifier) and an HMAC key, both issued by the CA’s account portal. Paste them into the EAB fields in admin Settings and dnswiz uses them on first issuance against that directory. The HMAC is stored encrypted under the master key and never echoed back.

LE and Buypass don’t need EAB; the EAB fields stay hidden when an EAB-free CA is selected.

One key, many CAs

dnswiz keeps one ACME account key across all directories. When you switch CAs, the same key re-registers with the new CA on the first issuance, no re-keygen required. The CA stores its own account record keyed off the public-key thumbprint, so each CA sees its own account; we just don’t need to manage multiple private keys.

What’s stored, and what isn’t

When issuance fails

You’ll seeWhat it meansFix
CAA blocked (422, code caa_blocked)The name’s CAA records don’t permit our certificate authority.Use the one-click Fix CAA prompt, or add the issue record yourself.
Name not in your zones (400)A name on the request isn’t under a zone you own here.Add the zone (and delegate it) first, or drop that name from the request.
Rate limitedLet’s Encrypt’s per-domain weekly limit was hit.Wait out the window, or pace issuance (the cert tile shows your week’s count).
Service not configured (503)Cert issuance isn’t set up on this instance yet (no contact email).Operator: set the ACME contact in admin settings.

Every failure response carries an X-Request-ID; include it when you contact support. See the full error catalog.