Watches the hierarchy
Roots, intermediates and issuing CAs, with expiry, CRL freshness and OCSP status on each. A revoked authority is forced critical on every sweep, from the recorded status rather than the last check.
CertPilot watches the CA hierarchy your organisation runs on, and every certificate under it, on one clock.
An expiring issuing CA takes down everything it ever signed, and no amount of certificate automation helps once that has happened.
So this watches authorities first and certificates second. Roots and intermediates are the objects whose failure is unrecoverable, and they are the ones nobody has a renewal script for.
Ten years on one screen, without losing next Tuesday.
On a linear axis, everything expiring inside a quarter collapses into the first two percent of the width. The certificate with four days left sits on top of the one with forty.
The plate above is logarithmic. Half the width is spent on the first ninety days, which is where every decision actually gets made, and a root valid until 2033 still has somewhere to sit.
Three tiers, and only one of them ends an estate.
A certificate is only as good as the path above it. Every tier is signed by the one before it, so an authority that lapses invalidates everything beneath it at once, whatever the expiry dates on those leaves happen to say.
Self-signed, and kept offline. It signs intermediates and nothing else. Long-lived enough that most teams never renew one, which is also why nobody has a procedure when the day arrives.
The working delegate. Keeping the root offline means this is what actually signs, and cross-signing here is what lets a hierarchy be rotated without redistributing a new trust anchor.
Signs the certificates your services actually present. This is the one that ends an estate: every leaf it ever signed stops validating the moment it lapses, and its own renewal is the one job no automation is watching.
A certificate, as CertPilot reads it.
Nine of those fields are description. Two carry a clock, and one of those two is the reason this product exists. Provenance cannot answer custody: a certificate signed from a CSR is requested like any other and CertPilot holds no key for it, so anything deciding whether a key can be exported has to read the custody field rather than infer it.
Roots, intermediates and issuing CAs, with expiry, CRL freshness and OCSP status on each. A revoked authority is forced critical on every sweep, from the recorded status rather than the last check.
Self-signed, ACME and HashiCorp Vault, each its own process speaking one gRPC contract. Adding a CA vendor does not mean touching the control plane.
A durable queue with leases and retries. No leader election, so any replica can run it, and a restart mid-renewal does not lose the job.
Order lives on the target and is copied onto the job when it is enqueued, so reordering cannot disturb a rollout already under way. A canary is one target in the lowest wave.
Network scans, Certificate Transparency logs, cloud inventory, and host agents that report the certificate sitting in a file behind two firewalls.
Every certificate records custody: CertPilot, an agent, or external. How it was discovered cannot answer that, and anything deciding whether a key may be exported has to read it.
Claims a PKI team can verify rather than take on trust.
Every entry carries a gapless sequence number, its predecessor's tag, and an HMAC over both, keyed from a subkey of the master key. An attacker holding only the database can alter a row and cannot forge a tag that agrees with it.
A row can never read revoked while the certificate still answers handshakes. The health sweep builds a real OCSP request and verifies the responder's signature, the delegation, and that the answer is about the right certificate.
Ed25519 is deterministic, so an identical request carries an identical signature. The core stores the ones it has accepted and refuses a repeat, with no protocol change and no clock to keep in sync.
Roles live in CertPilot's own table, keyed on issuer and subject. A claim in a token cannot promote anyone, and suspending an account ends every one of its sessions immediately.
The four that come up first.
A control plane you run, and a schema you apply deliberately.
The server never migrates itself. A schema change is something an operator runs, not a side effect of a replica restarting mid-deploy.