ERR_SSL_VERSION_OR_CIPHER_MISMATCH means the browser and the server share no TLS protocol version or cipher suite, so the secure connection can't be set up. Modern browsers only speak TLS 1.2 and 1.3 with strong ciphers. A server that offers only TLS 1.0/1.1, only obsolete ciphers, or no usable certificate for the hostname triggers this error.
This site can't provide a secure connection
example.com uses an unsupported protocol.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
In DevTools it appears as net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH. Firefox shows SSL_ERROR_UNSUPPORTED_VERSION or SSL_ERROR_NO_CYPHER_OVERLAP, and command-line clients print errors like:
curl: (35) error:0A000102:SSL routines::unsupported protocol
error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
Common causes
- The server only supports TLS 1.0 or 1.1. Chrome, Edge, Firefox and Safari have all removed them. Old appliances, embedded web UIs, legacy IIS and old Java servers are typical.
- Only obsolete ciphers are enabled. RC4, 3DES or export-grade suites that browsers no longer offer.
- No certificate for that hostname. The server has no certificate matching the SNI name, or the certificate uses a key type the server's TLS configuration can't use.
- Cloudflare edge certificate not ready. Universal SSL hasn't been issued yet for a new domain, or the hostname is a second-level subdomain (
a.b.example.com) that Universal SSL doesn't cover. - Something in the middle. Antivirus HTTPS scanning or an outdated corporate proxy that re-negotiates TLS with old settings.
How to fix it as a visitor
- Update your browser and operating system.
- Try another browser or network to see whether it's your device or the site.
- Turn off antivirus HTTPS or "web shield" scanning briefly to test.
- If the site is old or internal, contact its owner. Current Chrome has no setting to re-enable TLS 1.0/1.1, and doing so wouldn't be safe.
How to fix it as a developer or ops
Enable modern TLS. For nginx:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
# Cipher list: use Mozilla's "intermediate" configuration for your server version.
On Apache use SSLProtocol -all +TLSv1.2 +TLSv1.3. On Windows/IIS, enable TLS 1.2 in the registry or with a tool like IIS Crypto, and on old Java runtimes upgrade the JDK.
Test what the server offers:
openssl s_client -connect example.com:443 -servername example.com -tls1_2
openssl s_client -connect example.com:443 -servername example.com -tls1_3
nmap --script ssl-enum-ciphers -p 443 example.com
If both openssl commands fail, the server has no modern protocol enabled. An online checker such as SSL Labs gives the same picture with a grade.
Check the certificate binding. Confirm the hostname has a certificate in the server block or virtual host that actually answers for it, and that requests with SNI reach it.
On Cloudflare, open SSL/TLS > Edge Certificates and check that a certificate covers the hostname and is active. For deeper subdomains, add an advanced certificate or flatten the hostname.
On a webhook endpoint
The same mismatch happens between machines, and there's no browser message to see. A legacy sender (an old ERP, an on-prem appliance, an IoT controller) that can only do TLS 1.0/1.1 tries to post a webhook to a modern endpoint, and the handshake fails with unsupported protocol or protocol_version. The event never arrives.
The usual workaround is lowering TLS on the receiving server, which weakens every connection to it for one old client. A better option is to give the legacy sender its own Webhook Relay input with TLS compatibility:
- Minimum TLS version per input. The default is TLS 1.3; lower it to TLS 1.2 for senders that need it (Business and Pro).
- Legacy TLS compatibility accepts TLS versions down to 1.0 and a wider legacy cipher set on that one input (Pro).
Webhook Relay completes the old handshake on that input and forwards the event onward over modern TLS. Every other input stays on TLS 1.3. The TLS/SSL error reference lists the exact error strings for curl, OpenSSL, Python, Node.js, Java and Go.
If the browser complains about who signed the certificate rather than about protocols, that's a different error: see ERR_CERT_AUTHORITY_INVALID.
