Domains & DNS validation
Verify domain ownership with a TXT record, then connect one of 217 DNS providers so DNS-01 challenges - and wildcard certificates - are solved automatically.
Every domain is verified once before it can be attached to a certificate. After that, connecting a DNS provider is optional - it is what unlocks DNS-01 validation, and with it wildcards and hosts that are not publicly reachable.
Verifying a domain
Add the domain under Manage > Domains. aethercert gives you a
_aethercert-challenge TXT record to publish at your registrar or DNS host. Once it
resolves, press Verify.
This is a one-time step per domain, and it is separate from the ACME challenge that happens at issuance. It proves to aethercert that the domain is yours, so one organization cannot request certificates for another's names.
Verification is a single check with no waiting period beyond normal DNS propagation. If it fails, the record has almost always not propagated yet - see Troubleshooting.
Internal domains
A domain that is not publicly resolvable can be marked internal. That skips TXT verification entirely, because there is no public DNS to publish the record in - and in exchange, an internal domain can only be used with an Internal CA (REST). ACME challenges are not available for names the outside world cannot resolve.
Choosing a validation method
Certificates from a public authority are validated one of three ways. Which one you can use depends on whether a DNS provider is connected and whether the challenge port is reachable from the internet.
| HTTP-01 | DNS-01 | TLS-ALPN-01 | |
|---|---|---|---|
| How control is proven | Serving a token at http://<host>/.well-known/acme-challenge/ | Publishing a TXT record under _acme-challenge | Answering the TLS handshake with a special certificate |
| Needs a DNS provider connected | No | Yes | No |
| Host must be publicly reachable | Yes, on port 80 (or a forwarded port - see below) | No | Yes, on port 443 (or a forwarded port - see below) |
| Wildcard certificates | Not possible | Yes | Not possible |
| Good for | A public web server that already answers on port 80 | Everything else - internal hosts, load-balanced names, wildcards | A host with nothing already listening on 443 |
Internal REST authorities use none of these. They sign the CSR directly, so no challenge is involved at all.
Creating or editing a certificate with HTTP-01 or TLS-ALPN-01 checks upfront whether the certificate's own hostname is actually reachable on the challenge port from the public internet, and blocks the job with the exact reason if it isn't - instead of letting it fail silently once dispatched to the agent. See Network requirements for the full list of what needs to be reachable, from where, and on which port.
Connecting a DNS provider
Connect a provider on the domain's own page, under Manage > Domains. aethercert supports 217 DNS providers - the full set from the lego ACME library, matched one-for-one by the agent.
The provider list is searchable, and each entry states exactly which credential it needs and where in that provider's console to create it. Credentials are tested against the real API before they are saved, so a token with the wrong scope fails at the point you paste it rather than at 3 a.m. during a renewal.
Providers with a step-by-step guide
Four of the most common have their own walkthrough, including the exact permission scopes:
Everything else
The other 213 follow the same pattern: pick the provider, read its hint, paste the credential, save. A representative selection of what is in the list:
| Category | Providers |
|---|---|
| Hyperscalers | Azure DNS, Google Cloud DNS, AWS Route 53 and Lightsail, Oracle Cloud Infrastructure DNS, Alibaba Cloud DNS, Tencent Cloud DNS, Huawei Cloud DNS, IBM Cloud, Open Telekom Cloud |
| Managed DNS | Akamai EdgeDNS, NS1, UltraDNS, DNS Made Easy, Constellix, Gcore, Bunny.net, DNSimple, LuaDNS, ClouDNS, deSEC |
| Hosting and VPS | Linode, Vultr, Scaleway, Exoscale, Hetzner, netcup, OVHcloud, Infomaniak, GleSYS, Leaseweb |
| Registrars | GoDaddy, Namecheap, Name.com, Porkbun, Gandi, INWX, united-domains, Joker.com, NameSilo, Spaceship |
| Panels and self-hosted | PowerDNS, Technitium, Plesk, cPanel/WHM, ISPConfig, Infoblox, BlueCat, EfficientIP, VinylDNS, OpenStack Designate |
| Platforms | Vercel, Netlify, Cloudflare, Azion, StackPath, F5 Distributed Cloud |
| Dynamic DNS | DuckDNS, Dynu, deSEC, DynDNSFree.de, dnsHome.de, freemyip.com, IPv64.net, myaddr.tools |
| Escape hatches | ACME-DNS, a generic webhook (httpreq), or a custom script that runs on the agent host |
If your provider is not in the list, the last row is the answer: ACME-DNS delegates
_acme-challenge to a purpose-built server, the generic webhook posts the record to
an endpoint you control, and the custom script runs a script that is already on the
agent host. Between them, anything with an API can be automated.
How credentials are handled
| Storage | Encrypted in Supabase Vault, not in the domain row. |
| Read-back | Never. Once saved, a credential is not returned to the browser again - editing a domain shows an empty field, and leaving it empty keeps the stored value. |
| Use | Server-side to solve challenges, and by the agent over an authenticated connection, as short-lived credentials fetched at the moment a challenge is being solved. |
| Validation | Tested against the provider's real API before saving. |
Scope the credential to the single zone aethercert needs wherever the provider supports it. An account-wide token is a larger blast radius for no benefit.
Practical notes
- One domain, many certificates. Verify
example.comonce and every certificate for it and its subdomains can use it. You do not add a domain per hostname. - Subdomain delegation works. If
internal.example.comis delegated to a different DNS zone, add it as its own domain with its own provider credentials. - Changing DNS provider is a matter of replacing the credentials on the domain. Existing certificates are unaffected; the new credentials are used from the next challenge onwards.
- Removing a provider leaves the domain verified but drops it back to HTTP-01, which will break renewals for any wildcard certificate on it.