Build1 publisher3 min readPublished
As TLS certificate lifetimes shrink toward 47 days, experts urge checking expiry from outside the renewing host
Public certificate authorities have capped TLS certificates at 200 days since 15 March 2026, falling to 47 days in March 2029. Renewal at that pace has to run unattended, and its failures show up only in the certificate a visitor's browser receives.
The Engineer · Build desk
Drafted by a language model from the sources cited here and checked against its claim ledger before publication. How we use AISend a correction

What happened
- The CA/Browser Forum approved the schedule in April 2025 as ballot SC-081v3, with Apple, Google, Microsoft and Mozilla voting in favour.
- The last certificates issued under the old 398-day limit run out in April 2027, putting every public site on the short schedule.
- The post replaces the usual 30-day warning with alerts at 14, 7, 3 and 1 days remaining, keyed to renewal at a third of the certificate's life.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- constraint A team that keeps a 30-day expiry alert will see it trip on every healthy 47-day cycle, and will learn to filter the one signal meant to catch a failed renewal.
- exposure A monitor that reads the certificate on disk or the renewal log on the renewing host can report healthy while visitors are handed an expired certificate.
- decision Alert thresholds now have to be chosen from the actual renewal point; a fixed 14-day threshold on a 200-day certificate leaves a failed renewal unseen for about 53 days.
- cost Operators pay for the 10-day validation reuse limit in challenge runs, since port 80 rules, DNS API tokens and CAA records must all work at nearly every renewal.
The author of a dnsnotify post on dev.to [18] wrote: "At eight renewals a year nobody renews by hand, so nobody forgets. What happens instead is that the automation stops working and nothing tells you." [8] Eight is roughly how many 47-day lifetimes fit in a year. The same post recommends renewing with a third of the lifetime left [17]. On a 47-day certificate that is about 15.7 days, so renewal lands near day 31 [1]. Renewed on that schedule, a hostname renews about 11.7 times a year [2].
The cap comes down in steps. Under today's 200-day cap a site needs at least about 1.8 certificates a year, and about 3.7 under the 100-day cap from March 2027 [3]. A person with a calendar can still manage that. At 47 days, from March 2029 [3], I would not trust one to. The post's case for the ballot rests on revocation: it has never worked well in browsers, so making certificates expire sooner is the practical way to limit damage from a stolen or mis-issued one [6].
In every failure the post lists, the certificate on disk, the renewal log, or both look fine [13]. A rebuilt server loses its cron entry or systemd timer, or a container image is rebuilt without the ACME client. Nothing logs an error because nothing runs [9]. An ACME client writes new files and exits while nginx, HAProxy or Postfix keep serving the old certificate from memory until someone restarts them. The renewal log says success [10], and about the files it is correct. A renewal on the origin misses the load balancer, the CDN or the second box in the pool, each holding its own copy [11]. Challenges break when a firewall blocks port 80, a DNS-01 API token is rotated, or a CAA record leaves out the CA [12]. The same ballot cuts domain validation reuse to 10 days by 2029, so domain control has to be proved again at nearly every renewal [7].
The post's check connects the way a browser does [14]:
``` echo | openssl s_client -connect www.example.com:443 -servername www.example.com 2>/dev/null \ | openssl x509 -noout -issuer -serial -enddate ```
Keep `-servername`. Without SNI, a server hosting several sites returns its default certificate, which may be a different one from the certificate you meant to check [14]. The post says to run the check on a schedule, from a machine other than the one doing the renewing, against every hostname answering on 443. Its reason is that example.com and www.example.com can serve different certificates, and so can api., mail. and whatever sits behind the CDN [15].
Alerting is the better part of the post. A healthy 47-day certificate renewed at a third of its life drops to about 15.7 days before renewal. A 30-day threshold is therefore crossed on every healthy cycle [4]. The post says that warning fires constantly and people filter it out [16]. Its replacement works back from the renewal point. A first warning at 14 days means renewal should already have happened, and the author settled on further alerts at 7, 3 and 1 days [17]. Each threshold says something specific about the renewal job. That is good alert design.
The 14-day figure transfers only if renewal happens with a third of a 47-day lifetime left. Under the 200-day cap, a third left is about 67 days. A renewal that fails at that point stays unseen for about 53 days before a 14-day alert fires [5]. I would set the thresholds as fractions of the lifetime the CA actually issued.
What to watch
- The 100-day cap in March 2027, the first step at which renewal frequency rises past a few times a year for every public site.
- The 10-day domain validation reuse limit in 2029, when setups using DNS-01 API tokens or port 80 challenges must pass at nearly every renewal.
- Whether ACME clients and hosting providers set renewal and alert points as a fraction of certificate lifetime before the 47-day cap arrives in March 2029.