SSL Certificate Checker Guide: Errors, Chains & Expiry

A practical, technically accurate walkthrough of what a TLS certificate proves, why the certificate chain trips up so many sites, and how to catch problems before your visitors do.

Updated July 5, 2026 · ~8 min read

Your certificate loads fine on your laptop, so you assume it's healthy — then a customer on their phone sees a full-page security warning, or a webhook silently stops firing. Nearly every one of these outages traces back to a handful of certificate problems that are invisible unless you look. This guide explains what to check, why the chain matters more than the certificate itself, and how to stay ahead of expiry.

What an SSL/TLS certificate proves

“SSL certificate” is the everyday name for what is technically a TLS certificate — SSL is the deprecated predecessor of TLS, but the name stuck. Whatever you call it, the certificate is a small signed file your server presents at the start of an HTTPS connection, and it does two distinct jobs.

First, it enables encryption: the certificate contains the server's public key, which the client uses to negotiate a secret session key so traffic can't be read in transit. Second, and more subtly, it provides identity: the certificate is signed by a Certificate Authority (CA) that has verified you control the domain. That signature is what lets a browser display example.com in the address bar and trust that it is really talking to example.com and not an impostor on the same network.

A certificate binds three things together: a domain name (or several, listed in the Subject Alternative Name field), a public key, and a validity window (notBefore and notAfter dates). If any of those don't line up with reality — wrong name, expired window, untrusted signer — the client rejects the connection. Encryption without verified identity is nearly worthless, which is why every failure below is really a failure of trust, not of math.

The certificate chain — and the #1 silent failure

No public CA signs your certificate with its precious root key directly. Instead, trust flows through a chain of certificates:

To trust your site, a client walks this chain upward: leaf → intermediate → root, verifying each signature until it reaches a root it already trusts. If any link is missing, the walk fails and the connection is rejected.

The #1 silent failure: when you install a certificate, your CA gives you the leaf and the intermediate(s). If you install only the leaf, your server sends an incomplete chain. The certificate is completely valid — but clients that can't fetch the missing intermediate on their own will reject it. The reason this is so dangerous is that it doesn't fail consistently: desktop Chrome often caches or auto-fetches intermediates and loads the site fine, so you see no problem, while Firefox, older Android, and most API clients throw errors. Always serve the full chain (leaf first, then intermediates, in order), and never include the root.

The most common SSL errors and their causes

Most certificate warnings map to a short list of root causes. Knowing which one you're looking at tells you exactly what to fix:

ErrorWhat the client seesConcrete cause
Expired certificateNET::ERR_CERT_DATE_INVALIDCurrent date is past notAfter; auto-renewal failed or was never set up
Name mismatchERR_CERT_COMMON_NAME_INVALIDThe domain isn't listed in the certificate's SAN field (e.g. cert for www but visitor used the bare domain)
Self-signed“Not trusted” / ERR_CERT_AUTHORITY_INVALIDCertificate signed by itself, not a public CA — common on staging/dev servers left exposed
Unknown issuer“Issued by an unknown authority”Signed by an internal or private CA the client's trust store doesn't contain
Incomplete chainWorks in some clients, fails in othersServer sends the leaf but not the intermediate(s)
RevokedERR_CERT_REVOKEDCA revoked the certificate (key compromise, mis-issuance) — flagged via OCSP/CRL
Weak signature“Obsolete/weak security”Old algorithm like SHA-1, or an undersized RSA-1024 key no longer accepted
Mixed contentPadlock with warning; blocked resourcesHTTPS page loads scripts/images over plain http:// after the cert is installed

Two of these routinely get misdiagnosed. A name mismatch is a certificate problem, not a DNS problem — the fix is to reissue the certificate with the correct name in the SAN list, or add a redirect so users land on a covered hostname. Mixed content isn't a certificate flaw at all: the certificate is valid, but the page undermines it by pulling in insecure sub-resources, so update those URLs to https:// (or protocol-relative) references.

How to check a certificate

