ERR_SSL_VERSION_OR_CIPHER_MISMATCH (TLS version / cipher)

The browser and the server could not agree on a TLS version or a cipher suite. The handshake failed before any certificate checks finished.

How it shows up

net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH
This site can’t provide a secure connection
example.com uses an unsupported protocol

# Firefox:
SSL_ERROR_NO_CYPHER_OVERLAP
Peer’s Certificate has been marked as not trusted by the user
  (or: Cannot communicate securely with peer)

DevTools shows the request failed during TLS; you never get an HTTP status. openssl/s_client often prints no peer certificate available or stops at handshake failure.

What failed

  1. TCP connected (so this is not ERR_CONNECTION_TIMED_OUT or connection refused).
  2. TLS ClientHello offered versions + ciphers the client supports.
  3. Server could not pick any overlapping version/cipher → mismatch error.

vs similar TLS errors

ErrorMeans
ERR_SSL_VERSION_OR_CIPHER_MISMATCHNo shared TLS version or cipher suite
SSL wrong version numberClient spoke TLS to a plain-HTTP port (or vice versa)
ERR_SSL_PROTOCOL_ERRORBroader TLS protocol failure mid-handshake
certificate has expiredHandshake got far enough to reject the cert dates
unable to get local issuer / self-signed in chainChain/trust problem after version/cipher agreed
ERR_CERT_COMMON_NAME_INVALIDName on cert does not match the host

Frequent real causes

Diagnose

# What the server actually offers
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>&1 | head -40
# Force TLS 1.2
openssl s_client -tls1_2 -connect example.com:443 -servername example.com </dev/null
# Force TLS 1.3
openssl s_client -tls1_3 -connect example.com:443 -servername example.com </dev/null
# Cipher scan (if sslscan / testssl.sh available)
sslscan example.com
# curl with verbose TLS
curl -vI https://example.com/

If -tls1_2 works but the browser fails, the browser may be refusing weak ciphers the server still uses. If every protocol flag fails with “wrong version number”, you are probably not speaking TLS to a TLS port — see SSL wrong version number.

Fix checklist (server)

  1. Enable TLS 1.2 and 1.3; disable TLS 1.0/1.1.
  2. Use a modern cipher list (ECDHE + AEAD: AES-GCM / ChaCha20-Poly1305). Drop RC4, 3DES, export, NULL.
  3. nginx example: ssl_protocols TLSv1.2 TLSv1.3; plus a current ssl_ciphers / ssl_prefer_server_ciphers off;.
  4. Renew old appliances or put them behind a reverse proxy that terminates modern TLS.
  5. Confirm the edge (CDN / load balancer) and origin agree — mismatch can appear only on one path.

Fix checklist (client / app)

  1. Upgrade the browser / OS / language runtime (OpenSSL 1.1.1+, Go 1.13+, Java 8u261+ or 11+ with TLS 1.3).
  2. Do not force TLS1_0 in SDKs; remove ancient SecureProtocol pins.
  3. Corporate SSL inspection: install the org root correctly — a broken intercept often surfaces as protocol/cipher errors too.
  4. Never “fix” with NODE_TLS_REJECT_UNAUTHORIZED=0 — that skips cert trust, not version negotiation, and is unsafe.

Related

Cloudflare Error 525 · Cloudflare Error 526 · SSL wrong version number · ERR_SSL_PROTOCOL_ERROR · certificate has expired · unable to get local issuer certificate · self-signed certificate in certificate chain · net::ERR_CONNECTION_TIMED_OUT · Anvil HTTP status

Questions

What does ERR_SSL_VERSION_OR_CIPHER_MISMATCH mean?

Chrome could not agree with the server on a TLS protocol version or cipher suite, so the secure handshake failed.

What is Firefox SSL_ERROR_NO_CYPHER_OVERLAP?

The same idea: no overlapping cipher (and often version) between client and server.

How is this different from SSL wrong version number?

Wrong version number usually means you spoke HTTPS to a plain HTTP port. Cipher/version mismatch means TLS was attempted but the two sides share no common settings.

How is this different from an expired certificate?

Expired/invalid cert errors happen after the version and cipher are chosen. Mismatch aborts earlier.

How do I fix ERR_SSL_VERSION_OR_CIPHER_MISMATCH on the server?

Enable TLS 1.2/1.3, configure modern ECDHE+AEAD ciphers, and disable TLS 1.0/1.1 and legacy suites. Put ancient appliances behind a modern TLS terminator if needed.

Can a VPN or proxy cause this?

Yes. Broken SSL inspection, an outdated corporate proxy, or a client forced onto TLS 1.0 can remove the overlap.

Published .

Try it

Related guides

Newest guides