What Is an SSL Certificate Chain? My Simple Explanation
Hello guys, welcome back to my blog. Few days back one of my client asked me why his site was showing “not secure” on some phones even after he installed a SSL certificate on his server. I checked it and turned out his server was not sending the full certificate chain, only the main certificate. That is when I decided to write this post. Today I will tell you what is an SSL certificate chain, why it is not just one file but actually a group of certificates, and why missing even one link can break the whole trust. I read the official docs from Cloudflare and DigiCert, and also some good technical discussions on Reddit, so lets get into it guys.
What Is an SSL Certificate Chain, Exactly?
If you ask me in simple words, an SSL certificate chain is the linked set of digital certificates that proves your website’s certificate was actually issued by someone browsers already trust. It is not just your one certificate sitting alone, it is more like a chain of trust going upward.
Cloudflare’s own documentation explains this chain has three parts. The leaf certificate is “the certificate presented to a client”, then there is the intermediate certificate which bridges things, and at the top there is the root certificate, which is “the trusted certificate authority (CA) certificate.” Cloudflare also says that “the certificate presented to a client – the leaf certificate – has to be traceable back to a trusted certificate authority (CA) certificate – the root certificate.” I think this line explains the whole concept honestly, your certificate is only as trusted as its path back to that root.
A user on r/devops explained it in a very newbie friendly way too, calling it “the chain of trust (Root CA → Intermediate CA → your cert) and why your OS/browser already trusts certain roots.” So basically your browser is not checking your certificate alone, it is checking the whole ssl certificate chain up to a root it already knows.
Root, Intermediate, and Leaf: The Three Parts of the Chain
I think the easiest way to understand this is by breaking down each part separately, because each one has a different job.
| Certificate Type | Position in Chain | Who Holds the Private Key | Sent to Browser? |
|---|---|---|---|
| Root Certificate | Top of chain | Certificate Authority (CA) | No, already stored in browser/OS |
| Intermediate Certificate | Middle of chain | CA (issued by root) | Yes, must be sent by server |
| Leaf (End-Entity) Certificate | Bottom of chain | Your website/server | Yes, this is your actual SSL cert |
A comment on r/devops confirmed this same setup, saying “servers send the leaf and intermediates, not the root.” This makes sense also because the root is already sitting safely inside the browser or operating system, you don’t need to send something the browser already has.
Another discussion on the same r/devops thread broke it down further, saying the post covers “what an ‘SSL certificate’ (TLS, really) is: issuer info + public key + signature” and “why the signature matters and how verification” works. I really like this explanation because it shows every certificate in the chain is signed by the one above it, like a stamp of approval passed down.
Why the Certificate Chain Matters So Much
Now honestly this is the part most people skip, but it matters a lot for security. The whole point of the ssl certificate chain is proving identity, not just encrypting data.
Someone on r/explainlikeimfive explained it in a very simple everyday way, saying “a third party, which everyone trusts, checked my ownership of the domain independently.” So the chain is basically proof that a trusted outsider confirmed your site is really who it says it is, not some fake copy trying to steal your data.
Sectigo’s own blog says a certificate chain “sets the foundation for establishing trust in the identity of an online entity and securing connections over the internet.” They also mention that authentication like this “prevents malicious actors from impersonating legitimate websites.” I think this is honestly the most important reason to care about your chain, it is not just about avoiding browser warnings, it is about stopping fake sites and man in the middle attacks.
What Happens When the Chain Is Broken or Incomplete
This is exactly the problem my client had, and it is more common then people think. If the chain is missing a link, browsers cannot always fill the gap themselves.
A reply on r/AskNetsec said clearly, “if the server doesn’t send it then by default the connection will be marked as untrusted.” So even if your actual certificate is perfectly valid, missing an intermediate certificate can still make your visitors see a warning.
Sectigo also explains what happens if a certificate higher up gets compromised, they say “if a trust anchor’s private key is compromised, the root must be distrusted from supporting software immediately.” They also note that if an intermediate is compromised, everything issued under that intermediate becomes unreliable too, but the good part is the damage stays limited to that branch, the rest of the chain is fine.
On the technical side, browsers do have some backup options. Another comment on the same r/AskNetsec thread mentioned that “modern browsers maintain a list of the top/most common ~3000 intermediate certs, the CCADB.” So sometimes a browser can quietly patch a missing intermediate on its own using this list, but honestly you should never depend on that, always send the full chain from your server side.
How the Client Actually Gets the Chain
I think this part is good to know even if you are not super technical, because it explains what is happening behind the scenes every time you open a website.
During the TLS handshake, the server is supposed to hand over the chain itself. A comment on r/AskNetsec confirms this, saying “the server is meant to send it as part of the certificate exchange.” There is also a small backup method built into certificates. Another reply on the same subreddit explained “there is an x509 extension with an URI to download the authority” but also warned that “TLS client usually don’t try to use that,” meaning you really should not rely on this fallback.
Once the client has the full path, verification happens step by step. A r/devops discussion summed it up nicely, “if the client trusts the root certificate, and if all signatures in the chain are valid, then the client trusts the end-entity certificate.” So basically it is like checking ID cards one level at a time until you reach someone everyone already trusts.
How to Check and Set Up Your Certificate Chain Properly
If you manage a server yourself, order really matters here, and honestly a lot of people get this wrong.
A comment on r/linuxadmin gave a good practical rule, “the sender’s certificate MUST come first in the list. Each following certificate MUST directly certify the one preceding it.” So your leaf certificate goes first, then its direct intermediate, then the next one up, and so on.
For checking your chain, the same r/linuxadmin comment shared a handy one liner using openssl, “one liner to conveniently pull cert (and intermediate(s)) from server … openssl s_client -showcerts.” You can also use DigiCert’s Certificate Utility if you don’t want to touch command line at all. This tool “makes an HTTPS connection between the DigiCert Certificate Utility and the specified server” and then shows you the full certificate chain your server is actually sending out, along with any errors.
Quick Facts Table
| Fact | Detail |
|---|---|
| Full meaning | Linked certificates proving your site’s cert traces to a trusted root |
| Made up of | Root certificate, intermediate certificate(s), leaf certificate |
| Who sends what | Server sends leaf plus intermediates, root stays in browser/OS |
| Where verification happens | During the TLS/SSL handshake |
| What breaks if incomplete | Browser shows untrusted/insecure warning to visitors |
| Good tool to check chain | openssl s_client -showcerts, or DigiCert’s Certificate Utility |
| Fix for renewal issues | Automate renewal, many admins use ACME based tools |
I also want to add, based on what I read on r/sysadmin, automating your certificate renewal is a smart habit, since “ACME is the standard for commercial CA signed and internal certificate lifecycle management.” This way you don’t accidentally let a certificate in your chain expire and break the whole thing.
FAQ
Q: What is an SSL certificate chain in simple words? A: It is the group of linked certificates, root, intermediate, and leaf, that lets a browser trace your website’s certificate back to a trusted authority.
Q: Why do I need to send intermediate certificates too? A: Because your browser only stores root certificates by default. Without the intermediates, the browser cannot always connect your certificate back to that trusted root.
Q: What happens if my SSL certificate chain is broken? A: Visitors will usually see a not secure or untrusted warning, even if your own certificate is valid, because the full path cannot be verified.
Q: Can I check my SSL certificate chain myself? A: Yes, you can run openssl s_client -showcerts from command line, or use a free tool like DigiCert’s Certificate Utility to see your full chain.
Q: Does the order of certificates in the chain matter? A: Yes, order matters a lot. Your own certificate goes first, then each certificate that directly signed the one before it, moving up toward the root.
Final Words
So guys, this was my simple explanation of what is an SSL certificate chain. In short, it is not just one certificate, it is a full path of trust from your website’s certificate all the way up to a root that browsers already trust, and every link in that path has to be there for it to work. I have tried to cover what it is, why it matters, what breaks it, and how you can check yours. Keep on visiting my blog for more simple tech and SEO explanations like this one.
Sources
- Cloudflare SSL/TLS Docs – Concepts
- Sectigo – What Is the SSL Certificate Chain of Trust
- DigiCert Knowledge Base – Certificate Utility Check Server Feature
- r/devops – SSL/TLS explained, chain of trust
- r/devops – servers send leaf and intermediates
- r/devops – client trust verification
- r/explainlikeimfive – third party checked domain ownership
- r/AskNetsec – missing intermediate breaks validation
- r/AskNetsec – x509 URI extension for authority info access
- r/linuxadmin – certificate ordering and openssl command
- r/sysadmin – ACME standard for certificate lifecycle


