Skip to main content

    Root Certificate Expired? What Actually Breaks

    A root reaching its expiry date rarely breaks anything. Removal from a browser's trust store does, and that clock now runs on the CA key's age.

    MS
    My-SSL Team
    ·
    14 min read
    ·
    Published August 25, 2026
    ·
    Last updated August 25, 2026

    The short answer

    Three different events get called "the root expired", and only one of them reliably breaks a working certificate. A root passing its own notAfter date usually breaks nothing in an updated client, because a trust anchor is trusted for sitting in the trust store rather than for anything its own signature says. What does break certificates is removal from that store, and since both Mozilla and the Chrome Root Program now schedule removal by the age of the CA's key material, at roughly fifteen years from key generation for TLS, the date deciding your chain's future is not the one printed on the root. The USERTrust RSA root is the standard illustration: key material from 2010, a notAfter of January 2038, and a policy clock that ran out around 2025.

    Three separate root certificate events compared by what each one actually breaksThree panels. The first, root reaches its expiry date, is a date printed on the root certificate years in advance; updated clients that hold the root in their own trust store ignore it, and breakage is limited to clients whose only route runs through a cross-signed certificate the server sends. The fix is a server configuration change. The second panel, highlighted, is root removed from a trust store: a browser root program drops the root or refuses certificates issued after a cutoff date, live certificates start showing warnings on the published schedule, and the fix is a replacement certificate from a different hierarchy. The third panel is certificate authority rotates its hierarchy: the authority starts issuing from a new intermediate under a newer root, existing certificates keep working, and the next issuance arrives with a different intermediate that has to be installed. A footer notes that only the middle event breaks a certificate that is currently working.One phrase, three events, three very different consequences.1 · Root hits notAfterWHAT IT ISA date printed on the rootdecades in advance.WHAT BREAKSClients whose only routeruns through a cross-signyour server sends.Updated clients: nothing.WHAT YOU DOEdit the chain file.No new certificate needed.2 · Root store drops itWHAT IT ISA root program removes theroot, or sets a cutoff date.WHAT BREAKSLive certificates, on thepublished schedule, infully updated browsers.This is the urgent one.WHAT YOU DOReplace the certificatefrom another hierarchy.3 · CA rotates hierarchyWHAT IT ISThe CA starts issuing froma new root and intermediate.WHAT BREAKSNothing you have alreadyinstalled. The surprise isin the next issuance.Old chain file, new leaf.WHAT YOU DOInstall the newintermediate on renewal.Only the middle one turns a working certificate into a browser warning.Work out which event you are in before you order a replacement.
    Most panic about root expiry is really panic about the middle column. Ask which of the three has actually happened, and the response usually gets a lot cheaper.

    Three things get called "the root expired"

    The phrase covers a root certificate reaching the expiry date printed on it, a browser root program removing that root from its trust store, and a certificate authority moving new issuance onto a newer hierarchy. They arrive with similar-sounding advisories and they have almost nothing in common operationally. The first is usually a server configuration problem, the second is the only one that turns working certificates into browser warnings, and the third is a scheduling problem for your next renewal.

    Sorting them apart matters because the responses cost wildly different amounts. One is a five-minute edit to a chain file. One means every certificate under that hierarchy has to be replaced before a published deadline. One means remembering to install a different intermediate the next time you renew, and nothing else. Support queues fill up every time a root story makes the rounds, mostly with people about to buy a replacement certificate they do not need.

    It helps to be precise about what a root actually is. A root certificate is self-signed, so its signature proves nothing to anyone. It is trusted because a vendor put it in a list that ships with an operating system, a browser, a language runtime, or a device image. That list is the whole mechanism, which is also why one certificate can pass in Chrome and fail in Java on the same machine.

    Why an expired root usually breaks nothing

    A client that holds the root in its own trust store builds a path that ends at that root and stops. RFC 5280 describes the trust anchor as an input to path validation, a name and a public key supplied to the algorithm, rather than as another link that gets date-checked on the way past. Validation starts with the certificate the anchor issued. The anchor's own notAfter frequently never gets read at all.

    Implementations disagree about this, and the disagreement is the entire story of why one expiry is an outage for some users and a non-event for everyone else. Android is documented as deliberately not enforcing the notAfter of trust anchors, a choice Let's Encrypt later relied on to keep older phones working. Some older libraries take the opposite view, treating whatever chain the server sent as the chain to validate, expiry checks and all.

    Which leaves the real variable: what your server sends. Certificate authorities often supply a chain file containing an extra cross-signed certificate that points back to an older, more widely deployed root, so that devices without the newer root can still find their way to something trusted. That extra certificate is harmless while the old root is alive. On the day it expires, every client that was relying on it, and only those clients, starts failing.

    How two clients build different paths from the same chain sent by the same serverA diagram in two halves sharing one server. The server sends three certificates: the leaf for example.com, the issuing intermediate, and an extra cross-signed certificate that points back to an older root. On the left, an updated client already holds the current root in its own trust store, so it builds a short path from leaf to intermediate to that root, discards the extra cross-signed certificate, and never reads the older root's expiry date. This path is highlighted as the one that succeeds. On the right, an old client does not hold the current root at all. Its only route runs leaf, intermediate, cross-sign, older root, and when that older root passes its expiry date the path fails with a certificate error. A footer notes that both clients received exactly the same bytes from the same server, so the difference is in the trust store rather than in anything the server did wrong.Same server, same bytes, two different paths.Your server sendsleaf + intermediate + cross-signto every client, identicallyUpdated client, holds the current rootLeaf example.comIntermediateCurrent rootin the trust storeThe cross-sign isdiscarded. The pathstops at a root theclient already trusts.Result: valid.The old root's expiryis never even read.Chrome, Firefox, a current OS, a patched libraryOld client, never received the current rootLeaf example.comIntermediateCross-signOlder root, expiredThe cross-sign is theonly route it has toanything it trusts.Result: fails.Certificate error onthe day the rootpasses notAfter.The difference lives in the trust store, not in anything the server got wrong.
    This is why the same expiry produces a support queue full of "works for me". Removing the cross-sign from what the server sends fixes the right-hand column without touching the certificate.

    The practical consequence is worth stating plainly, because it saves people money: when only older clients break, the fix is almost always to remove the cross-signed certificate from the chain your server sends and reload. Nothing about the certificate on disk is wrong. Reissuing it changes nothing if the same chain file goes back into place. If the chain itself is unfamiliar territory, the walkthrough of intermediate certificates and broken chains covers how the pieces fit together.

    The date that matters is the key's birthday

    Root programs no longer decide a root's fate by the expiry date on the certificate. As of August 2026 the Mozilla Root Store Policy removes the websites trust bit once the CA key material is more than fifteen years past its generation date, and sets an S/MIME distrust date at eighteen years. The Chrome Root Program applies a comparable fifteen-year rule to key material in its own store. Roots are routinely issued with twenty-five or thirty year validity periods, so the policy clock now fires first, by a wide margin.

    Mozilla's own reasoning for the number is unusually legible. A new root typically takes two to three years to propagate into the major trust stores, and a certificate authority needs time at the other end to migrate customers off the old hierarchy before it can be dropped. Fifteen years from key generation leaves roughly a decade of ordinary working life in the middle. CA operators are urged to apply for inclusion of their next-generation root at least two years before the distrust date of the one it replaces.

    Two clocks on the same root certificate: the fifteen-year key age policy against the expiry date printed on the certificateA single timeline running left to right, using the USERTrust RSA Certification Authority root as a worked example. At the left, key material is generated in 2010 and the root certificate carries a not-before date of the same year. A few years later the root finishes reaching the major trust stores, which typically takes two to three years, and a period of everyday use follows. A highlighted marker around 2025 shows where the fifteen-year key age clock runs out under current Mozilla and Chrome root store policy, which is the point at which the root program begins removing the root regardless of its printed dates. Far to the right, greyed out, sits the expiry date printed on the certificate itself, January 2038, labelled as the date most people look up. A footer states the gap: roughly thirteen years between the date that decides the root's future and the date printed on it.A root has two clocks, and the printed one is the wrong one to watch.Worked example: the USERTrust RSA Certification Authority root2010key generatednotBefore~2 to 3 yearsreaches themajor trust storesabout a decade of everyday useKey age hits 15 yearsRoot programs start removing it~2025the date that decidesyour chain's future2038notAfter on theroot certificatethe date people look upabout 13 years apartAdd fifteen years to the key, not to the expiry date, and you get the real deadline.
    The arithmetic is deliberately boring, and it is the part almost nobody runs. A root with a 2038 date on it can still be scheduled out of the trust stores more than a decade earlier.

    Run the arithmetic on any root you depend on and the gap tends to be startling. Take the not-before date as a working proxy for key generation, add fifteen years, and compare that to the notAfter. For a root generated in 2010 with a 2038 expiry, the two answers are about thirteen years apart, and only the earlier one has any bearing on whether your certificates keep validating. This is also why several long-standing hierarchies from the same era have been working through trust store removal across 2025 to 2027 while their certificates still read as valid for another decade.

    None of this is something you have to manage yourself under normal conditions. Your certificate authority is the party obliged to have a successor root in the stores well ahead of the deadline, and a well-run one has been issuing from it for years by the time the old one goes. It matters when you are choosing a certificate authority, or when someone pins to a root, which is where pinning quietly turns a routine migration into an outage.

    What actually broke in 2020 and 2021

    Two root expiries produced most of the folklore on this subject, and both broke the same way. The AddTrust External CA Root expired on 30 May 2020, and DST Root CA X3 expired on 30 September 2021. In each case browsers on updated systems were unaffected, while a scattering of servers, scripts, embedded devices and payment integrations failed on the day. The cause both times was chain building rather than the expiry itself.

    AddTrust had been cross-signing the newer USERTrust root so that devices predating USERTrust could still validate. Any client holding USERTrust directly simply built the shorter path and discarded the cross-sign, which is why every current browser sailed through. Clients built on older OpenSSL 1.0.x, and some GnuTLS and Java builds, followed the chain the server sent all the way to AddTrust and refused it. The fix Sectigo published was to stop serving the cross-signed certificate.

    DST Root CA X3 was the same shape with a twist worth knowing. IdenTrust had cross-signed ISRG Root X1 so that Let's Encrypt certificates would validate on old Android devices, and Let's Encrypt arranged for that cross-sign to remain valid past the expiry of the root that issued it. That works only because Android ignores trust anchor expiry, and it bought several years of compatibility for phones that will never receive another trust store update. The arrangement ran out in 2024.

    The lesson people took away was "roots expiring breaks the internet". The more useful one is that a cross-signed certificate is a compatibility crutch with an end date, and leaving it in your chain after it stops helping converts it into a liability. Both incidents were, for the overwhelming majority of affected sites, a one-line change to a chain file.

    Distrust: the event that does break certificates

    Distrust is a root program deciding it will no longer accept a hierarchy, and it is the only one of the three events that turns a valid certificate in a fully updated browser into a warning. It arrives on a published schedule rather than on a date printed in the certificate, it can be triggered years before any expiry, and there is no configuration change that works around it. The certificate has to be replaced.

    It comes in two flavours. Scheduled removal is the fifteen-year key age rule above, which the certificate authority sees coming from a decade away and normally handles without customers noticing. Removal for cause is the other kind: Chrome's action against Entrust is the reference case, where certificates whose Signed Certificate Timestamps were dated after 11 November 2024 stopped being trusted, while those issued before the cutoff kept working until they expired. Google cited a pattern of compliance failures over several years.

    That date-scoped design is deliberate and worth understanding, because it explains why a distrust announcement is urgent without being instant. Nothing on your server stops working the day the announcement lands. What stops is your ability to get a usable certificate from that hierarchy, so the pressure sits on your next renewal rather than on your current one. Organisations that treated the Entrust announcement as a slow-moving deadline generally came through it fine; the ones that had no inventory of which certificates came from which authority did not.

    A related current of policy is pushing the same way. Chrome's root program is steering hierarchies toward serving TLS server authentication alone, with dates through 2026 and 2027 tightening what a certificate under a trusted root may contain, the same movement that produced the removal of client authentication from public TLS certificates. Multi-purpose roots from an earlier era are being retired on those grounds as much as on age.

    When your CA moves to a new hierarchy

    Hierarchy rotation is the certificate authority's response to everything above, and it is the event you are most likely to encounter. New issuance moves to a fresh intermediate under a newer root, existing certificates keep validating exactly as before, and nothing on your server changes until you next renew. The surprise lands on renewal day, when the new certificate arrives expecting a different intermediate than the one already installed.

    The classic failure is an automation pipeline that installs the new leaf alongside a chain file someone saved years ago. The leaf is valid, the chain no longer leads anywhere, and the site starts serving an incomplete chain that some clients tolerate and others reject. Because it works in the browser the person testing happens to use, it often survives into production and gets found by an API client instead. Pull the chain from the issuance each time rather than from a file in a repository.

    This is also where the choice of certificate authority stops being abstract. Migrating an estate is far easier with an authority that publishes its hierarchy plans in advance and issues from a current root well before it has to, which is worth weighing when you compare how the major certificate authorities differ. Our own SSL certificates from Certum are issued from Certum's current publicly trusted hierarchy, and the chain that ships with each order is the one to install rather than whatever an old runbook says.

    How to check which root you chain to

    There are two different questions here and confusing them wastes an afternoon. The first is what your server sends, which is fixed and inspectable. The second is what a given client builds from it, which depends on that client's trust store. Answer them in that order, because most root-related incidents are explained entirely by the first.

    For what the server sends, ask it directly:

    What you want to knowHow to ask
    Every certificate the server sends, in orderopenssl s_client -connect example.com:443 -servername example.com -showcerts
    Subject and issuer of each one, without the noise... | openssl crl2pkcs7 -nocrl -certfile /dev/stdin | openssl pkcs7 -print_certs -noout
    The validity dates on a single certificate fileopenssl x509 -in cert.pem -noout -dates -subject -issuer
    Whether a specific old client agrees with youcurl -v --cacert /path/to/that/client/bundle.pem https://example.com/

    Three things are worth looking for in that output. A certificate whose subject and issuer are identical is a root, and it should not normally be there at all. A certificate that names an issuer nothing else in the list matches is your cross-sign. And the last certificate in the list is the one whose expiry date an unforgiving client will care about. If you would rather read it back as a summary than parse OpenSSL output, our SSL checker returns the leaf, the chain and the days remaining from a hostname.

    For the second question, test on the platform that complained rather than on your laptop. A Java client validates against a cacerts file that only moves when the JDK does, Node and Python and curl each read bundles of their own, and an embedded device may be carrying a trust store frozen at manufacture. Reproducing the failure on the right trust store is usually the moment the diagnosis becomes obvious.

    What to fix, in the order it matters

    Work from the symptom to the event, then from the event to the fix. If current browsers are fine and only older clients fail, you have a chain-building problem and the answer is a server configuration change. If current browsers show a warning too, check whether the browser vendor has published a removal or a cutoff date for that hierarchy. That single question separates a five-minute edit from a certificate replacement programme.

    A decision tree that turns the symptom you are seeing into the root event behind it and the fix that appliesA decision tree starting from the question of whether current browsers on current operating systems show the error. If only older clients, embedded devices or older libraries fail while current browsers are fine, the diagnosis is a chain-building problem caused by a cross-signed certificate the server sends, and the fix is to remove that certificate from the chain file and reload the server. If current browsers also show a warning, the next question is whether the browser vendor has published a removal or a cutoff date for the issuing hierarchy. If it has, the diagnosis is distrust, the highlighted branch, and the fix is a replacement certificate issued from a hierarchy that is still trusted. If it has not, the diagnosis is an ordinary chain or expiry problem on the certificate itself, and the fix is to check the leaf's own dates and the intermediate the server is sending. A footer notes that the first question separates a configuration change from a certificate purchase.Start with who is failing, not with what the error says.Do current browsers show the error too?Test on an up-to-date OS, not the device that complainednoChain building, not expiryOld clients are following across-sign to a dead root.FIXDrop it from the chain file,reload the server.yesHas the vendor published a removalor a cutoff date for this hierarchy?yesDistrustThe certificate is fine and theissuer is the problem.FIXReissue from a trusted hierarchy.noOrdinary chainor expiry faultFIXCheck the leaf's owndates and theintermediate sent.The first question decides between a config change and a purchase.Answer it before anyone opens an order form.
    Worth running before the escalation, because the left branch and the gold branch have completely different costs and completely different timelines.

    Beyond the immediate incident, three habits stop this class of problem from recurring. Send the leaf and the intermediates needed to reach a trusted root, and nothing else, no root certificate, and no cross-sign that no longer earns its place. Take the chain from each issuance rather than from a file someone saved, so a hierarchy rotation lands automatically. And keep an inventory of which certificates come from which authority, because that inventory is the only thing that makes a distrust announcement a scheduling exercise instead of a scramble.

    One habit not to adopt: pre-emptively replacing certificates because a root made the news. Almost every root story in circulation is either the harmless first event or a scheduled removal your certificate authority handled years ago. Establish which of the three you are actually in, and most of the time the answer costs nothing at all.

    FAQ

    Frequently Asked Questions

    Get instant answers to common questions about SSL certificates and our services.

    Still Have Questions?

    Our SSL experts are available 24/7 to help with any questions about certificates, installation, or technical issues.

    See the chain your server is actually sending

    Most root-expiry incidents are settled by reading the chain rather than by reasoning about it. Entering a hostname returns the leaf, every intermediate the server sends and the days remaining, which is enough to tell a stray cross-sign from a genuine problem. It takes a few seconds and needs no account.

    Check a certificate chain with the SSL checker