What it means
Before issuing a certificate, Let's Encrypt (or any ACME authority) checks that you control the domain: it fetches a file over HTTP (http-01) or reads a TXT record (dns-01). When that check fails, Certbot writes Challenge failed for domain example.com to /var/log/letsencrypt/letsencrypt.log and stops with Some challenges have failed. On screen, current versions print the reason:
Certbot failed to authenticate some domains (authenticator: nginx). The Certificate Authority reported these problems:
Identifier: example.com
Type: connection
Detail: 203.0.113.10: Timeout during connect (likely firewall problem)
Failed to renew certificate example.com with error: Some challenges have failed.The Type line points to the cause.
Common causes
1. Port 80 is closed (connection). A firewall, a cloud security group or the host blocks port 80. http-01 only works on port 80, even if the site only serves HTTPS. Let's Encrypt fetches the file from several vantage points, so a firewall that only allows some countries fails too. Confirm from outside the server:
curl -I http://example.com/.well-known/acme-challenge/test
sudo ufw status2. The challenge file is not served (unauthorized, 404 or 403). A rewrite, an app route or a wrong webroot catches /.well-known/acme-challenge/. Confirm with a test file in the webroot and the curl above.
3. DNS points elsewhere (dns or unauthorized). A stale A record, or an AAAA record for an old server: Let's Encrypt prefers IPv6 and only falls back to IPv4 on a timeout, not on a wrong answer.
dig +short A example.com
dig +short AAAA example.com4. Standalone cannot get port 80. With --standalone, Certbot starts its own server and stops with Could not bind TCP port 80 because it is already in use by another process, the same conflict nginx reports as bind() to 0.0.0.0:80 failed.
5. The TXT record is missing (dns-01). Wildcard certificates need _acme-challenge.example.com. A certificate made with --manual cannot renew alone without an auth hook.
How to fix
- Reproduce without burning the rate limit:
sudo certbot renew --dry-run. - Read the
TypeandDetaillines and confirm with the matching command above. - Open port 80 to the whole internet; a redirect to HTTPS afterwards is fine.
- Serve the challenge path before any rewrite:
location ^~ /.well-known/acme-challenge/ { root /var/www/letsencrypt; } - Fix or remove the stale A or AAAA record.
- Replace
--standalonewith--nginxor--webroot, or add--pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx". - For wildcards, use a DNS plugin for your provider (for example
certbot-dns-cloudflare) instead of--manual. - Check that the renewal job still runs:
systemctl list-timers | grep certbot.
Is it just you?
Put a test file in the challenge path and check http://example.com/.well-known/acme-challenge/test from several regions with Is my site down?. A region that times out is what Let's Encrypt sees.
Get alerted next time
- SSL monitoring reads the certificate your server serves every day and warns you 1 to 90 days before expiry, with reminders. With a 15-day threshold on a 90-day certificate, an alert means renewal has been failing for about two weeks.
- A healthcheck on the renewal job,
certbot renew -q && curl -fsS https://hc.hyperping.io/TOKEN_ID, alerts you the first time a run fails or the job stops running. - See SSL monitoring in the docs for thresholds and channels.
FAQ
Why does certbot renew fail when the first certonly worked? ▼
Renewal reuses the method saved in /etc/letsencrypt/renewal/<name>.conf. A certificate obtained with --manual cannot renew unattended without a --manual-auth-hook, and one obtained with --standalone fails once nginx or Apache holds port 80. Change the authenticator, or add pre and post hooks, then test with certbot renew --dry-run.
How many times can I retry before Let's Encrypt blocks me? ▼
As of October 2026, one account can incur 5 authorization failures per hostname per hour, refilled at 1 every 12 minutes. Retry with --dry-run, which uses the staging server and its higher limits, until it passes.
How much time do I have before the certificate expires? ▼
Since Certbot 4.0, a certificate is due when less than a third of its lifetime remains: about 30 days for a 90-day Let's Encrypt certificate. The scheduled job runs twice a day, so you have weeks of failed attempts before expiry, and nothing tells you unless you watch for it.