On this page · 13 sections
- What changed for ACME clients in 2025 and 2026
- certbot
- acme.sh
- cert-manager
- Caddy (built-in ACME)
- Traefik (built-in ACME)
- Windows: win-acme and Posh-ACME
- Head-to-head comparison
- Worked example: renewal load in a mixed estate
- India and data-residency notes
- Implementation checklist
- How eCorpIT can help
- References
Summary. For 100-day public certificates from 15 March 2027, and Let's Encrypt's 64-day default from 10 February 2027, the ACME client matters less than two features: ACME Renewal Information (ARI, RFC 9773), which lets the CA tell your client when to renew, and ACME profiles, which let you choose a certificate type. As of 1 November 2026, certbot 5.9.0 (28 October 2026) checks ARI automatically and has supported profiles since 4.0.0. acme.sh 3.1.6 (20 September 2026) has had ARI on by default since 3.1.4. Caddy 2.11.7 (3 October 2026) gets full RFC 9773 support from CertMagic, with profiles marked experimental. cert-manager 1.21 supports profiles but keeps ARI behind the experimental ACMEUseARI gate, and v1.21.3 fixed an ARI renewal loop. Traefik 3.7.17 has an acme.profile option, but neither its documentation nor its ACME provider code shows ARI. On Windows, Posh-ACME 4.35.0 covers ARI, profiles and experimental dns-persist-01, while win-acme 2.2.9.1 (May 2024) has pre-RFC ARI and a 55-day renewal default you should lower. Pick by platform: certbot for single Linux servers, cert-manager for Kubernetes, Caddy for new front ends, Posh-ACME or win-acme for Windows.
About this article. For DevOps, SRE and Windows teams choosing or upgrading an ACME client. On 1 November 2026 we read each project's release notes, changelog and documentation, and in places its source code, and checked the snippets against them. We did not run hands-on tests of these tools. Projects ship often, so re-check before you commit. No vendor paid for inclusion. Researched with AI assistance and reviewed by our editorial team.
This is the tool comparison. For the CA/Browser Forum rule itself, the inventory method and the eMudhra lessons, read our 100-day SSL certificate validity checklist. For the Let's Encrypt timeline, see Let's Encrypt's move to 64-day certificates.
What changed for ACME clients in 2025 and 2026
Six changes set the bar any client now has to clear.
- ARI became a standard. The IETF published ACME Renewal Information as RFC 9773 in June 2025. A client that supports it asks the CA for a suggested renewal window for each certificate, so the CA can spread load and pull renewals forward before a mass revocation.
- Lifetimes are falling on a fixed schedule. Public TLS certificates are capped at 200 days today, 100 days from 15 March 2027 and 47 days from 15 March 2029, under ballot SC-081v3. Let's Encrypt's default profile moves to 64 days on 10 February 2027 and 45 days on 16 February 2028, and it recommends ARI.
- Profiles arrived. Let's Encrypt now offers
classic(the default),tlsserver(45 days since 13 May 2026) andshortlived(160 hours, and the only profile allowed for IP address certificates). A client that cannot request a profile gets the default.
- A persistent DNS challenge was approved, but rollout is uneven. Ballot SC-088v3 added a validation method based on a standing
_validation-persistTXT record. Google Trust Services went live on 28 September 2026 using IETF draft 01. Let's Encrypt targeted Q2 2026, then a developer there said on 25 June 2026 that deployment would wait for an open draft issue. That issue closed on 23 September 2026, and we found no production date on 1 November 2026. Posh-ACME's guide says draft 02 uses a record format incompatible with draft 01.
- CAA account binding becomes universal on 15 March 2027. Every CA must then process the
accounturiandvalidationmethodsCAA parameters, so a client that silently creates a new ACME account can break issuance.
- Trust stores turned out to matter. After eight eMudhra intermediate keys were found to be weak in October 2026, The Hacker News reported fixes across Go, Node.js and Linux distributions, and cert-manager v1.21.3 removed the emSign ECC Root CA - G3 root from its base images.
certbot
certbot is the EFF's client and the one many Linux users meet first. The current release is 5.9.0, dated 28 October 2026, under the Apache-2.0 licence.
- ARI: since 4.1.0 (10 June 2025),
certbot renewchecks ARI automatically when the CA supports it and may renew early. Version 5.0.0 stores the server's Retry-After so it is respected across runs.
- Profiles:
--preferred-profileand--required-profilearrived in 4.0.0 (7 April 2025), and 4.1.0 saves the choice in the renewal configuration.
- Renewal timing: since 4.0.0, certificates renew with one-third of their lifetime left (half if the lifetime is under 10 days), replacing the old fixed 30 days before expiry. An early ARI window overrides a later
renew_before_expiry.
- IP certificates:
--ip-addressarrived in 5.3.0 and webroot support in 5.4.0.
- DNS-01: 13 first-party
certbot-dns-*plugins (Cloudflare, Route 53, Google, DigitalOcean, OVH, RFC 2136 and others), plus third-party plugins its docs list for Azure, GoDaddy, Hetzner and more.
- Limits: certbot stopped publishing its Windows beta installer in 2.10.0 (April 2024). No release supports dns-persist-01 yet; a pull request opened in October 2026 was still open on 1 November.
Best for: Linux servers running Apache or NGINX where you want a packaged, widely documented client with ARI on by default.
acme.sh
acme.sh is a single shell script with no Python dependency, GPLv3-licensed and officially maintained by ZeroSSL. The latest release is 3.1.6, dated 20 September 2026; it adds signed release tags and no functional change from 3.1.5.
- ARI: 3.1.4 (17 July 2026) added RFC 9773 support enabled by default, and the installed cron job now runs every six hours to react to renewal windows. Set
NO_ARI=1to disable it.
- Profiles and IP certificates: supported since 3.1.2 (November 2025).
- dns-persist-01: supported since 3.1.4, with
--make-dns-persist-valueto print the record, an optional wildcard policy and--dns-persist-daysfor an expiry. The README cites draft 01.
- DNS-01: the widest built-in coverage here outside lego, with about 200 DNS API scripts, plus a DNS alias mode for delegating
_acme-challenge. Each release adds providers; 3.1.5 added eight.
- Renewal timing: every 30 days by default, or earlier when the CA's ARI window opens. An explicit
--daysor--valid-tooutranks ARI.
- Gotcha: the default CA is ZeroSSL, not Let's Encrypt. Teams that want Let's Encrypt should run
acme.sh --set-default-ca --server letsencryptfirst.
Best for: minimal systems, routers, NAS boxes, BSD and appliances, and teams with an unusual DNS provider.
cert-manager
cert-manager is the CNCF project for certificates in Kubernetes and OpenShift, under Apache-2.0. Supported releases are 1.21 (8 July 2026) and 1.20 (10 March 2026), with 1.22 expected around November 2026. Version 1.21 supports Kubernetes 1.33 to 1.36. See our Kubernetes 1.36 upgrade notes if a cluster needs to move first.
- ARI: experimental in 1.21, behind the
ACMEUseARIfeature gate. Patch v1.21.3 (23 October 2026) addedstatus.acme.ari.certIDto fix a loop where a stale ARI window from the previous certificate triggered repeated re-issuance until the CA's rate limit was hit.
- Profiles: since 1.18 (June 2025), via the
profilefield on an Issuer or ClusterIssuer.
- DNS-01: eight built-in providers (ACMEDNS, Akamai, AzureDNS, Cloudflare, DigitalOcean, Google Cloud DNS, RFC 2136 and Route 53) and a webhook interface for the rest. The docs do not mention dns-persist-01.
- Renewal timing: two-thirds of the issued lifetime by default, with
renewBeforeandrenewBeforePercentageoverrides. 1.21 adds arenewalfield for maintenance-window scheduling.
- Accounts: each Issuer generates its own ACME account key unless you set
disableAccountKeyGenerationand supply an existing one. That matters once CAAaccounturibinding is in force.
# cert-manager 1.18+: request Let's Encrypt's tlsserver profile
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
profile: tlsserver
privateKeySecretRef:
name: letsencrypt-prod-account-key
solvers:
- dns01:
route53: {}
# Helm values, cert-manager 1.21.3+: enable experimental ARI (try staging first)
featureGates: "ACMEUseARI=true"
Best for: anything running in Kubernetes. Upgrade to v1.21.3 or later before relying on ARI.
Caddy (built-in ACME)
Caddy is a web server and reverse proxy that obtains and renews certificates automatically, under Apache-2.0, and describes itself as a project of ZeroSSL. The latest release we found is 2.11.7 (3 October 2026). Its TLS automation comes from the CertMagic library, which documents full support for RFC 9773.
- ARI: yes, through CertMagic.
- Profiles: added in 2.10 (April 2025) and labelled experimental.
- Renewal timing: one-third of lifetime left by default, unless the CA's ARI window says otherwise.
- Issuer fallback: by default Caddy tries Let's Encrypt, then ZeroSSL, then backs off and retries for up to 30 days. We found no other tool here documenting failover between CAs by default.
- DNS-01: through provider plugins from the caddy-dns repositories, so you need a build that includes yours, plus credentials for your provider.
- On-demand TLS: obtains certificates at the first TLS handshake for names you approve through an ask endpoint, which suits SaaS platforms serving customer domains.
Best for: new web front ends, reverse proxies and multi-tenant platforms where certificate handling should be invisible.
Traefik (built-in ACME)
Traefik is a reverse proxy and ingress controller under the MIT licence. The latest stable release is 3.7.17 (30 October 2026), with 3.8.0-rc.1 in testing. It embeds the lego library, whose documentation lists more than 200 DNS providers and which supports RFC 9773, profiles and draft dns-persist-01 as a standalone client.
- Profiles: the ACME resolver reference includes an
acme.profileoption.
- ARI: the resolver documentation does not mention it, and we found no ARI call in the ACME provider source on 1 November 2026, although lego itself supports it.
- Renewal timing: by default Traefik assumes 90-day certificates and starts renewing 30 days before expiry. The code picks the window from
certificatesDuration, in hours: 90 days or more renews 30 days before expiry, 30 to 89 days renews 10 days before, and 6 to 29 days renews 2 days before. So the default keeps working on 64-day and 45-day certificates, renewing at about day 34 and day 15. Setting 1,536 hours for a 64-day certificate narrows your margin to 10 days. Set 160 forshortlived, because the default would treat a six-day certificate as always due.
- DNS-01: one DNS provider per resolver. Traefik's docs suggest CNAME delegation when domains sit with different providers.
Best for: teams already using Traefik as their proxy or ingress who accept fixed renewal timing until ARI arrives.
NGINX has also gained native ACME support, announced in September 2025 according to Let's Encrypt, which may remove the need for a separate client on some NGINX hosts.
Windows: win-acme and Posh-ACME
certbot no longer ships a Windows installer, so Windows estates usually pick one of these two. Our Windows Server 2016 migration options cover the wider upgrade.
win-acme (Apache-2.0) is the GUI-and-CLI client most IIS administrators know. The recommended download on win-acme.com is 2.2.9.1, and its latest GitHub release, v2.2.9.1701, dates from 25 May 2024. Those release notes describe moving ARI support to draft 3 of the specification, which predates RFC 9773. It installs into IIS, the Windows certificate store, the IIS Central Certificate Store, PEM or PFX files and Azure Key Vault, and lists about 20 DNS plugins plus acme-dns and script hooks. Its CLI reference shows no profile option. The setting that matters is RenewalDays, default 55: fine for 90-day certificates, tight for 64-day ones (9 days of margin), and longer than a 45-day certificate. A RenewalMinimumValidDays safety net (default 7) and ARI suggestions, on unless you set RenewalDisableServerSchedule, soften this. We would still set RenewalDays to 30 now: that is 47% of a 64-day lifetime and 67% of a 45-day one.
Posh-ACME (MIT) is a PowerShell module that runs on Windows PowerShell 5.1 and PowerShell 6.2 or later on all supported platforms. Version 4.35.0 is dated 11 October 2026. It added ARI in 4.24.0 (June 2024), with a DisableARI switch per server, profiles in 4.28.0 (February 2025), preliminary dns-persist-01 in 4.32.0 (March 2026), and draft 02 support with new pre-provisioning workflows in 4.35.0. Its README cites ARI draft 07 and also lists experimental dns-account-01.
Best for: win-acme when IIS administrators want an interactive tool; Posh-ACME when Windows automation lives in PowerShell pipelines or you want to trial dns-persist-01 on Windows.
Head-to-head comparison
The table summarises the sections above, using the same sources. Not documented means we found no mention, not that the feature is absent.
| Tool | Latest release checked | Licence | Runs on | ARI (RFC 9773) | ACME profiles | DNS-01 coverage | dns-persist-01 | Default renewal timing |
|---|---|---|---|---|---|---|---|---|
| certbot | 5.9.0 (28 Oct 2026) | Apache-2.0 | Linux, macOS, BSD | Yes, automatic since 4.1.0 | Yes, since 4.0.0 | 13 first-party plugins plus third-party | Not in a release | One-third of lifetime left; ARI can pull earlier |
| acme.sh | 3.1.6 (20 Sep 2026) | GPLv3 | Any POSIX shell; Windows via Cygwin | Yes, default on since 3.1.4 | Yes, since 3.1.2 | About 200 DNS API scripts; alias mode | Yes, since 3.1.4 | Every 30 days, or earlier on ARI |
| cert-manager | 1.21 (8 Jul 2026); v1.21.3 patch (23 Oct 2026) | Apache-2.0 | Kubernetes, OpenShift | Experimental, ACMEUseARI gate | Yes, since 1.18 | 8 built-in plus webhooks | Not documented | Two-thirds of lifetime; configurable |
| Caddy | 2.11.7 (3 Oct 2026) | Apache-2.0 | Linux, Windows, macOS, BSD | Yes, via CertMagic | Experimental, since 2.10 | Provider modules (custom build) | Not documented | One-third of lifetime left; ARI can change it |
| Traefik | 3.7.17 (30 Oct 2026) | MIT | Containers, Kubernetes, binaries | Not documented | Yes, acme.profile | lego, 200+ providers; one per resolver | Not documented | Assumes 90 days, renews 30 days before expiry |
| win-acme | 2.2.9.1 (May 2024) | Apache-2.0 | Windows | Yes, pre-RFC draft 3 | Not in CLI reference | About 20 plugins, acme-dns, scripts | Not documented | RenewalDays 55; minimum 7 days valid |
| Posh-ACME | 4.35.0 (11 Oct 2026) | MIT | PowerShell on Windows, Linux, macOS | Yes, since 4.24.0 | Yes, since 4.28.0 | More than 90 DNS plugins | Experimental, since 4.32.0 | RenewAfter per order, updated by ARI |
Worked example: renewal load in a mixed estate
Take an illustrative estate on Let's Encrypt: 40 Linux VMs with certbot (one certificate each), two Kubernetes clusters with 300 certificates managed by cert-manager, and 15 IIS servers with win-acme. That is 355 certificates, and we assume two names per certificate and renewal at two-thirds of the lifetime.
| Period | Lifetime | Renew every | Renewals a year (355 certificates) | DNS-01 record writes a year (2 names each) |
|---|---|---|---|---|
| Today | 90 days | ~60 days | 2,160 | 4,320 |
| From 10 Feb 2027 | 64 days | ~43 days | 3,037 | 6,074 |
| From 16 Feb 2028 | 45 days | ~30 days | 4,319 | 8,638 |
The arithmetic: 365 ÷ (64 × 2/3) ≈ 8.555 renewals per certificate per year; 355 × 8.555 ≈ 3,037; doubled for two names, 6,074 TXT records created (and as many deleted). Authorisation reuse falls to 10 days in February 2027 and seven hours in 2028, so these renewals all need fresh validation, as they already do on a 60-day cycle with 30-day reuse.
Three conclusions follow:
- Rate limits are not the constraint. Let's Encrypt says renewals are exempt from its issuance limits.
- DNS credentials are. Thousands of DNS API writes a year means API tokens on many machines. Use narrowly scoped tokens or delegate
_acme-challengeto a dedicated zone. Consider dns-persist-01 once your CA and client both support it.
- Defaults need checking. certbot's one-third rule is safe here. win-acme's 55-day default needs lowering to 30.
India and data-residency notes
ACME clients generate private keys on your own machines and send the CA only a certificate signing request, so the private key stays on your infrastructure whichever CA you use. Let's Encrypt stopped sending expiry reminders in June 2025, so do not rely on an account email. After the October 2026 eMudhra incident, CERT-In's advisory CIAD-2026-0050 told administrators to review applications, runtimes, container images and appliances that carry their own CA bundles. ACME clients are themselves TLS clients that talk to the CA, so keep them, and the images they run in, current. A client that can switch CAs by changing one setting, as all seven here can, turns a distrust event into a configuration change.
Implementation checklist
- Inventory clients and versions. Upgrade certbot to 4.1.0 or later (ideally 5.9.0), acme.sh to 3.1.4 or later, cert-manager to v1.21.3 (v1.20.5 on the 1.20 line, which lacks ARI), and Posh-ACME to 4.35.0.
- Confirm ARI is active where supported. Look for an
acme_renewal_infosection in the certbot renewal configuration, runacme.sh --info -d example.comand readLe_NextRenewTimeStr, and test theACMEUseARIgate in cert-manager staging.
- Remove fixed day counts. Search cron jobs and scripts for 83, 80 and 60, as Let's Encrypt suggests. Set win-acme
RenewalDaysto 30, and set TraefikcertificatesDurationonly for profiles that need it.
- Choose profiles deliberately. Stay on
classicfor the 10 February change, or opt intotlsserverearly on services with mature automation. Useshortlivedin staging to flush out timing bugs.
- Set the CA explicitly, above all in acme.sh and Caddy.
- Stabilise ACME account keys before adding CAA
accounturibinding. In cert-manager, reuse one account across clusters withdisableAccountKeyGeneration.
- Lock down DNS-01 with scoped tokens or CNAME delegation.
- Wire deploy hooks and verification. Reload services, push to load balancers, then check the served certificate's expiry date from outside.
- Alert externally at 14, 7 and 3 days before expiry, and watch Certificate Transparency for unexpected issuance.
- Rehearse a CA switch on one service before 15 March 2027.
How eCorpIT can help
eCorpIT is a Gurugram-based technology organisation, founded in 2021, assessed at CMMI Level 5 and MSME certified, with senior-led engineering teams working across AWS, Microsoft and Google platforms. Our DevOps services team can standardise certificate automation across Linux, Kubernetes and Windows estates, with ARI, scoped DNS credentials, deploy hooks and external expiry monitoring. Talk to us at /contact-us/.
Last updated: 1 November 2026.