Understanding TLS certificate chains and why intermediates matter

A certificate almost never proves trust on its own. What actually gets validated is a chain — and the most common way that chain breaks isn’t a bad certificate, it’s an incomplete one.

Why it works for you and breaks for someone else

Root certificates are pre-installed almost everywhere. Intermediates generally are not — the server is expected to send them as part of the TLS handshake, alongside its own leaf certificate. If a server is misconfigured to send only the leaf, most modern browsers will often still connect anyway: they cache intermediates they’ve seen from other sites, or fetch a missing one via the certificate’s Authority Information Access extension. That caching is exactly what makes this failure mode so easy to miss — it “works” on the machine that configured it, and on every browser that happens to already have the intermediate cached, while failing for command-line tools, older clients, and anyone whose browser hasn’t seen that particular intermediate before.

The fix is almost always the same: configure the server to send the full chain — leaf plus every intermediate up to (but not including) the root, which the client is expected to already have. Check this with the Certificate Chain Validator, which reports exactly what a live host actually presented, not what it was supposed to.

Ordering and chain depth

Chains are conventionally sent leaf-first, each certificate followed by the one that signed it. A chain that’s technically complete but sent out of order, or with an unrelated certificate mixed in, can also fail validation on strict clients even though a human skimming the file might not immediately notice anything wrong. Depth matters too: most real-world chains are 2–3 certificates (leaf, one intermediate, implicit root) — a much deeper chain is unusual and worth double-checking rather than assuming it’s fine.