What Dependency Management Can Learn from Certificate Management?

Published: 10 Feb 2026

There was a time when certificate management was a constant source of outages. Not because TLS is complicated, and not because cryptography is fragile, but because someone had to remember to renew something. And humans are very bad at that.

The Certificate Horror Years

If you've been around long enough, you've probably seen at least one certificate outage. A production service goes down because a cert expired. It always happens at the worst time: at night, over a weekend, during a holiday, while everyone is travelling, or when the one person who knows where "that thing" lives is offline. Sometimes it's even worse because no one remembers creating the certificate in the first place. Then you get the classic moment of panic: where is this certificate actually used? Is it on a load balancer, a CDN, an ingress controller, a reverse proxy, a random VM that no one logs into anymore?

The pattern is boring because it repeats. One certificate gets forgotten, renewal doesn't happen, and the failure is visible to everyone. The "solution" is also boring. People add calendar reminders, maintain a spreadsheet, create a wiki page, or funnel renewal notifications into a shared inbox. It doesn't work reliably.

It doesn't fail because people don't care. It fails because manual security processes don't scale. Certificates are ruthless in the way they expose that. They expire on a fixed date, and when they fail, they fail hard. There is no partial outage and no "acceptable risk" discussion. Everyone notices immediately.

Certificates were one of the first areas where security failed loudly enough that excuses stopped working.

Why Certificate Management Had to Become Automated

Certificate management didn't improve because we got better at process. It improved because the ecosystem changed around a simple fact: if renewal is manual, outages are inevitable.

Let's Encrypt didn't just make certificates free. It made manual renewal indefensible. And ACME is the part people forget to name even though it's the real mechanism that changed everything. ACME turned certificate renewal into something you could treat like an API call: prove control of a domain, get a certificate, renew it on schedule, rotate it automatically, and do it again without a human SSH'ing into anything at 2am. Once you have an automation protocol that every tool can speak, "remember to renew" stops being a process problem and becomes an engineering problem. That shift is why short-lived certificates became realistic. It's also why renewal moved out of wiki pages and into load balancers, ingress controllers, CDNs, and pipelines.

Short-lived certificates made the situation worse before it made it better. Once certificates rotate frequently, you can't rely on memory, you can't "just be careful", and you can't pretend a spreadsheet will scale. You either automate, or you guarantee that production will break.

So the industry adapted. Certificates became cheap and disposable. Renewal became code. TLS moved into platforms such as CDNs, load balancers, and ingress controllers. Ownership became explicit.

Today, renewing certificates is boring, and boring is exactly what you want. No one debates whether to renew a certificate and no one risk-accepts expiry. You automate it, or your service breaks.

Dependency Management Is Where Certificates Used to Be

Now look at how we handle dependencies.

If this feels uncomfortably familiar, that's because it is. Dependency trees are large. Transitive dependencies are everywhere. Inventories are incomplete. People say things like "we think this service uses that library", and vulnerabilities are discovered long after the code shipped.

Log4j made this painfully concrete. When Log4Shell dropped in December 2021, teams everywhere faced the same certificate-era panic: where is this actually used? The answer was often "we don't know." Log4j was a transitive dependency, pulled in by other libraries, buried deep in dependency trees that no one had fully mapped. Organizations spent weeks hunting through codebases, container images, and vendor disclosures trying to answer a question that should have been trivial: do we use this library?

The response was chaotic precisely because dependency inventories were incomplete. And Log4j wasn't even a subtle vulnerability. It was loud, well-publicized, and actively exploited. The industry still struggled to respond quickly.

Then the usual pattern emerges: triage meetings, CVSS discussions, backlogs, and risk acceptance. This is certificate management from ten years ago, just less honest about failure.

The key difference is visibility. Certificates expire loudly. Vulnerabilities fail silently until they don't. There is no expiration date on a vulnerability. There is only the day someone weaponizes it.

Why Traditional Vulnerability Management Doesn't Scale

Traditional vulnerability management assumes humans can understand every vulnerability, prioritize correctly, and act fast enough. That assumption has never held at scale.

Attackers automated years ago. They automated discovery, exploitation, and target selection. Defenders responded with dashboards and meetings. We ended up in a situation where attackers operate at machine speed while defenders operate at meeting speed.

