Halloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowHalloween DealsAmazon USOctober picks are moving - compare before checkoutAmazon US: current deals, useful picks and tech finds.See Picks×
VGSOURCES
Get listed

CertbotPATCH 2026.10.16

How to Get a Let’s Encrypt Certificate with DNS Validation Using Certbot

By VGSources Team 12 min read

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use Certbot’s DNS-01 challenge when you need a wildcard certificate, cannot expose port 80, or want validation to happen independently of the web server. Certbot’s provider plugin creates a temporary TXT record at _acme-challenge.<your-domain>; Let’s Encrypt checks that record, issues the certificate, and the plugin removes the record. For unattended operation, install the DNS plugin for your authoritative provider, use a narrowly scoped API token, schedule certbot renew, test with the staging service, and reload your server after renewal.

What DNS validation proves

Let’s Encrypt’s DNS-01 challenge proves that you control a domain by requiring a specific token-derived value in a TXT record under that domain. The record name is _acme-challenge.<domain>. Once Let’s Encrypt can retrieve the expected value from authoritative DNS, it can issue the requested certificate.

As an Amazon Associate I earn from qualifying purchases.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

DNS-01 is the only Let’s Encrypt challenge method that supports wildcard names such as *.example.com. It is also useful when the computer running Certbot is separate from the web server, when inbound HTTP is restricted, or when a service is not publicly reachable on port 80.

Decide which names and challenge method you need

Request only the names you will use

Every -d option adds a name to the certificate. A certificate for example.com does not automatically cover www.example.com, and a wildcard does not cover the base domain. If both are needed, request both explicitly:

sudo certbot certonly --dns-<provider> -d example.com -d '*.example.com'

For ordinary hostnames without a wildcard, request the exact names:

sudo certbot certonly --dns-<provider> -d example.com -d www.example.com

Keep the wildcard in single quotes so a Unix shell does not expand the asterisk before Certbot receives it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Compare the available validation approaches

Method Wildcard certificates Port 80 dependency Automation Main operational concern
DNS provider plugin Yes No Automatic when the provider API works Protecting DNS API credentials and allowing time for propagation
Manual DNS-01 Yes No Not unattended unless an authentication hook updates DNS A person must create the TXT record for each issuance or renewal
HTTP-01/webroot No Yes; the challenge file must be reachable over HTTP Usually automatic for supported web-server setups Port 80 routing and public reachability
Delegated challenge zone (CNAME or NS) Yes No Automatic through the delegated provider Extra DNS delegation design and maintenance

Find the authoritative DNS provider

The plugin must update the provider that is authoritative for the names you request. Check the domain’s delegation and identify which nameservers answer authoritatively. If a subdomain is delegated separately, its authoritative provider may differ from the provider for the parent domain.

Document the exact zone and record name before issuing. For example.com, the usual challenge owner name is _acme-challenge.example.com. For a name under a delegated subdomain, follow that zone’s DNS boundaries rather than assuming the parent provider is authoritative.

Install Certbot and the matching DNS plugin

Install Certbot for your operating system

Install Certbot using the package method recommended for your operating system, then install the separate DNS plugin for your provider. DNS plugins are not included in a default Certbot installation; the plugin package must be added separately.

Provider families with documented Certbot DNS plugins include Cloudflare, DigitalOcean, DNSimple, DNS Made Easy, Google, Linode, LuaDNS, NS1, OVH, RFC2136, Route 53 and Sakura Cloud. Plugin package names and installation commands change by distribution, so use the current instructions for your operating system and the provider plugin you selected.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Confirm the plugin is available

After installation, check Certbot’s available plugins and verify that the provider-specific DNS authenticator appears. If it does not, stop before requesting a certificate: a command that names an unavailable plugin cannot perform DNS automation.

Keep Certbot and its DNS plugin in the same installation environment. A package upgrade, virtual environment change, or replacement host can leave the renewal job using a Certbot binary that no longer has the authenticator installed. Recheck the plugin list after maintenance and before the next scheduled renewal.

