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
- TCP connected (so this is not ERR_CONNECTION_TIMED_OUT or connection refused).
- TLS ClientHello offered versions + ciphers the client supports.
- Server could not pick any overlapping version/cipher → mismatch error.
vs similar TLS errors
| Error | Means |
|---|---|
| ERR_SSL_VERSION_OR_CIPHER_MISMATCH | No shared TLS version or cipher suite |
| SSL wrong version number | Client spoke TLS to a plain-HTTP port (or vice versa) |
| ERR_SSL_PROTOCOL_ERROR | Broader TLS protocol failure mid-handshake |
| certificate has expired | Handshake got far enough to reject the cert dates |
| unable to get local issuer / self-signed in chain | Chain/trust problem after version/cipher agreed |
| ERR_CERT_COMMON_NAME_INVALID | Name on cert does not match the host |
Frequent real causes
- Server only offers TLS 1.0 / 1.1 — modern Chrome/Firefox/Safari disabled those; clients need TLS 1.2+ (ideally 1.3).
- Cipher suites all legacy — only RC4, 3DES, export ciphers, or RSA-key-exchange-only suites that current browsers refuse.
- Very old OpenSSL / Java on the server — appliance, old IoT admin UI, ancient Windows Server IIS defaults.
- Client forced too new or too old — corporate MITM proxy, custom
MinProtocol/CipherString, or an SDK pinned to TLS 1.0. - SNI / wrong vhost — rarer for pure cipher mismatch; more often wrong-cert errors. Still worth confirming you hit the intended host.
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)
- Enable TLS 1.2 and 1.3; disable TLS 1.0/1.1.
- Use a modern cipher list (ECDHE + AEAD: AES-GCM / ChaCha20-Poly1305). Drop RC4, 3DES, export, NULL.
- nginx example:
ssl_protocols TLSv1.2 TLSv1.3;plus a currentssl_ciphers/ssl_prefer_server_ciphers off;. - Renew old appliances or put them behind a reverse proxy that terminates modern TLS.
- Confirm the edge (CDN / load balancer) and origin agree — mismatch can appear only on one path.
Fix checklist (client / app)
- Upgrade the browser / OS / language runtime (OpenSSL 1.1.1+, Go 1.13+, Java 8u261+ or 11+ with TLS 1.3).
- Do not force
TLS1_0in SDKs; remove ancientSecureProtocolpins. - Corporate SSL inspection: install the org root correctly — a broken intercept often surfaces as protocol/cipher errors too.
- 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 .