Certificates taught us that this gap doesn't close with better process. It closes when automation becomes mandatory. Dependency management is slowly being dragged toward the same model. Not because it's elegant, but because there is no alternative.

The direction is clear. Frequent dependency updates, like short-lived certificates. Auto-upgrades, like auto-renewal. Pinning treated as an exception rather than the default. Platform ownership rather than application-by-application heroics. Pipelines that fail fast rather than letting vulnerable versions sit quietly for months.

The winning approach is not "let's analyze every CVE" and it's not "let's manually review every upgrade." That approach already collapsed under its own weight. The winning approach is to update by default, automate everything that is routine, make exceptions explicit, and spend human time only on the weird cases.

Exactly like certificates.

The Real Cost Isn't If You Patch, It's When

This is the part people miss.

Teams treat patching as a binary choice when it's actually a cost-accumulation problem. Do we patch? Do we upgrade? Do we accept the risk? But the real decision isn't whether. It's when.

If there's one quote that applies here, it's: "If it hurts, do it more frequently."

People delay updates because they fear surprises. That fear makes sense. But the longer you wait, the bigger the surprise becomes.

If you bump dependencies regularly, you usually go from one minor version to the next. The surface area is small. Behavior changes are limited. Changelogs are readable. Tests usually tell you what broke. Most of the time, nothing interesting happens, which is the goal. It's exactly the same dynamic that made certificate renewal boring: renew often, change little, avoid drama.

Waiting turns small pain into big pain. "Let's skip this update for now" turns into multiple minor versions skipped, behavior changes stacked, deprecations finally removed, and assumptions silently invalidated. At that point, even a "minor upgrade" stops being minor. That's where teams get trapped. They start saying they can't update because it's too risky, that they need more time to test, and that they'll schedule it later.

Later doesn't get easier. Later just collects interest.

Certificates taught us the same thing. Postponing renewal doesn't make renewal safer. It just guarantees a worse failure later. Dependencies work the same way. Every skipped update increases the blast radius of the next one, makes root cause analysis harder, raises the cost of testing, and increases fear of touching the system at all. Eventually you end up with a system that's "too fragile to change." That's not stability. That's stagnation.

The goal isn't heroic patching during incidents. The goal is making patching uninteresting. Fast, continuous updates mean smaller diffs, fewer surprises, lower cognitive load, and easier rollback. Security scales when it's boring, and boring only happens when you do things early and often, not carefully and later.

Why This Is Harder Than Certificates

There is one important difference. Renewing a certificate almost never changes application behavior. Upgrading a dependency often does.

This is where fear enters: breaking changes, subtle behavior shifts, and hidden assumptions. That fear is rational, and it's the reason dependency automation stalled where certificate automation succeeded.

The blocker isn't tooling. It's understanding impact.

Where AI Actually Helps

AI is not here to "fix vulnerabilities." That framing is wrong and dangerous.

AI is useful because it reduces the cost of understanding change. It can trace code paths to see whether vulnerable code is reachable. It can summarize differences between dependency versions. It can explain behavior changes in plain language. It can draft upgrade pull requests with context.

This is exactly the kind of work humans hate doing. It's time-consuming, repetitive, and easy to get wrong when you're tired.

AI doesn't eliminate risk. It reduces uncertainty, which is what usually blocks action.

Humans Should Handle Exceptions, Not Routine Work

Certificate management worked once we accepted that humans should not be in the renewal loop and that humans should handle failures, not normal operation.

Dependency management is heading in the same direction. Humans shouldn't read every changelog, manually diff every release, or patch under pressure during an incident. Humans should review exceptions, make architectural decisions, and handle novel cases.

That's a much better use of expertise.

The Actual Lesson From Certificates

Certificates didn't get better because security teams tried harder. They got better because the industry accepted three uncomfortable truths: failure must be unacceptable, automation must be mandatory, and humans must deal with exceptions, not routine work.

Dependency management is following the same path, just later and under more pressure. AI doesn't change the destination. It shortens the time it takes to get there.

And the teams that learn from certificate management early won't look heroic. They'll look boring.

Which, in security, is usually a sign they're doing something right.

Photo of Louis Nyffenegger
Written by Louis Nyffenegger
Founder and CEO @PentesterLab