Create and protect a least-privilege DNS credential

Create an API token or key that can change only the DNS records required for the validation zone. Prefer a token restricted to the specific zone and to record read/write operations, rather than a full-account credential. The exact permission labels vary by provider.

Let’s Encrypt warns that placing broad DNS credentials on a public web server increases the impact of a server compromise. Safer designs include:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Use a narrowly scoped token limited to the validation zone.
  • Run DNS validation from a separate machine that does not serve public application traffic.
  • Store the credential in the provider plugin’s supported configuration file or secret store, not in source control or a world-readable script.
  • Restrict the credential file to the account that runs Certbot (for example, root when Certbot is run with sudo).
  • Rotate or revoke the token if the validation host is rebuilt, exposed, or no longer trusted.

Do not paste a real token into a shell history, ticket, or article. Use the plugin’s current documentation for the exact option name and file format; those details differ between providers.

Test the credential with the least privilege you intend to keep. It must be able to create, read, and remove the TXT record in the authoritative zone, but it does not need broad access to unrelated zones or account settings. If your provider separates DNS read and write permissions, grant only what the plugin requires for propagation checks and cleanup.

Issue a certificate with a DNS plugin

Wildcard and base-domain certificate

  1. Confirm that the plugin package and its credential configuration are installed.
  2. Run Certbot in certificate-only mode, replacing the provider name and credential options with the values required by that plugin:
    sudo certbot certonly --dns-<provider> -d example.com -d '*.example.com'
  3. Read Certbot’s output. The plugin requests a challenge, creates the TXT record, waits for DNS visibility as needed, and asks Let’s Encrypt to validate it.
  4. When validation succeeds, Certbot stores the certificate lineage and reports the paths to the generated files.

Non-wildcard certificate

Request only the hostnames you need:

sudo certbot certonly --dns-<provider> -d example.com -d www.example.com

The DNS plugin creates and removes the TXT record through the provider API. Do not manually delete a record while a validation is in progress; doing so can cause the challenge to fail.

What Certbot stores

Certbot documents stable paths under /etc/letsencrypt/live/<certificate-name>/. The two files most servers consume are:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • fullchain.pem: the server certificate followed by the required intermediate chain.
  • privkey.pem: the private key; protect it as a secret and grant the web server only the access it needs.

The certificate name in the directory is the lineage name chosen by Certbot. If you issue similar names more than once, Certbot may append a suffix, so use the path printed by the successful run and inspect the live directory before configuring a server.

Keep services pointed at the stable live directory rather than copying a timestamped file from the archive. Certbot updates those stable links when a lineage renews, which lets a deploy hook reload the service without changing its configuration each time.

When the provider has no usable API

Manual DNS-01

Certbot’s manual authenticator can print the TXT value that you must publish yourself. Create the record at the exact owner name Certbot specifies, wait until authoritative DNS serves the value, and then continue the prompt so Let’s Encrypt can check it. This method still supports wildcard certificates and does not require port 80.

Manual certificates do not renew unattended by default. Each renewal requires another TXT-record intervention unless you supply an authentication hook that performs the DNS update and a cleanup hook that removes it. Treat a manual certificate as an operational process, not as a set-and-forget deployment. A scheduled certbot renew job cannot complete a manual prompt when nobody is present.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Delegate only the challenge zone

If the primary DNS provider is slow, lacks an API, or should not hold credentials on the web server, delegate _acme-challenge with a CNAME or NS record to a validation-specific zone and provider. Let’s Encrypt follows these DNS delegations according to DNS standards. This keeps routine application DNS separate from certificate validation, but it adds records, monitoring, and another provider relationship to maintain.

Document the delegation before issuing: record the CNAME or NS target, the authoritative nameservers for the validation zone, and which credential Certbot uses there. A delegation that is present at one resolver but missing from an authoritative server will produce the same validation symptom as a missing TXT record, so verify the complete chain.

