Blog Article

47-Day TLS Certificates in 2029: What It Really Changes for Your CI/CD Pipelines

June 3, 2026
18 min read

Published on

June 3, 2026

The Math: Why 47 Days Breaks Human-Led Renewal

The CA/Browser Forum ratified SC-081v3 in April 2025. The ballot phases the maximum validity of publicly trusted TLS/SSL certificates from 398 days down to 47 days on a four-step calendar: 200 days starting 15 March 2026, 100 days starting 15 March 2027, and 47 days starting 15 March 2029.

Subject Information — the domain validation reuse window — is squeezed in parallel, from 398 days today to 10 days by March 2029. That second number is the one most program managers miss when they spreadsheet the impact, and it is the one that breaks every existing renewal job that batches validation overnight.

Run the arithmetic on one certificate. A 47-day cert renewed at the 33-day mark (two weeks pre-expiry, the buffer most outage post-mortems converge on) means a renewal every 33 days. That is roughly 11 renewal cycles per certificate per year, against the 1 cycle a 398-day cert delivers today.

For a mid-size estate of 5,000 publicly trusted certificates — not a hyperscaler, just a typical regulated enterprise with a few hundred public hostnames, an API gateway fleet, and a handful of mobile back-ends — that is 55,000 successful ACME orders per year, or about 150 per day, every day, including the Saturday before Christmas. A 0.5 percent failure rate is now 275 broken certificates a year, more than five per week. At 1 percent it is one production-facing outage every working day.

The headline shift from 398 to 47 days is not a 8.5x increase in renewal frequency; once you account for buffers and DCV reuse it is closer to 11x.

The 14-day pre-expiry buffer deserves its own paragraph. SREs do not pick it arbitrarily — it absorbs the worst-case combination of a failed renewal, a paging delay over a weekend, a DNS propagation hiccup, and the time it takes an on-call engineer to reach a laptop. On a 398-day cert, 14 days of buffer is 3.5 percent of the lifetime; missing renewal on day 384 and recovering on day 397 is unremarkable.

On a 47-day cert, 14 days of buffer is 30 percent of the lifetime; the first renewal attempt has to succeed at day 33, and an on-call engineer who notices a stuck order on day 41 has six days, not 60, to fix it. Anything that used to be silently absorbed by the cert’s long tail — a one-off ACME rate-limit hit, a DNS-01 challenge that did not propagate, a load balancer that did not pick up a new chain — will now page.

Then comes the mTLS multiplier. A single user-facing TLS endpoint hides a fan-out of internal connections. Behind one ingress controller you might have 40 microservices using mutual TLS, each presenting a client cert, each requiring the issuing CA, the trust bundle, and the leaf to stay in sync. Cilium, Istio, Linkerd, and Consul Connect all rotate sidecar certificates at hour or day granularity already, so the service mesh layer is generally fine.

The pain is on the things that are not mesh: an internal Kafka cluster with 18 brokers and 240 producer clients, a Postgres primary with 12 replicas and 80 application service accounts, a homegrown gRPC service that hard-codes a JKS path. Each one becomes a renewal target on the same cadence as the public estate, even though it is invisible to web scanners. Most certificate inventories double when you start counting the mTLS leaves; the renewal calendar triples.

Where Your Pipeline Silently Depends on Long-Lived Certs

If your CI/CD pipeline still treats certificates as static configuration, the 47-day calendar will surface every dependency you forgot you had. Start with Helm. A Helm chart that ships a `tls.crt` and `tls.key` under `templates/secret.yaml` is a chart that will be re-released every 33 days, forever, just to push a renewed leaf. Either you decouple the secret from the chart (the right answer: cert-manager issues into a Kubernetes Secret that the chart references but does not own), or you accept that every chart version bump now carries a credential rotation. The same applies to Kustomize overlays with embedded PEMs and to SSL certificates baked into ConfigMaps for backward compatibility with older sidecars.