A quick manual inspection — clicking the padlock in a browser — only tells you what your browser thinks, and your browser may be papering over an incomplete chain. A proper certificate check looks at the connection the way a strict client would, and reports on five things:

  1. Expiry date. Read notAfter and confirm you have comfortable runway — ideally more than 30 days.
  2. Subject Alternative Names (SANs). Confirm every hostname you actually serve — bare domain, www, and any subdomains — appears in the SAN list. The old Common Name field is ignored by modern browsers.
  3. Issuer. Verify it's a publicly trusted CA and not a stray self-signed or internal certificate.
  4. Chain order and completeness. Confirm the server sends the leaf followed by the correct intermediate(s), in order, with no missing links and no root.
  5. Protocol and cipher. Confirm the server negotiates a modern protocol (TLS 1.2 or 1.3) and a strong cipher, and isn't still offering deprecated SSLv3/TLS 1.0.

Check your SSL certificate now

Inspect the full chain, SANs, issuer, protocol, and exact expiry date for any domain — free, no signup.

Open the SSL Checker →

Expiry monitoring & auto-renewal

Certificate lifetimes keep shrinking. Public TLS certificates are capped at 398 days, and free CAs like Let's Encrypt issue 90-day certificates on purpose — the short window is meant to force automation. That's healthy in principle, but it means expiry is now a recurring event, not a once-a-year chore, and the failure mode has shifted from “we forgot to renew” to “automation broke and nobody noticed.”

Auto-renewal tools such as certbot handle the happy path, but they fail quietly in ways worth planning for:

Because renewal can fail silently, independent expiry monitoring is not optional. Set an alert at 30 days before expiry — that's enough runway to debug a stuck ACME challenge, reissue manually if needed, and redeploy without an outage. Monitor from outside your own infrastructure so you're testing the certificate visitors actually receive, not the file sitting on disk.

Troubleshooting

“It works for me but a customer sees a warning”

Almost always an incomplete chain. Test with a strict client (Firefox, or curl -v / openssl s_client -connect host:443) rather than desktop Chrome, then reinstall the certificate with the full intermediate chain and reload the server.

Padlock is missing even though the certificate is valid

Suspect mixed content. Open the browser console and look for blocked http:// resources on the page, then switch those URLs to https://.

Certificate is valid but the name is wrong

The hostname isn't in the SAN list. Reissue the certificate covering every name you serve, or add a redirect so visitors reach a hostname the certificate actually covers.

Renewed the certificate but the old one is still served

The new certificate was issued but the service wasn't reloaded. Restart or reload the web server (or load balancer) so it picks up the new file, then re-check the served expiry date.

Frequently asked questions

How long are SSL certificates valid?
Publicly trusted TLS certificates are capped at 398 days, and many are far shorter. Let's Encrypt issues 90-day certificates by design, expecting automated renewal. Lifetimes are trending shorter still, which makes auto-renewal and expiry monitoring essential.
What does "certificate not trusted" mean?
The browser couldn't build a chain from your certificate up to a CA it already trusts. Usual causes: a self-signed certificate, one signed by an internal/unknown CA, or a missing intermediate so the leaf can't be linked to a trusted root. The certificate may be valid; the client just can't verify who vouches for it.
Why does my certificate work in one browser but fail in another?
Almost always an incomplete chain — your server isn't sending the intermediate. Clients like desktop Chrome cache or auto-fetch intermediates and load the site anyway; Firefox, older Android, and most API/CLI tools don't, so they reject it. Installing the full chain fixes it everywhere.
How do I check when my SSL certificate expires?
Run the domain through an SSL checker and read the "Valid Until" (notAfter) date, or click the browser padlock to inspect it. For safety, set an automated alert at least 30 days out so you have time to renew even if an auto-renewal fails silently.
Do I need to check SSL after moving hosts?
Yes. Migrations frequently break the chain, reset auto-renewal, or leave an old certificate on the new server. Re-check after any move to confirm the leaf, intermediates, expiry, and SAN list still match the domain being served.

Related tools & guides