Understand DNS propagation and TXT-record behavior

Issuance depends on authoritative DNS servers returning the new TXT value. A plugin may wait for propagation before asking Let’s Encrypt to validate, but the exact delay and controls differ by provider plugin and by DNS infrastructure. Recursive resolver caches, multiple authoritative servers, and DNSSEC or delegation mistakes can all make a newly created record appear inconsistent.

  • Check the record at authoritative nameservers, not only through one local resolver.
  • Allow the plugin’s documented propagation interval before assuming the token is wrong.
  • Do not replace a TXT value that another concurrent validation is using.
  • Keep the challenge owner name exactly as Certbot displays it; an extra zone suffix or missing label creates a different record.

When several validations run at once, preserve all active TXT values if your provider supports multiple values at one owner name. Removing another token can break a separate order. This matters when multiple hostnames, wildcard orders, or two Certbot jobs overlap.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Verify the certificate and deploy it

Inspect the lineage

After issuance, verify that every requested name appears in the certificate and that the live-path files point to the intended lineage. Confirm file ownership and permissions, especially for privkey.pem. A certificate can be valid while an application still serves an older file copied elsewhere.

Configure the service to use the live paths

Point the TLS-terminating service at the stable live paths rather than at a timestamped archive file. The service must have permission to read the private key. Follow its normal configuration-test command before reloading it.

Reload after renewal

Renewal writes new files, but most long-running servers continue using the old certificate until they reload. Use a deploy hook that runs only after a successful renewal:

sudo certbot renew --deploy-hook /usr/local/sbin/reload-webserver

Replace the example path with an executable script that tests the server configuration and performs a graceful reload. Keep the hook idempotent so it is safe when Certbot processes more than one lineage. If a reverse proxy or load balancer terminates TLS, the hook must reload that component, not only the application behind it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Automate renewal safely

Schedule the renew command

Use the systemd timer, cron job, or scheduled task installed or recommended by your Certbot package to run:

sudo certbot renew

The renew subcommand checks previously obtained certificates and attempts renewal only when they are close to expiry. It reuses the authenticator and options saved during the original issuance, so the DNS plugin and its credential configuration must remain available.

Let’s Encrypt and Certbot documentation describe 90-day certificates in the 2023-era reference material. Because the lifetime is short, renewal automation is an operational requirement. Certbot’s current documentation describes renewal eligibility as less than one-third of the certificate lifetime remaining for certificates whose lifetime exceeds ten days; the exact timing can evolve as certificate lifetimes change.

Do not assume that a successful first issuance proves future renewal will work. Renewal may run under a different scheduled-task environment, account, working directory, or permission set. Use the same non-interactive credential path during testing that the scheduler will use in production.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Test with the staging service

Before relying on production renewal, run:

sudo certbot renew --dry-run

The dry run uses Let’s Encrypt’s staging service and does not save production certificates. It verifies that the stored plugin options, credentials, DNS permissions, propagation behavior, and deploy hooks still work. A successful dry run is evidence that the path works, but it does not replace monitoring of real renewals.

Monitor the result

  • Log the scheduled command’s exit status and output.
  • Alert before a certificate’s expiration date if renewal fails.
  • After a successful renewal, verify that the service presents the new certificate, not merely that files changed on disk.
  • Retest after changing DNS providers, API tokens, host permissions, firewall rules, or the web-server reload script.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot common failures

“Plugin not found” or an unknown authenticator

The provider plugin is separate from Certbot’s default installation. Install the matching certbot-dns-<provider> package for the same Certbot environment, then list plugins again.

TXT record is not found

Check the authoritative nameservers, zone delegation, owner name, and whether propagation time has elapsed. A record created in a non-authoritative zone, or a record with the domain appended twice, will not satisfy the challenge.

Credentials are rejected