Terraform is worse, because it makes the coupling invisible. A common pattern is to declare an aws_acm_certificate resource alongside the load balancer that consumes it. ACM with DNS validation is fine. The pattern that breaks is the tls_self_signed_cert resource used to bootstrap an internal CA, or the aws_iam_server_certificate uploaded from a PEM stored in a private module. Either creates state-drift every renewal cycle: Terraform sees the cert change out of band and either tries to revert it or marks the entire resource for replacement. At 47 days that is a forced apply every month on resources that should be stable.

Move the cert out of Terraform into ACM, cert-manager, or your certificate lifecycle platform, and have Terraform reference it by ARN.

AMIs and container images are the worst offenders, because they encode the lifetime of the cert into the lifetime of the artifact. A golden AMI built quarterly with a baked-in CA bundle was acceptable when leaves lived a year. With 47-day leaves and chain changes propagating faster (intermediates rotate too), an AMI built on day 1 of a quarter has a stale bundle by day 14 and a missing intermediate by day 60.

The right move is to bake nothing crypto-specific into the image and fetch the trust store from a sidecar, an init container, or a systemd timer that pulls from a managed source. The same logic applies to Docker images that COPY ca-certificates.crt at build time — pull at runtime instead, or use the OS package manager’s daily update window.

Then there are the legacy fingerprints. Ansible vaults pinning a server cert by SHA-256 fingerprint. Monitoring scripts that probe openssl s_client -connect and grep for an expected issuer CN. iOS apps with NSPinnedDomains referencing a public-key hash. Java clients with a hard-coded X509TrustManager override comparing fingerprints. Every fingerprint is a 47-day time bomb after March 2029.

The mitigation is to pin to the public key of an intermediate or the SPKI of a backup key, not the leaf — but you have to find every pin first. git grep -r sha256- across the monorepo is a good starting point; it usually returns more results than the security team expects.

The dependencies that bite hardest are the ones nobody documented:

  • Java keystores (cacerts, keystore.jks) bundled with a JAR and unpacked into $JAVA_HOME/lib/security/ at deploy time. JDK 21 finally supports automatic trust-store reload; JDK 8 and 11 do not.
  • OpenSSL SSL_CTX objects loaded at process start, never reloaded. Nginx reload handles this; HAProxy needs set ssl cert over the runtime API; many custom Go services hold a single *tls.Config for the process lifetime.
  • Mobile apps with cert pinning released through an app store. The review cycle is 24 to 72 hours and you cannot force users to update. A 47-day pin update has to ship at least 30 days before the next rotation, which constrains your release calendar.
  • Embedded firmware with a hard-coded root in flash. If the vendor cannot rotate, the device becomes a brick on the day the root expires.

ACME Everywhere — When It Is Possible, When It Is Not

The ACME protocol standardized in RFC 8555 is the only realistic answer for high-frequency renewal. It works in production today against Let’s Encrypt, Google Trust Services, ZeroSSL, and most commercial CAs. The mechanics are well documented: an account key, an order, a challenge (HTTP-01, DNS-01, or TLS-ALPN-01), a finalize call, and a download. Implementations like cert-manager, acme.sh, lego, Caddy’s built-in CertMagic, and Traefik’s ACME provider handle this correctly.

None of them break under 47-day cadence; the rate-limit math (Let’s Encrypt allows 300 new orders per 3 hours per account, 50 duplicate certificates per week per FQDN) easily covers an 11x renewal frequency for any realistic estate, provided each cert is renewed at 33 days, not chased on day 46.

Where ACME breaks down is at the boundaries. Public TLS termination on a managed load balancer (AWS ALB, GCP HTTPS LB, Azure Application Gateway) is solved — the cloud provider handles ACME for you when you bring DNS into their zone, returning an HTTP 202 on order submission and a 200 on finalize.

Internal services on a service mesh are solved — cert-manager with an internal internal CA (a Vault PKI secret engine, a CA-as-a-service, or your enterprise CA exposing an ACME endpoint via something like step-ca) issues SVIDs on demand. The problem starts when you leave the application tier.

Take control of your PKI infrastructure

See how Evertrust simplifies certificate lifecycle management.

