Let's Encrypt Renewal Failed: Troubleshooting Guide
Let's Encrypt certificates expire every 90 days. Certbot handles renewal automatically — until it doesn't. When renewal fails silently, you discover it when your site shows a certificate error to all visitors. Here's how to diagnose and fix every common failure scenario.
Run Renewal Manually First
Always start by running renewal manually to see the actual error:
The --dry-run flag tests without actually renewing. Remove it for real renewal. Certbot's error output will tell you exactly what failed.
Error: Connection Refused / Port 80 Blocked
Error: Challenge failed for domain example.com Connection refused
The HTTP-01 challenge requires port 80 to be accessible from the internet. Check:
If you're using Cloudflare or a load balancer that strips port 80, switch to DNS-01 challenge (see below).
Error: ACME Challenge File Not Found
Error: 404 Not Found /.well-known/acme-challenge/xxxxx
The challenge file is created but your web server is not serving it. Common causes:
Error: Rate Limit Exceeded
Error: too many certificates already issued
Let's Encrypt rate limits: 50 certificates per registered domain per week, 5 duplicate certificates per week. If you hit limits: wait until the limit resets, use the staging environment for testing (--staging flag), and avoid re-issuing when renewals will suffice.
Switch to DNS-01 Challenge
DNS-01 works even when port 80 is blocked, behind Cloudflare, or for wildcard certificates:
Verify Auto-Renewal is Set Up
Renewal checklist:
Don't rely on certbot alone
Certbot failures can be silent. Set up external certificate monitoring as a safety net. CertNotify checks your certificates every 24 hours and alerts you before expiry — independent of your renewal setup.