Root and intermediate certificate authorities
A root CA is a self-signed certificate that lives in your operating system's trust store and acts as a trust anchor. An intermediate CA is signed by the root and does the day-to-day work of issuing certificates. The split exists so the root's private key can stay offline: if an intermediate is compromised it can be revoked and replaced without every operating system and browser on earth needing an update. Servers must send their intermediates and must not send the root, because clients that trust the root already have it.
The hierarchy #
Root CA self-signed, in your trust store, key kept offline
|
+-- Intermediate CA signed by the root, key online, does the issuing
|
+-- example.com the certificate your server presents Telling them apart #
openssl x509 -in root-ca.crt -noout -subject -issuer Expected output
subject=C = US, O = Example CA, CN = Example Root CA issuer=C = US, O = Example CA, CN = Example Root CA
openssl x509 -in intermediate.crt -noout -subject -issuer Expected output
subject=C = US, O = Example CA, CN = Example Intermediate CA issuer=C = US, O = Example CA, CN = Example Root CA
Both have CA:TRUE, so that alone does not tell you which is which:
openssl x509 -in intermediate.crt -noout -ext basicConstraints Expected output
X509v3 Basic Constraints: critical CA:TRUE, pathlen:0
pathlen:0 is worth noticing — it means this CA may issue end-entity certificates but may not
create further CAs beneath it.
Why the split exists #
A root private key is the most valuable object in the system. Anyone holding it can issue a certificate for any hostname on the internet, and every browser will accept it. So roots are generated in a ceremony, stored in hardware security modules, and kept physically offline.
If roots signed server certificates directly, that key would have to be online and used thousands of times a day. Instead the root signs a handful of intermediates once, and the intermediates take the operational risk.
The consequence that matters: a compromised intermediate can be revoked. Browsers and operating systems distribute revocation for intermediates routinely. A compromised root cannot be handled that way — it would require an update to every device, and devices that no longer receive updates would be stranded.
What the server sends #
| Certificate | Server sends it? | Why |
|---|---|---|
| Leaf (yours) | Yes | It is the identity being presented |
| Intermediate | Yes | The client has no other way to get it |
| Root | No | Trusting clients have it; others gain nothing |
cat certificate.crt intermediate.crt > fullchain.crt Omitting the intermediate is the most common TLS misconfiguration there is — see unable to get local issuer certificate.
Cross-signing #
An intermediate is sometimes signed by more than one root, so that older devices which only trust an old root and newer devices which trust a new one both build a valid path. This is how a new CA bootstraps trust on devices that will never receive a software update.
The practical consequence is that one certificate may have more than one valid chain, and different clients may build different ones. A chain that validates on your laptop can still fail on an old Android device.
Running your own #
The same structure works for an internal PKI, and for a small one the extra layer is often not worth it — signing directly from the root is simpler and the offline-root benefit only materialises if you actually keep it offline.
Frequently asked questions
- How do I tell a root from an intermediate?
- Compare subject and issuer. A root's are identical — it signed itself. An intermediate's issuer names the certificate above it. Both carry
basicConstraints CA:TRUE, so that field does not distinguish them. - Why does my server need to send the intermediate?
- Because clients only have roots. Without the intermediate, the client cannot connect your certificate to any root it trusts, and verification stops with error 20.
- Should the root be in my server's chain file?
- No. Clients that trust it already have it, so sending it wastes bandwidth on every handshake. Clients that do not trust it gain nothing from receiving it.
- What happens when a root expires?
- Everything under it stops validating, which is why roots are issued with 20-year-plus lifetimes and replacements are distributed years ahead. The Let's Encrypt DST Root CA X3 expiry in 2021 broke a large number of older devices for exactly this reason.
References
- RFC 5280: X.509 and CRL profile — the specification every field on a certificate comes from
- Mozilla CA certificate policy — the rules behind what reaches a browser trust store