Confirm that the token has DNS write permission for the correct zone, has not expired or been revoked, and is readable by the account running Certbot. Remove broad permissions and create a replacement token if you cannot verify its scope.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Validation works manually but renewal fails

Renewal runs non-interactively and reuses the saved authenticator options. Ensure the credential file still exists, its permissions still allow Certbot to read it, the DNS plugin is installed after package upgrades, and no manual prompt is required. Run sudo certbot renew --dry-run to reproduce the renewal path safely.

The certificate renewed but clients still see the old one

Check the service’s configured certificate paths, verify the new certificate dates, test its configuration, and run the deploy hook or graceful reload. If a load balancer or reverse proxy terminates TLS, reload the component that actually presents the certificate.

Operational checklist

  • Names include every required hostname and, when applicable, both the base domain and wildcard.
  • The selected provider is authoritative for the challenge zone.
  • The matching DNS plugin is installed and visible to Certbot.
  • The API token is limited to the required zone and DNS operations.
  • Credential files are not world-readable and are absent from source control.
  • Issuance succeeds and the expected live paths exist.
  • certbot renew --dry-run succeeds using the same non-interactive path as production.
  • A deploy hook reloads the TLS service after successful renewal.
  • Monitoring alerts before expiry and after failed renewal jobs.

Bottom line

For a wildcard or a server that cannot answer HTTP-01, DNS-01 with a provider-specific Certbot plugin is the practical route: publish the token at _acme-challenge, let Let’s Encrypt validate it, and automate the same process through certbot renew. Least-privilege DNS credentials, a tested dry run, and a post-renewal reload are what turn a one-time certificate command into a dependable service.

Frequently Asked Questions

What TXT record does Let’s Encrypt expect for DNS validation?

Certbot obtains a token-derived value and asks you or the DNS plugin to publish it as a TXT record at _acme-challenge.<domain>. Use the exact owner name and value displayed by Certbot. Do not append the zone name twice, and do not remove another active value when concurrent validations are running.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Can Certbot create a wildcard certificate with DNS validation?

Yes. DNS-01 is the challenge method that supports wildcard names. Request the wildcard explicitly, and request the base domain separately when you need it: -d example.com -d '*.example.com'. A wildcard alone does not cover the apex domain.

Do I need port 80 for a DNS-validated certificate?

No. DNS-01 validates control through an authoritative TXT record, so the validation host does not need to answer HTTP on port 80. This is useful for private services, restricted firewalls, and Certbot running on a separate machine.

How do I renew a manual DNS certificate automatically?

Manual DNS certificates require a person to create the TXT record each time unless you provide an authentication hook that updates DNS and a cleanup hook that removes the record. For unattended renewal, use a provider-specific DNS plugin or automate the manual authenticator with hooks.

Why is my TXT record not found even though I created it?

Check that the record was created in the authoritative zone, that the owner name is exactly _acme-challenge.<domain>, and that every authoritative nameserver serves the new value. Allow the plugin’s documented propagation interval. Delegation, DNSSEC, caching, or an extra zone suffix can make a correct-looking record unavailable to Let’s Encrypt.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Where are the renewed certificate files?

Certbot maintains stable files under /etc/letsencrypt/live/<certificate-name>/. Services commonly use fullchain.pem and privkey.pem. Use the lineage name reported by Certbot, because repeated issuance can result in a suffixed directory name.

How can I verify renewal before risking production rate limits?

Run sudo certbot renew --dry-run. Certbot uses Let’s Encrypt’s staging service and does not save production certificates. The test exercises the saved DNS plugin options, credentials, propagation behavior, and deploy hooks.

Why does the old certificate remain active after renewal?

Renewal updates files on disk, but a long-running web server usually continues using its already loaded certificate. Configure a deploy hook such as certbot renew --deploy-hook /usr/local/sbin/reload-webserver, test the service configuration, and reload the component that actually terminates TLS.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

CertbotCertificate renewalDNS-01Let's EncryptSSLTLSWildcard Certificates

Leave a reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.