Skip to main content

    The clientAuth EKU Removal: Why Public TLS Certificates No Longer Authenticate Clients

    Public TLS certificates lost the clientAuth EKU in 2026. What broke, how to check if you're affected, and how to move mTLS to a private CA.

    MS
    My-SSL Team
    ·
    13 min read
    ·
    Published August 13, 2026
    ·
    Last updated August 13, 2026

    The short answer

    Publicly trusted TLS certificates can no longer carry the client authentication extended key usage, so a certificate bought from a public CA can only identify a server, never the party connecting to one. The last public certificates with clientAuth were issued on May 15, 2026, and Chrome's dated requirement took effect on June 15, 2026. Certificates issued before those cutoffs keep working until they expire — but because maximum validity has been 200 days since March 15, 2026, the last of them expire around December 1, 2026. Ordinary HTTPS is unaffected. If something in your estate presents a public certificate as a client credential, that credential has to move to a private CA.

    A dual-purpose TLS certificate presented from both ends of a connection, compared with the replacement arrangement in which a public CA issues the server certificate and a private CA issues the client certificateThe upper half shows the arrangement that has been removed. A single publicly trusted certificate asserting both server authentication and client authentication is presented in two directions. Used by a server it proves the domain name, which the certificate authority genuinely verified. Used by a client it proves the client's identity, which the certificate authority never verified at all — the gap highlighted in gold. The lower half shows the replacement. A public certificate authority issues a server-authentication-only certificate to the server, and a private certificate authority you operate issues a client-authentication-only certificate to the client. Each issuer now vouches for something it actually checked. A closing bar states the takeaway: nothing about the server side changed, and the client side moves to an issuer that knows who its clients are.One certificate, two jobs — only one of them was ever verifiedREMOVED — ONE PUBLIC CERTIFICATE, BOTH ROLESPublic TLS certificateextendedKeyUsage:serverAuthclientAuthissued by a public CAServer side: “I am example.com”The CA checked domain control. Claim is backed.Client side: “I am an authorised client”The CA never checked this. Claim is unbacked.IN PLACE NOW — TWO CERTIFICATES, TWO ISSUERSPublic CAverifies the domainEKU: serverAuth only→ your web serverUnchanged. Renew as normal.Private CAverifies enrolmentEKU: clientAuth only→ your client or serviceThis is the part you migrate.Each issuer now vouches only for something it actually checked
    The removal looks like a restriction, and it reads better as a correction: the client-side claim was the one nobody had ever verified.

    Most coverage of this change was written before the deadlines passed and framed it as something to prepare for. The deadlines have passed. What is left is an operational problem with a fixed shape: somewhere in a lot of estates there is a service holding a certificate that still works, that cannot be renewed as-is, and that nobody has flagged because the thing it breaks is a machine-to-machine connection nobody watches. This page is about finding that certificate and deciding what replaces it.

    What changed with the clientAuth EKU?

    Publicly trusted TLS certificates may now assert only one purpose: server authentication. The extended key usage extension in an X.509 certificate lists what the certificate is permitted to do, and for years many public certificates listed two values — id-kp-serverAuth and id-kp-clientAuth — which meant the same certificate could be presented by a server proving its domain, or by a client proving itself to a server. The second value is gone from new public issuance. Only the first remains.

    The requirement lives in the Chrome Root Program Policy, version 1.8 as of February 5, 2026. Subscriber certificates — the ones on your server — must include the extended key usage extension and assert only id-kp-serverAuth. For the intermediates above them the rule carries a date: a subordinate CA disclosed to the Common CA Database before June 15, 2026 may assert serverAuth alone or serverAuth together with clientAuth, while one disclosed on or after that date may assert serverAuth alone. From June 15, 2026 the program also began phasing out hierarchies found in violation, with the phase-out date set 90 days after a violation is detected.

    That distinction between subscriber certificates and subordinate CAs is worth holding onto, because a lot of write-ups collapse it into "Chrome blocks dual-EKU certificates on June 15." The practical effect is close enough for planning purposes, and the mechanism matters when you are reading your own chain: the constraint propagates downward from which intermediate you were issued under. If you want a refresher on where this extension sits in the structure, our guide to X.509 fields and extensions covers the layout.

    Why was client authentication removed from public TLS certificates?

    Because a public CA never verified the claim that a client certificate makes. When a certificate authority issues a TLS certificate it checks one thing about identity: that the applicant controls the domain name going into the certificate. That check supports the server-side claim perfectly — the server says it is example.com, and the CA confirmed somebody proved control of example.com. It supports the client-side claim not at all. Nothing in domain validation establishes that the holder is an authorised client of anything.

    The consequence was a quiet structural weakness. Any system that accepted client certificates from the public trust store was, in effect, accepting an identity assertion that no CA had ever examined. An attacker who obtained a perfectly legitimate certificate for a domain they genuinely controlled held a valid credential that chained to a trusted root, and a permissive verifier had little basis to reject it. The Chrome Root Program's broader position is that hierarchies in its store should serve TLS server authentication and nothing else, so that the risk a root carries can be reasoned about; the same reasoning has been driving multi-purpose roots out of the store through 2026.

    None of that means the systems relying on public client certificates were badly built. It was a reasonable use of an available feature, and the feature was available for a long time. The judgement that changed is about what a public root should be asked to underwrite, and that judgement was made by the parties who decide what browsers trust.

    Which dates actually matter?

    Four dates, and they do different things. In late 2025 the major CAs stopped including clientAuth by default while still honouring requests for it: Sectigo from September 15, 2025 and DigiCert from October 1, 2025. Issuance then stopped outright — DigiCert on May 1, 2026, and both Sectigo and Certum on May 15, 2026. Chrome's dated requirement for newly disclosed subordinate CAs took effect on June 15, 2026. Everything after that is expiry, not policy.

    Timeline of the clientAuth EKU removal, from certificate authorities turning the extension off by default in late 2025 to the expiry of the last dual-purpose certificates around December 2026Five points on a timeline. In September and October 2025 major certificate authorities stopped including the client authentication extended key usage by default, though it could still be requested. On May 1, 2026 DigiCert stopped issuing it entirely. On May 15, 2026 Sectigo and Certum did the same, making that the last day any publicly trusted certificate carrying client authentication could be obtained. On June 15, 2026 the Chrome Root Program's dated requirement took effect for subordinate certificate authorities newly disclosed to the CCADB, which from that date may assert server authentication only. The final point, highlighted in gold, is a consequence rather than a policy: because the maximum validity of a public TLS certificate has been 200 days since March 15, 2026, a certificate issued on the last possible day expires around December 1, 2026, which is when the last of these certificates stops working anywhere.Four dates, and the deadline that follows from themSept 15 & Oct 1, 2025 — off by defaultSectigo, then DigiCert, stop including clientAuth unless it is asked for.May 1, 2026 — DigiCert stops issuing itNo longer available on request, at any price.May 15, 2026 — Sectigo and Certum stopThe last day a public certificate with clientAuth could be issued.June 15, 2026 — Chrome's dated requirementSubordinate CAs newly disclosed to the CCADB: serverAuth only.≈ Dec 1, 2026 — the last dual-purpose certificate expiresNot a policy date. Max validity has been 200 days since March 15, 2026, soMay 15 + 200 days is the outer limit of everyone's grace period.Dates as published by each CA; verified August 2026.
    The date most migration plans are built around is June 15. The one that actually ends the grace period is the expiry in the gold band.

    The reason the default-off dates matter more than they look is that they are where the silent replacements began. An organisation that renewed a dual-purpose certificate in, say, November 2025 without explicitly requesting clientAuth received aserverAuth-only certificate and may have discovered the difference in production. If you had an unexplained mTLS failure in the last three quarters, this is a strong candidate for what caused it.

    How long do existing dual-EKU certificates keep working?

    Until they expire, and that is sooner than most migration plans assume. Certificates issued with clientAuth before each CA's cutoff remain valid and accepted for the rest of their lifetime — Certum states this explicitly for the certificates it issued up to May 15, 2026. Nothing revokes them and no browser update kills them early. The limit is arithmetic rather than policy.

    Since March 15, 2026 the maximum validity of a publicly trusted TLS certificate has been 200 days, under the schedule the CA/Browser Forum adopted in Ballot SC-081v3 (many CAs issue at 199 days to leave margin). The last certificate anyone could obtain with clientAuth was issued on May 15, 2026. Add 200 days to that date and you land on approximately December 1, 2026. Certificates from DigiCert's earlier cutoff run out around two weeks before that.

    The number worth writing down

    There is no publicly trusted certificate anywhere that can still authenticate a client after roughly December 1, 2026. Not one that can be bought, renewed, or extended. Whatever grace period an estate has, it ends on that date at the latest, and for most certificates well before it — the shortened-lifetime schedule and the EKU removal landed within two months of each other, and together they close the window much faster than either would alone. Our note on the move to 199-day certificates covers the lifetime half of that squeeze.

    Am I affected?

    Only if something you run presents a publicly issued certificate in order to prove its own identity to another system. That is a narrower group than the coverage suggests. A web server serving HTTPS to browsers is not affected. An API that only answers requests is not affected. A load balancer terminating TLS on the way in is not affected. The affected pattern is the reverse direction, and it usually appears in one of a handful of places.

    Decision tree for determining whether a deployment is affected by the clientAuth EKU removalThe tree starts from a single question: does anything in your estate present a publicly issued TLS certificate in order to prove its own identity to something else? If the answer is no, which covers ordinary websites, APIs and load balancers that only ever serve traffic, nothing is affected and no action is required. If the answer is yes, a second question follows: was that certificate issued on or before mid-May 2026? If it was, it keeps working until it expires, which gives a short and fixed window to migrate. If it was issued after that, it already carries server authentication only and the connection is already failing. Both yes branches lead to the same destination, highlighted in gold: issue the client credential from a private certificate authority.Am I affected? Two questions settle itDoes anything present a public TLS certificateto prove its own identity to something else?NOYESNothing to doWebsites, APIs and loadbalancers that only serve.Renew as normal.Was that certificate issuedon or before May 15, 2026?YESNOStill working — for nowValid until it expires.Migrate before then.Already failingThe reissue arrived withserverAuth only.Issue the client credential from a private CA
    Both routes through the tree end in the same place, which is why the migration is usually simpler to plan than to find.

    In practice the credential turns up in server-to-server API calls where a partner required a certificate instead of a token; in payment and banking integrations that specified a publicly trusted client certificate in their onboarding documents; in device fleets enrolled years ago against a public CA; and in VPN or gateway configurations where the same wildcard certificate was reused for both ends because it was already on the box. If you want the background on how the handshake uses these credentials, our explainer on mutual TLS walks through both directions of the exchange.

    The awkward case is the third-party one: your partner's gateway demands a publicly trusted client certificate and their documentation has not been updated. You cannot fix that with a purchase, because no CA can sell you what they are asking for. That conversation has to happen with them, and it is better had now than in the week their integration stops.

    How do I check whether a certificate has the clientAuth EKU?

    Read the extended key usage extension directly. For a certificate file on disk, one command answers it:

    openssl x509 -in client.pem -noout -ext extendedKeyUsage

    A certificate that can still do the job prints both purposes:

    X509v3 Extended Key Usage:
        TLS Web Server Authentication, TLS Web Client Authentication

    One that cannot prints TLS Web Server Authentication alone. To check what a live endpoint is actually presenting rather than what you believe is deployed, pipe a connection into the same command:

    openssl s_client -connect api.example.com:443 -servername api.example.com \
      </dev/null 2>/dev/null | openssl x509 -noout -ext extendedKeyUsage

    Run this against every certificate in inventory rather than the ones you suspect. The whole difficulty of this migration is discovery: the certificate that will break is usually the one nobody remembers deploying. Our OpenSSL commands cheat sheet has the inspection syntax for the other formats you will hit, and the free SSL checker is quicker when what you need is what a public hostname is serving right now.

    What does the failure actually look like?

    A rejection at certificate verification, not a handshake or trust error, which is what makes it confusing to diagnose. The certificate chains correctly, its dates are fine, its signature validates, and the connection still fails — because the verifier got as far as checking what the certificate is permitted to do and found the wrong purpose. Error text varies by stack, and two messages come up repeatedly.

    OpenSSL-based verifiers report an unsupported certificate purpose (X509_V_ERR_INVALID_PURPOSE). Java's JSSE is more explicit, raising a ValidatorException stating that extended key usage does not permit use for TLS client authentication. An Nginx server with ssl_verify_client on will typically return a 400 with a certificate error rather than anything describing the EKU. In each case the giveaway is the same: everything about trust checks out and the certificate is refused anyway.

    This is worth stating plainly because the instinct when an mTLS connection fails is to suspect the chain, the trust store, or a clock. Those are the usual causes and they are not this one. If the certificate presented by the client was reissued recently and the error mentions purpose or key usage, stop debugging trust — trust store differences produce a different class of error entirely.

    How do I move client authentication to a private CA?

    Issue the client credential from a certificate authority you control, and leave the server side exactly as it is. The replacement is a private CA — an internal issuing authority whose root you install on the systems that need to verify your clients. Nothing about this is a downgrade for machine-to-machine authentication, because the property you lose is universal browser trust and browsers were never party to the connection.

    Comparison of a public certificate authority and a private certificate authority across five properties relevant to client authenticationFive rows compare the two issuer types. On what the issuer verifies, a public certificate authority confirms control of a domain name while a private one confirms that a device or workload was enrolled by you. On whether the issuer can vouch for a client's identity, highlighted in gold, the public answer is no and the private answer is yes — the row that decides the question. On trust scope, public certificates are trusted by every browser and operating system, while private ones are trusted only where you install the root. On maximum validity, public TLS certificates are capped at 200 days and falling, while a private certificate authority sets its own lifetimes. On revocation, public issuance relies on CRL and OCSP infrastructure run by the CA, whereas a private CA revokes instantly within its own boundary.Which issuer belongs on the client side?PropertyPublic CAPrivate CAWhat the issuer verifiesControl of a domainEnrolment by youCan vouch for a client's identityNoYesWhere it is trustedEvery browser and OSWhere you install the rootMaximum validity200 days, and fallingWhatever you setRevocationCRL / OCSP run by the CAInstant, inside your boundaryBrowser trust was never the property client authentication depended on.
    The gold row is the whole argument: the issuer you were relying on had no way to check the thing it appeared to be attesting.

    The practical sequence is short. Inventory every certificate presented as a client credential, using the commands above. Stand up an issuing authority — a managed private CA from a cloud provider, an internal PKI, or for a small and stable set of peers, a self-signed root you generate and guard properly; our guide to self-signed certificates covers where that is defensible and where it is not. Issue client certificates with clientAuth and no serverAuth. Add the private root to the trust configuration of each verifying service, keeping it scoped to client verification rather than adding it to the system-wide store. Then cut over, confirm, and remove the public certificate from the client.

    Two details cause most of the pain. Verifying services frequently accept client certificates from whatever is in the default trust store, which means adding your private root without scoping it leaves the old permissive behaviour in place — worth fixing during the migration rather than after. And private CAs let you set your own lifetimes, which is a genuine advantage over a public certificate now capped at 200 days, but only if the renewal is automated; a five-year client certificate with no rotation mechanism is a problem deferred, not solved.

    Your server certificates carry on unchanged through all of this. They assert serverAuth, that is the purpose that survived, and renewing them needs no special handling — a standard publicly trusted SSL/TLS certificate is still exactly the right product for anything a browser or an external client connects to. The split this change forces is between two jobs that were always distinct; only the packaging pretended otherwise.

    Frequently Asked Questions

    Get instant answers to common questions about SSL certificates and our services.

    Still Have Questions?

    Our SSL experts are available 24/7 to help with any questions about certificates, installation, or technical issues.

    Sorting out the server side

    If this audit turned up certificates that need replacing on the server side, that part is ordinary work. Our DV, OV and EV SSL/TLS certificates are issued from publicly trusted roots and arrive with serverAuth, which is what a server needs and now all it can have. If you are not sure whether a particular integration counts as a client or a server in this sense, send us the certificate details and we will read the extensions with you — that is a shorter conversation than a failed cutover.

    Related reading