- Chrome
- Exact text checked with the real tool
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Also seen in: Edge, Brave, Opera, Electron apps, Android WebView
In one sentence
Browser and server share no TLS version or cipher suite: usually the server speaks only TLS 1.0 or 1.1, offers outdated ciphers, or lacks a certificate for the name.
Where you see it
As a grey error page in Chrome, Edge and other Chromium browsers. The code is ERR_SSL_VERSION_OR_CIPHER_MISMATCH (−113) in Chromium’s network error list, described there as “The client and server don’t support a common SSL protocol version or cipher suite”.
This site can’t provide a secure connection
www.example.com uses an unsupported protocol.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Under Details, Chrome adds “Unsupported protocol” and “The client and server don’t support a common SSL protocol version or cipher suite.” Edge shows the same code under “The connection for this site is not secure”. Firefox reports the same situations as SSL_ERROR_PROTOCOL_VERSION_ALERT or SSL_ERROR_UNSUPPORTED_VERSION (both with “This website might not support the TLS 1.2 protocol, which is the minimum version supported by Firefox.”) or SSL_ERROR_NO_CYPHER_OVERLAP.
What it means
In the first message of the TLS handshake, the browser lists the TLS versions and cipher suites it accepts. The server must pick one of each. Here the server found nothing it could pick, or refused the browser’s offer outright, so no secure connection was possible. Chromium maps a protocol_version alert, and a handshake_failure alert sent straight after the browser’s first message, to this code (openssl_ssl_util.cc). Current browsers accept only TLS 1.2 and TLS 1.3: RFC 8996 formally deprecated TLS 1.0 and 1.1 in March 2021.
Likely causes
The server only speaks TLS 1.0 or 1.1
Common on old appliances, old management interfaces and servers that were never updated. Confirm by asking for TLS 1.2 only:
openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_2 </dev/null
40C7972B8B7E0000:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1981:
A server that refuses with an alert gives tlsv1 alert protocol version instead. A healthy server shows New, TLSv1.3, Cipher is … or New, TLSv1.2, Cipher is ….
Fix: enable TLS 1.2 and TLS 1.3 on the server. In nginx:
ssl_protocols TLSv1.2 TLSv1.3;
For an appliance, install the vendor’s firmware update; if there is none, put a modern reverse proxy in front of it or replace it. Do not ask users to re-enable old protocols in their browsers.
The server offers no cipher suite the browser accepts
The server may be limited to old or unusual cipher suites, for example after someone copied an outdated cipher list, or on old Java or Windows servers. Confirm: with no shared cipher, the server sends a handshake_failure alert:
openssl s_client -connect www.example.com:443 -servername www.example.com -tls1_2 </dev/null
40E7B3BAB87D0000:error:0A000410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1599:SSL alert number 40
OpenSSL 3.2 and later print ssl/tls alert handshake failure for the same alert.
Fix: use your server’s current recommended defaults or a well-known modern profile: ECDHE key exchange with AES-GCM or ChaCha20-Poly1305 for TLS 1.2, and TLS 1.3, which has its own fixed set. See How to configure TLS securely.
The server or CDN has no certificate for this name
A server that hosts many names chooses the certificate from the name the browser sends (SNI). Some servers and CDNs abort the handshake when they have no certificate for that name, and the browser shows this error rather than a certificate error. Cloudflare, for example, documents this error for names its certificate does not cover, such as a second-level subdomain like test.dev.example.com, or a certificate that is not active yet.
Confirm by comparing the name you visit with what the server offers:
openssl s_client -connect www.example.com:443 -servername www.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
Fix: add the name to a certificate on that server or CDN, or order one that covers it, then wait until it is active.
Check yours
Paste the error, or the last lines of the openssl s_client output. The finder points you to the matching page; the openssl commands above show which TLS versions the server accepts.
Learn why
- The TLS 1.3 handshake: how the client and server agree on a version and a cipher suite.
- Related: ERR_SSL_PROTOCOL_ERROR, curl: (35) and Java’s handshake_failure.
- The standard: RFC 8996, which deprecates TLS 1.0 and 1.1.
Early edition. Checked against the standards; an independent expert review is in progress. Found a mistake? Tell us.