Views: 33

ERR_SSL_KEY_USAGE_INCOMPATIBLE: Wrong Cert Purpose

ERR_SSL_KEY_USAGE_INCOMPATIBLE means the cert's keyUsage or EKU forbids TLS server use. Isolate it in 3 checks. Free instant check, no sign-up.

Check your domain for this issue now

Free, no sign-up. Runs the exact check this guide describes and shows what to fix.

Problem

A site loads in Firefox and answers openssl s_client cleanly, but Chrome and Edge refuse it with ERR_SSL_KEY_USAGE_INCOMPATIBLE. The certificate isn’t expired. The hostname matches. The chain builds to a trusted root. Chrome isn’t objecting to who signed the certificate or whose name is on it — it’s objecting to what the certificate says its key is allowed to do.

Symptoms

  • The failure is Chrome/Edge-only; Firefox, Safari, or curl may connect without complaint.
  • It started after a Chrome update, with no change to the server or certificate.
  • The target is often an internal appliance, an IIS server, a NAS, a printer, a router admin page, or anything using a self-signed or internal-CA certificate.
  • openssl s_client -connect host:443 completes the handshake and prints the chain — yet Chrome still blocks.
  • Other Chrome cert errors (ERR_CERT_AUTHORITY_INVALID, ERR_CERT_COMMON_NAME_INVALID) are not what you see; the message is specifically about key usage.

What This Error Actually Means

An X.509 certificate can constrain its own key with two extensions. Key Usage (RFC 5280 §4.2.1.3) is a bitfield naming the cryptographic operations the key may perform — digitalSignature, keyEncipherment, and so on. Extended Key Usage (§4.2.1.12) names the higher-level purposes, each an OID: TLS server authentication is id-kp-serverAuth, OID 1.3.6.1.5.5.7.3.1.

ERR_SSL_KEY_USAGE_INCOMPATIBLE is Chrome saying: one of those extensions is present and inconsistent with using this certificate as a TLS server. Two shapes of the same problem:

  1. The EKU is present but doesn’t include serverAuth. A certificate minted for client authentication, code signing, or email — or from a CA template scoped to the wrong purpose — carries an Extended Key Usage that simply doesn’t list 1.3.6.1.5.5.7.3.1. Chrome reads that as “this key is not for TLS servers” and stops.
  2. The Key Usage bits don’t match the handshake. The server’s key-exchange method decides which bit it needs. ECDHE cipher suites — and all of TLS 1.3 — have the server sign the key exchange, which requires digitalSignature. Legacy RSA key-transport suites have the client encrypt to the server’s public key, which requires keyEncipherment. If the certificate lists only keyEncipherment but the connection negotiates ECDHE (needing digitalSignature), the declared usage and the actual operation disagree, and Chrome rejects.

The nuance that makes this diagnosable: absence of the extension is permissive, presence-but-wrong is fatal. RFC 5280 says a certificate with no Key Usage extension may be used for anything; the trouble comes specifically when the extension exists and forbids what TLS needs. That’s why this is not a trust or naming problem and can’t be fixed from the client — the certificate is announcing the wrong job for itself, and only reissuing it changes that announcement.

Top 3 Causes

  1. A self-signed certificate generated with default settings. Windows New-SelfSignedCertificate, older IIS self-signed certs, and appliance-generated certs frequently omit digitalSignature or serverAuth. They worked until Chrome started enforcing; now every ECDHE/TLS 1.3 handshake — i.e. all modern ones — trips the key-usage check.
  2. The wrong certificate template from an internal CA. On an enterprise PKI, a cert issued from a “Computer,” “Code Signing,” or client-auth template carries an EKU that doesn’t include serverAuth. It installs fine, chains to the trusted internal root, matches the hostname — and Chrome still refuses because the declared purpose is wrong.
  3. A cert reused outside its intended purpose. Someone points a TLS server at a certificate that was issued for client authentication or another role. The key math is valid and the chain is trusted, but the EKU says “not a server,” so Chrome won’t use it for one.

Diagnose with DechoNet

  • SSL Check reads the certificate the server actually presents and shows its fields from outside your browser. Look at Extended Key Usage — if serverAuth (or TLS Web Server Authentication) isn’t listed, that’s your answer regardless of what any other client says.
  • The same check shows each certificate in the chain, so you can confirm the problem is on the leaf (the server cert) and not something you’re misreading further up. Key-usage rejection here is about the end-entity certificate’s declared purpose.
  • Because Chrome, Firefox, and OpenSSL disagree on strictness, an external inspection of the raw certificate fields beats “it works in curl.” Confirm the declared usage against what a TLS 1.3 / ECDHE handshake needs (digitalSignature, and serverAuth in the EKU) — that comparison is the whole diagnosis.

Resolution Checklist

  • Inspect the leaf certificate’s Key Usage and Extended Key Usage. Confirm the EKU includes serverAuth (OID 1.3.6.1.5.5.7.3.1) and the Key Usage includes digitalSignature. Missing either is the bug.
  • Reissue the certificate with the correct usage. For a TLS server, request keyUsage = digitalSignature (add keyEncipherment only if you still serve legacy RSA key-transport ciphers) and an EKU containing serverAuth. This is the actual fix — nothing on the client side substitutes for it.
  • On an internal CA, pick a TLS-server template. Reissue from a “Web Server” template (or your CA’s equivalent) rather than a Computer, code-signing, or client-auth template, so the emitted EKU is right.
  • Regenerate self-signed certs with explicit usage. When using New-SelfSignedCertificate or openssl req, set the key usage and serverAuth EKU explicitly instead of relying on defaults that may omit them.
  • Verify from outside, not just with curl. Re-run an external SSL Check and confirm serverAuth now appears and the Key Usage permits the negotiated exchange. A passing openssl s_client alone doesn’t prove Chrome will accept it.
  • Don’t try to “trust” your way past it. Adding the cert to a trust store fixes authority errors, not key-usage errors — the purpose is baked into the certificate and only reissuance changes it.

When to Escalate

  • If the certificate belongs to an appliance, printer, or vendor device you can’t reissue, escalate to the vendor: the fix is firmware or a device-side certificate regeneration that emits serverAuth and digitalSignature.
  • If it comes from an enterprise CA, hand it to whoever owns the PKI templates — the correction is a new issuance from a web-server template, not anything an individual server admin can patch locally.

Related Tools

Related Guides

Share this guide

[Ad] Guide Detail Inline
← Back to All Guides