Devices and appliances are the canonical hard case. A 2019 F5 BIG-IP cluster, a 2017 Citrix NetScaler ADC, a Palo Alto firewall terminating SSL inspection, a fleet of Cisco WLCs presenting captive-portal certs — almost all of them speak SCEP or a vendor-specific REST API, not ACME. F5 added ACME support in TMOS 17.5 (2024) for HTTP-01 challenges only; DNS-01 is still vendor-orchestrated. NetScaler’s ACME story arrived with version 14.1 build 25 and only against named CAs.

Most appliances’ ACME support is “the box can fetch its own cert from Let’s Encrypt for its management interface”, which is not the use case enterprises actually have — they want a public ICA to issue a chain into the appliance for production traffic.

The gap is filled by a controller that runs ACME on the appliance’s behalf and pushes the resulting material over the appliance’s native API: iControl REST for F5, NITRO for Citrix, PAN-OS XML API for Palo Alto. Building this controller is a quarter of work; buying it is a procurement cycle.

Vendor-supplied middleware is the other category. Old SAP Web Dispatchers, IBM Datapower XG45s, Oracle iPlanet Web Servers, anything with a Java keystore manipulated through a vendor GUI. Most do not have an ACME client and never will.

They have to be wrapped by an external automation that does the ACME dance, transforms the result into the vendor’s format (PEM to PKCS#12 with a specific friendly-name, JKS with a specific alias, a PSE file for SAP), and pushes it through whatever API the vendor exposes — or, in the worst cases, an SSH-based deploy hook that runs the vendor’s CLI. This is unglamorous integration work and it is the bulk of the program.

Internal Services: The Rotation Problem Most Teams Ignore

Public TLS gets the headlines; internal TLS is where the operational debt sits. An enterprise that has 800 public hostnames probably has 20,000 internal TLS endpoints, most of them mTLS.

The CA/B Forum ballot does not force internal cadence to 47 days — the rules apply only to publicly trusted certs — but the trajectory is unmistakable, and several frameworks already nudge that way. NIST SP 800-52 Rev. 2 recommends short lifetimes for server certificates. CNSA 2.0 expects machine identities to rotate frequently. The internal estate will follow the public one, just on a 12 to 18 month lag.

A service mesh handles its own rotation. Istio rotates workload certs every 24 hours by default through SDS, with a hard expiry at 90 days. Linkerd is similar. SPIFFE/SPIRE issues SVIDs with 1-hour lifetimes and renews at 30 minutes. If your workloads live behind a mesh sidecar, the 47-day discussion is moot for them — you are already past it. The problem is what is not behind the mesh.

Kafka is the worst single source of rotation pain in most estates. A broker keystore is a JKS file referenced by ssl.keystore.location in server.properties. Reloading it requires either a broker restart or, on Kafka 2.5+ with KIP-519, an alterConfigs call against a describe-only configuration. Even with KIP-519, every producer and consumer client has its own keystore and its own reload story — most Java clients require a process restart, which means a 33-day rolling restart cycle across hundreds of application instances.

Postgres is similar: SELECT pg_reload_conf() picks up new ssl_cert_file contents, but the libpq client side caches the bundle until reconnect.

RabbitMQ requires rabbitmqctl eval 'ssl:clear_pem_cache().' after rotation, or the new cert is ignored until the process restarts.

Database TLS is where the mTLS multiplier really hurts. A Postgres cluster with a primary, two synchronous standbys, four async replicas, twelve readonly replicas for analytics, plus PgBouncer in front of each, plus 200 application service accounts each presenting a client cert — that is one cluster with hundreds of certificates rotating on the same 33-day cycle. The orchestration question is no longer “how do I rotate” but “in what order, with what overlap, with what rollback”.

The correct pattern is dual-cert acceptance: the server trusts both old and new chains for the duration of the rotation window, clients are migrated one at a time, and only after every client has presented the new cert is the old root removed from the server’s trust store. This is operationally identical to a TLS chain swap and is the single thing every internal-services owner needs to learn before March 2029.

Internal API gateways deserve a footnote. A Kong, Tyk, Envoy front proxy, or Spring Cloud Gateway sitting between mesh and non-mesh workloads is usually both a client and a server. Its upstream certs (used to call internal services) and its downstream certs (presented to clients) rotate on different schedules driven by different teams. Co-ordinating these without a central automated certificate management system means at least one team will be doing manual swaps every other week.

Observability: Detecting Renewal Failures Before They Page

You cannot fix what you cannot see. The single largest predictor of certificate outages under a 47-day regime is whether the team has instrumented the renewal process itself, not just the endpoint. Most teams have endpoint TLS expiry monitoring — a Blackbox Exporter probe or a Datadog SSL check that pages when cert_age < 7 days. That is necessary but insufficient. By the time the endpoint check pages, the renewal job has been failing silently for weeks.

The instrumentation that matters lives one layer down. Start with the ACME order outcome — every order should emit a structured event with the order URL, status, FQDN list, validation method, and finalize duration. cert-manager exposes this as certmanager_certificate_ready_status and the controller logs (look for Order failed with status 400 or 429).

At order volume the metric to alert on is the ACME failure rate per CA per hour, with thresholds tuned per CA: Let’s Encrypt’s rate limits return HTTP 429 with urn:ietf:params:acme:error:rateLimited, an internal CA tends to return 503 when its database is degraded, and a misconfigured DNS-01 deploy returns 400 with incorrectResponse. The error taxonomy is in RFC 8555 Section 6.7.

Want to master certificate management?

Browse our resources on PKI best practices.

Then build a certificate age histogram across the estate. Export (now - notBefore) / (notAfter - notBefore) as a gauge per certificate. A healthy 47-day estate has a distribution centered around 0.5 (renewed at the midpoint) with a tight tail. A bimodal distribution — some certs at 0.3, others at 0.9 — means automation is failing for one cohort and being caught by a human for the other. A long tail beyond 0.95 is the population about to outage. This is the single most useful chart to put on the platform team’s wall display; it predicts incidents three weeks before they happen.

Chain mismatch detection is the third pillar. A correctly renewed leaf with a stale intermediate is one of the most common silent failures. Browsers will fix it (they use AIA fetching), but server-to-server clients with strict trust stores will fail with UNKNOWN_CA or unable to get local issuer certificate. The check is mechanical: every endpoint scan should record the full chain served, compare against the chain expected for that issuer, and alert on divergence.

openssl s_client -connect host:443 -showcerts piped through a small parser is enough; the commercial scanners do this natively. Add an alert for any leaf whose AIA caIssuers field points to a URL returning HTTP 404 or 500 — that means the chain is unreconstructable from external clients.

The fourth signal is renewal lag: time between scheduled renewal and successful deployment. Under a 47-day regime, a renewal lag exceeding 4 days for more than 5 percent of the fleet is the early warning that operational capacity is being exceeded. Track it as a percentile (p95, p99) and tie it to a runbook that escalates when p95 > 72 hours.

Building a 2-Year Transition Runway: 2027 to 2029

The mistake teams will make is treating each calendar step as an isolated project: a sprint for 200 days in 2026, a sprint for 100 days in 2027, a sprint for 47 days in 2029. The correct approach is to design for 47 days from the start and treat 200 and 100 as integration tests. The CA/B Forum’s calendar is in fact your free dress rehearsal: any breakage that appears at 100 days will appear catastrophically at 47.

The runway breaks into eight quarters. Q1 2027 — inventory and gap analysis. Run shorter certificate lifespan impact assessment against every system. Catalogue every endpoint, every keystore format, every reload mechanism, every pinned fingerprint. Tag each with one of three states: ACME-native, ACME-controllable (vendor API exists), manual-only. The third bucket is your migration backlog.

Q2 2027 — ACME for public TLS, end-to-end. By end of quarter, 100 percent of public-facing certificates must be on ACME with at least 1 successful 100-day renewal observed in production. Build the observability stack in parallel.

Q3 2027 — CI/CD detox. Pull every cert out of Helm charts, Terraform state, AMIs, and container images. Establish the runtime-fetch pattern as the only acceptable shape. Migrate all internal CAs to expose an ACME endpoint — step-ca, Vault PKI 1.11+, or a commercial offering.

Q4 2027 — mTLS automation. Move all service-mesh workloads to SDS-based rotation if not already there. For non-mesh workloads, deploy sidecar agents that rotate keystores and trigger reloads. Acceptance criterion: a forced 7-day cert lifetime in staging runs for two weeks without manual intervention.

Q1 2028 — appliances and middleware. Build or buy the controllers that drive ACME against F5, NetScaler, Palo Alto, SAP, and similar. This is the longest, hardest quarter; budget contingency.

Q2 2028 — fingerprint and pinning elimination. Audit every pin (mobile apps, IoT firmware, internal Java clients) and migrate to SPKI-of-backup-key or remove. Mobile pinning changes must ship 60 days before the cutover.

Q3 2028 — chaos and failure-injection. Run scheduled exercises: kill the ACME account key, expire an intermediate in staging, fail DNS-01 for a critical FQDN, throttle the CA. The failure modes you do not exercise are the ones that will page you in March 2029.

Q4 2028 — freeze, dry-run at 47 days. Reduce production cert lifetimes to 47 days voluntarily in November 2028, before the mandate. This is the only credible final test. Any failure surfaces while you still have a four-month buffer to recover.

Across the runway, three governance practices have to be live by Q2 2027: a written policy that forbids long-lived cert assumptions in new code, a CI lint that rejects PRs introducing baked-in certs or hard-coded fingerprints, and a quarterly review of the certificate age histogram with engineering leadership. Without them, the runway is fiction.

Where Evertrust Fits

The 47-day calendar is unforgiving in one specific way: it removes the operational slack that has hidden every weak link in certificate management for the last decade. Manual renewals, baked-in trust stores, undocumented pinning, vendor appliances without ACME, internal CAs with no automation interface — all of these have been carried by 398-day lifetimes. They will not be carried by 47-day lifetimes. The fix is not a single tool; it is a discipline applied across discovery, issuance, deployment, and observability.

Evertrust provides the platform layer that makes this discipline operable. Continuous discovery surfaces every public and internal certificate, including the appliances that hide outside the central PKI. A unified issuance API speaks ACME (RFC 8555), SCEP, EST, and CMP, so the same workflow renews a public ALB cert, an internal Kafka broker, and an F5 virtual server.

Policy engines enforce algorithm, lifetime, and chain constraints at issuance time. Rotation orchestration handles the non-trivial cases — dual-cert acceptance windows for databases, JKS reloads for Java middleware, rolling restarts for Kafka clusters.

Observability is built in: ACME failure rates, certificate age histograms, chain mismatch detection, and renewal lag are first-class metrics, not bolt-ons.

The teams that will reach March 2029 without an outage are not the ones with the most engineers. They are the ones who started in 2026 with a clear inventory, an automation backbone, and an observability stack that surfaces failures three weeks before they page. To see how Evertrust supports each step of the runway — from inventory through ACME issuance, rotation, and audit — explore Evertrust Certificate Lifecycle Management.

Found this helpful?
Back to blog

Table of Contents

Stay Updated

Get the latest PKI insights delivered to your inbox.

By subscribing you accept to receive our communications.

Related Articles

Evertrust PQC

Are European enterprises ready for Post-Quantum Cryptography (PQC) migration? The gaps and the path forward

September 10, 2025
1 min

Explore why PQC adoption lags in Europe, the real blockers, and how to achieve quantum-safe security.

Read more
Evertrust PQC

NIST Releases New Post-Quantum Cryptography Standards

September 10, 2025
1 min

Discover NIST’s new Post-Quantum Cryptography standards (FIPS 203, 204, 205) and how Evertrust is preparing to integrate them for enhanced cybersecurity.

Read more
Evertrust ACME

ACME Clients on Linux

February 12, 2024
1 min

The ACME protocol is a network protocol designed to automate the process of domain validation, deliverance and renewal of X.509 certificates. The process is set up between an ACME server and an ACME client.

Read more

Ready to take control of your certificates?

Talk to our experts and discover how Evertrust can help you implement best practices in PKI and certificate lifecycle management.

Talk to an expert