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.
Leaf, intermediate, root
A TLS chain has three kinds of certificate. The leaf(or “end-entity”) certificate is the one issued to your actual domain — it’s what a browser is trying to validate. It’s signed by an intermediate certificate authority, not directly by a rootCA. Root CAs keep their signing keys offline and rarely used, specifically so a compromise doesn’t require replacing every certificate trust store on earth — intermediates exist to do the day-to-day signing work at arm’s length from that root key.
A client validates the chain by walking it: does the leaf’s issuer match a certificate it has? Is that certificate’s issuer, in turn, a root the client already trusts? Every operating system and browser ships with a bundle of trusted root certificates — but it does not ship with every intermediate. That distinction is the whole story below.
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.