practice

Trust Bundle Rollout Order

also called CA Rotation Sequencing, Trust-Before-Issuance Rule

The rule that a new certificate authority is distributed to every verifier before anything is signed by it and removed only after the last certificate it signed has expired - reversing the order produces a delayed outage whose size grows as certificates renew.

pkica rotationmtlstrust storerollout

At 03:12 on a Sunday, 6% of internal service calls begin failing TLS handshakes with unknown-authority errors. The rate climbs over four hours to 40% and then plateaus. No deployment happened; a certificate authority rotation was completed on Friday.

That shape is the signature. The rotation switched the issuing authority, so each workload that renewed its leaf certificate began presenting one signed by the new authority, while some verifiers still held only the old root. The failing population is the cross product of "has already renewed" and "has not yet been updated", and it grows as renewals proceed.

The rule that prevents it is one sentence: trust is distributed before it is used and withdrawn after it stops being used. Both halves matter, and both are routinely got wrong in opposite directions.

Why it matters

The blast radius is delayed and self-propagating, which makes it the hardest failure shape to attribute. Certificate renewal is a background process that changes behaviour with no deployment, so the outage arrives hours or days after the change and the change is not in anyone's recent-events list.

It is also a failure that converges on total. Unlike a bad deploy, which is at its worst immediately and then rolled back, this one gets worse on its own as the presenter population rotates - and rolling back the issuer does not fix the certificates already issued.

Finally, it generalises. The same ordering governs JWT signing keys published through a JWKS endpoint, SSH certificate authorities, code-signing roots and any mutual-authentication scheme with a distributable trust anchor. Learn it once and it applies everywhere.

Implementation patterns

  1. Add the new root and intermediate to every verifier's trust store, trusting old and new at once. Purely additive, no behaviour change, therefore safe to roll out slowly.
  2. Gate on coverage, not on elapsed time. Export a per-workload trust-bundle version or fingerprint as a metric and require the minimum across the fleet to be the new bundle before proceeding. This gate is the control; everything else is sequencing.
  3. Switch issuance to the new authority. Leaves now chain to a root everyone already trusts, so the change is invisible.
  4. Wait out the longest leaf lifetime plus margin - with 24-hour certificates, at least 48 hours - so nothing signed by the old authority remains in use.
  5. Remove the old root last, after confirming no certificate in the fleet still chains to it.
  6. Keep the window short but not zero. Dual trust means two authorities can issue certificates your fleet accepts, so the old key must remain protected until it is removed.
  7. Alert on handshake failures by presented issuer, which converts a vague "TLS errors" page into the diagnosis.

Industry example

Every serious workload-identity system builds this ordering in rather than leaving it to a runbook. SPIFFE-based deployments and cloud private-CA services expose bundle distribution as a first-class object precisely so that trust propagation can be observed before issuance changes, and service-mesh documentation has carried explicit root-rotation procedures since 2017 that follow the same five steps. The public web does the same thing on a longer timescale: new roots are shipped in browser and operating-system trust stores for years before certificates chaining to them are issued widely, which is why cross-signing exists.

Failure scenarios

  • Issuance switched first. The case above: a climbing, plateauing failure rate attributed to anything but Friday's change.
  • Old root removed too early. Certificates signed by it are still live, so the failure appears immediately and affects everything that has not yet renewed - the mirror image of the first failure.
  • Coverage assumed from the configuration system. The push is recorded as successful; a subset of workloads has a cached bundle, a baked-in image, or a sidecar that reads the trust store only at start-up.
  • Baked-in trust stores. Containers that ship a trust bundle in the image cannot be updated without a rebuild and redeploy, so the gate in step 2 can never be satisfied for them. Finding this is the point of the gate.
  • Clock skew. A verifier whose clock is hours behind rejects a correctly issued certificate as not yet valid, producing the same error class from a different cause.
  • Pinned leaf or intermediate certificates in a client or a partner integration, which bypass the trust store entirely and fail whatever order you use.

Trade-offs

Choose Gains Pays
Long dual-trust window Slow, safe propagation; stragglers found before they matter Two authorities can issue accepted certificates for longer; the old key must stay protected
Short dual-trust window Minimal period of dual issuance Requires genuinely reliable bundle distribution and a real coverage metric

The cost that is easy to miss: the coverage metric itself has to be built, and it is the only part of the practice that cannot be improvised during the change.

When not to use it

Where there is no distributable trust anchor to stage. A system verifying certificates against a public trust store inherits the operating system's rotation and has nothing to sequence.

Where certificates are pinned by fingerprint - some device fleets and partner integrations - the staged order does not help, and the migration is a coordinated client update instead. Know which of your consumers pin before planning.

And in a genuine key-compromise emergency, the order inverts: the compromised root must be removed immediately and the outage accepted, because continuing to trust it is worse. That is a different procedure, and it should be written down before it is needed rather than improvised.

Interview question

Q: You must rotate the internal certificate authority that issues workload certificates for 400 services with 24-hour lifetimes. Walk me through the sequence, the gate between the steps, and how you would know it had gone wrong.

What a strong answer covers: the ordering - distribute, verify coverage, switch issuance, wait out the longest lifetime, remove the old root · the coverage metric as the gate, and why elapsed time is not a substitute · the 12 to 24 hour convergence implied by renewal at half of a 24-hour lifetime, and therefore a 48-hour margin · the failure signature of the wrong order, a climbing then plateauing unknown-authority rate with no deployment to blame · alerting on handshake failures by presented issuer and on minimum trust-bundle version · the specific stragglers to expect, including baked-in trust stores and start-up-only readers · and the emergency case, where the order inverts and the outage is accepted.

Quick check

Quiz: Why does a certificate authority rotation done in the wrong order produce a failure that climbs for hours rather than appearing at once? Because leaves are re-signed by the new authority only as each workload renews, so the population presenting untrusted certificates grows with the renewal schedule and plateaus when renewal completes.

Flashcard: What is the gate between distributing a new root and issuing from it? - A per-workload trust-bundle version metric showing 100% fleet coverage; elapsed time since the push is not evidence, because baked-in stores and start-up-only readers never receive it.