RunTheTests
/

SSL Expiry Checker

Check a pasted certificate chain for expiry, order and gaps.

What you paste

Parsed in your browser — never uploaded

How this reads your output

Every PEM block in what you paste is decoded, then the chain is checked for the two things servers get wrong. Order first: each certificate should name the next one as its issuer, and a chain sent out of order works in some clients and fails in others. Then completeness: the leaf plus every intermediate should be present, and the root should not be, since the client already has it and sending it wastes bytes on every handshake. Add a line reading "host: example.com" and the hostname is checked against the alternative names too.

What the results mean

Chain order
Whether each certificate is issued by the next. Broken order is the classic works-in-my-browser fault, because browsers often repair it and other clients do not.
Root included
A self-signed authority certificate in the chain. Harmless but unnecessary: it adds bytes to every handshake and the client trusts its own copy, not yours.
Certificates pasted
One usually means a missing intermediate, which is the single most common TLS misconfiguration and the one that fails silently in browsers.

Common problems and fixes

The site works in a browser but fails from curl or a mobile app
A missing intermediate, almost certainly. Browsers can often fetch it themselves using the authority information access extension, and most other clients cannot, so the failure appears only outside the browser. Concatenate the leaf and every intermediate into one file in that order and serve them together.
The certificate is valid but the connection is still refused
Check the dates on the intermediates rather than just the leaf. An expired intermediate breaks the chain exactly as an expired leaf does, and it is easy to miss because the certificate you renewed is fine. Beyond that, look at the TLS versions and ciphers the server accepts, which are configuration rather than certificate problems.

Frequently asked questions

What order should the chain be in?

Leaf first, then each intermediate that signed the one before it, ending just below the root. The root itself is omitted. Some servers tolerate other orders and TLS 1.3 relaxed the requirement, but sending it correctly costs nothing and removes a whole class of intermittent failure.

Should I include the root certificate?

No. The client validates against its own root store, so a root you send is either already trusted and redundant, or untrusted and useless. It also adds a couple of kilobytes to every single handshake, which matters at volume.

How early should I renew?

Automatically, at around a third of the lifetime remaining, which for a 90-day certificate means renewing at 30 days. That leaves room for a failed renewal to be retried and noticed before it becomes an outage. Monitor expiry independently of the renewal process, since the common failure is renewal silently stopping.

Put this on your own site

Free to embed, no attribution required beyond the source link the frame carries itself. It runs entirely in your visitor's browser, sets no cookies and loads no third-party script.

Embed code
<iframe src="https://runthetests.com/embed/ssl-checker/" width="100%" height="720" style="border:1px solid #e5e5e5;border-radius:8px" title="SSL Expiry Checker" loading="lazy"></iframe>

Preview it at https://runthetests.com/embed/ssl-checker/. Embedded pages are marked noindex, so yours stays the canonical copy — not this one.

More in DevOps