• 8 min read

Certificate Renewal Failing Behind Cloudflare? Check the Error First

Updated

Why won't your certificate renew, and what should you check before lowering the site's protection? Get the exact failure first. A rule that fixes one Cloudflare feature may do nothing for another.

Use this to diagnose, then check your own setup

These steps come from the linked certificate and Cloudflare documentation. I haven't tested them on a separate domain for this article. They describe possible causes and checks, rather than one fix that applies to every host.

The old blanket skip recipe missed a key limit: it can't bypass Bot Fight Mode. Find the feature stopping validation before you change its settings.

What the certificate service needs to reach

Let's Encrypt's HTTP-01 validation reads a token at http://your-domain/.well-known/acme-challenge/TOKEN. It starts on port 80. A proxied domain sends that request through Cloudflare before it reaches your host.

A block, interactive challenge or wrong response can stop the check. So can a fault at the host. Seeing Cloudflare in the route doesn't prove it caused the failure.

Let's Encrypt follows up to ten redirects, using HTTP or HTTPS on ports 80 or 443. It doesn't validate the certificate during an HTTPS redirect. An ordinary redirect to HTTPS therefore isn't automatically the problem.

1. Keep the exact failure

Copy the host's renewal error, time, hostname and full challenge path. Note whether it reports a refused connection, a timeout or an unexpected response. Those call for different checks.

A Cloudflare challenge response carries cf-mitigated: challenge. A normal result from your own browser doesn't prove every validation request got through.

2. Match the request to the feature

Look in Security Events near the failure time. Filter by hostname and the actual path. Path filters don't accept wildcard searches. Use a narrow time range to reduce sampling.

Events can be sampled, so an empty result doesn't clear Cloudflare. A skip rule with logging disabled also leaves its matching requests out of that view.

Cloudflare's certificate validation guide lists WAF rules, IP rules, Under Attack mode and Worker routes as possible obstacles. That guide concerns its own certificate checks. Use those as leads for your host's failure, then verify the actual response.

3. Treat Bot Fight Mode separately

The skip options documentation makes this distinction clear. Super Bot Fight Mode can be skipped. Bot Fight Mode cannot.

If Bot Fight Mode is the cause, adding another Skip rule won't solve it. Turning that feature off affects the domain more broadly. Discuss the wider effect with the person maintaining your protection. It changes more than one path.

4. Change only the rule that needs changing

For a matching custom rule, check its position as well as its action. A block that runs first can stop the request before a later skip rule sees it.

Scope any exception to the validation path and required hostname. Cloudflare's rule functions include starts_with for a path prefix. Keep matching-request logs enabled while checking the change.

A managed-rule exception can bypass a named rule or ruleset. Other skip choices cover different products. Skipping a rules phase doesn't automatically bypass tools outside that phase.

Check the result against the original error. Don't widen the exception just because the first change didn't work.

5. Verify the certificate at the host

The browser sees Cloudflare's edge certificate. Your host uses a separate certificate. A padlock in the browser doesn't prove the host renewed its own copy.

Check the renewal output and installed expiry date at the host. On cPanel, SSL/TLS Status shows certificate information. Check every hostname the failed renewal was meant to cover.

Full (strict) requires a suitable, valid certificate at the origin. Fix a failed renewal there; weakening the mode hides a different problem.

Why a neighbouring domain can work

Each domain can have different security rules, Worker routes or validation settings. Compare those differences before changing the whole server. A successful renewal next door doesn't prove the failing domain uses the same route.

When DNS validation is worth considering

DNS-01 proves control using a DNS TXT record, avoiding the HTTP challenge path. It also supports wildcard certificates. The practical question is whether your host's certificate client can automate it with your DNS provider.

Use credentials with the smallest needed DNS scope. Don't leave a full account key on a web server for convenience. Manual TXT updates at every renewal trade one recurring failure for another recurring chore.

Renewal needs its own monitoring

Let's Encrypt ended expiry emails on June 4, 2025. Agree who monitors renewal failures instead.

Its announced schedule moves the default certificate profile to 64 days on February 10, 2027. A further change to 45 days is planned for February 16, 2028. Those are future default-profile changes, not today's lifetime for every certificate.

Avoid fixes that depend on remembering next time

I wouldn't make manual certificate replacement or switching off the proxy a standing renewal plan. Nor would I bypass protection across the entire zone to allow one path.

Don't build a fixed IP whitelist for Let's Encrypt. Its FAQ says it doesn't publish a fixed validation IP range.

Get the smallest useful repair scoped

My hosting care plan includes SSL, DNS and form troubleshooting. The renewal check still needs to fit your host and Cloudflare settings. Sometimes a narrow rule correction is enough.

Start with the failed renewal

Send the domain and exact error message. Keep passwords and API keys out of it. I'll help work out the next check.

About Ben Huffman

Ben Huffman runs Dirt River Design, a one-person web shop in Grand Forks, North Dakota. He builds fast, plain websites for local businesses and runs ToolGrit, a free library of trade calculators.

More about Ben →