SSL Handshake Failed: Causes and Fixes
-
The SSL/TLS handshake is the short exchange at the start of every HTTPS connection: the client and the server agree on a protocol version and a cipher suite, the server proves its identity with its certificate, and both sides create the keys that encrypt the session. "SSL handshake failed" means this exchange broke off before any page data was sent. The cause can be on the visitor's device, on the web server or, with Cloudflare, between Cloudflare and the origin server. Below are the fixes for visitors first, then for website owners. New to the topic? Read What is SSL/TLS.
- Automatic renewals
- Less manual work
-
-
1
Where you see the error and what it means
Each client words the failure differently:
Where you see it What it means Firefox: "Secure Connection Failed" with SSL_ERROR_HANDSHAKE_FAILURE_ALERT The server sent a handshake failure alert: the two sides could not agree on security parameters, or the server wanted a client certificate. Chrome and Edge: ERR_SSL_VERSION_OR_CIPHER_MISMATCH "This site can't provide a secure connection": the server offers only protocol versions or ciphers that the browser no longer accepts. Chrome and Edge: ERR_SSL_PROTOCOL_ERROR The server "sent an invalid response" during the handshake, often because of a broken SSL configuration or something on the network that interferes. curl: exit code 35, OpenSSL: "sslv3 alert handshake failure" The server rejected the handshake, typically because of a protocol, cipher, SNI or client certificate problem. Despite the name, SSLv3 is not involved. Cloudflare: "Error 525 SSL handshake failed" The visitor's connection to Cloudflare worked, but the handshake between Cloudflare and the origin web server failed. Only the site owner can fix it (step 7). If the browser shows "Your connection is not private" instead, the handshake reached the certificate check and the certificate was rejected: see Your connection is not private.
-
2
Solutions for website visitors
Open the same website on another device and network, for example your phone on mobile data. If it fails there too, the website is at fault and only its owner can fix it. If it works elsewhere, check your own device:
- Check the date and time. A wrong clock makes valid certificates look expired. Turn on automatic date and time, then restart the browser.
- Update your browser and operating system. Old browsers and systems may not support TLS 1.2 or TLS 1.3, which most websites require today.
- Check your antivirus or firewall. Features called "HTTPS scanning" or "SSL inspection" sit between you and the website. Turn the feature off for a moment, or update the product, and reload.
- Turn off VPN, proxy and browser extensions. Test in a private window with extensions disabled. If you changed the browser's TLS settings, reset them to the defaults.
- Choose a client certificate if the site asks for one. Some company, bank or government portals require a personal certificate. Without it, or with the wrong one, the server ends the handshake. On a company computer, ask your IT team.
-
3
Website owners: test the handshake with openssl s_client
Start with our free SSL Checker. For more detail, run openssl s_client from any Linux or macOS terminal (replace www.example.com with your domain):
openssl s_client -connect www.example.com:443 -servername www.example.com openssl s_client -connect www.example.com:443 -tls1_2 openssl s_client -connect www.example.com:443 -tls1_3
The first command shows the certificates the server sends, the negotiated protocol and cipher, and a line such as Verify return code: 0 (ok). The other two test TLS 1.2 and TLS 1.3 separately; a "handshake failure" alert means the server rejected that version or the offered ciphers. Type Q and press Enter to quit. -servername sends SNI, which OpenSSL 1.1.1 and newer also do by default for host names.
-
4
Enable TLS 1.2 and TLS 1.3 with modern ciphers
Current browsers no longer accept TLS 1.0 and 1.1. If the server offers only old protocols or weak ciphers, the handshake fails.
- Nginx: set ssl_protocols TLSv1.2 TLSv1.3; in the server block.
- Apache: set SSLProtocol -all +TLSv1.2 +TLSv1.3 (TLS 1.3 needs Apache 2.4.36 or newer with OpenSSL 1.1.1).
- Ciphers: remove custom cipher lists you do not need, or use a current recommended list. A list that is too strict locks clients out too.
Reload the web server and repeat the tests from step 3.
-
5
Configure SNI and serve the right certificate
With Server Name Indication (SNI) the client tells the server which website it wants, so a server with many sites on one IP address can pick the right certificate. Without a virtual host for the requested name, the server falls back to a default site with no certificate or the wrong one. Make sure every domain and its www version has its own HTTPS virtual host (Nginx server_name, Apache ServerName and ServerAlias) with the correct certificate. Very old clients that do not send SNI cannot reach SNI-only sites; read more in Dedicated IP vs SNI.
-
6
Install a valid certificate with the full chain
An expired certificate, a certificate for another name or a missing intermediate makes the client reject the server. Browsers usually show a certificate warning such as NET::ERR_CERT_DATE_INVALID or NET::ERR_CERT_AUTHORITY_INVALID, while curl, Java, mobile apps and API clients often report a handshake or verification error.
- Install the intermediate certificate next to your certificate (on Nginx, append it to the certificate file). Download the right bundle from our intermediate and root certificates pages.
- Renew an expired certificate and install it on every server and load balancer that serves the site.
- Replace self-signed certificates on public sites. A trusted domain-validated certificate such as Sectigo PositiveSSL costs from $16.00 per year and is issued in minutes.
If the server requires client certificates (mutual TLS), visitors without one cannot finish the handshake, so require them only where needed.
Tip: Automated SSL issues, installs and renews certificates for you, including the correct intermediate chain.
-
7
Fix Cloudflare error 525
Cloudflare shows error 525 only when the SSL/TLS encryption mode is Full or Full (strict) and the handshake between Cloudflare and your origin server fails. Check the origin with your host:
- A certificate is installed on the origin. Full mode accepts any certificate, even a self-signed or expired one, but there must be one. Full (strict) needs a valid certificate from a publicly trusted CA or a free Cloudflare Origin CA certificate that matches the hostname; an invalid certificate there leads to error 526 instead.
- Port 443 is open (or your custom HTTPS port) and the web server listens on it with SSL.
- The origin supports SNI and has an HTTPS virtual host for the hostname.
- The ciphers match. The origin must support at least one cipher suite that Cloudflare uses (see step 4).
To test the origin directly, run the first command from step 3 with the origin's IP address in -connect and your domain in -servername. If the errors come and go, check the web server's SSL error log at those times.
Important: Do not "fix" error 525 by switching Cloudflare to Flexible mode. The traffic between Cloudflare and your server is then unencrypted, and sites that redirect HTTP to HTTPS can end up in a redirect loop.
-
SSL handshake failed: FAQ
01What does "SSL handshake failed" mean?
The client and the server could not finish setting up the encrypted connection, so no page data was exchanged. Usually they could not agree on a protocol version or cipher, or the certificate or SNI setup was wrong.
02Is the problem on my side or on the website?
Open the site on another device and network. If it fails everywhere, the website's server is at fault. If it works elsewhere, check your clock, antivirus HTTPS scanning, VPN, proxy and browser version.
03How do I fix SSL_ERROR_HANDSHAKE_FAILURE_ALERT in Firefox?
Update Firefox, reset changed TLS settings, turn off antivirus HTTPS scanning and VPN for a test and choose the right client certificate if the site asks for one. If the error remains on every device, the server's TLS configuration must be fixed by its owner.
04What causes Cloudflare error 525?
The handshake between Cloudflare and the origin server failed while the SSL mode is Full or Full (strict). Common causes are no certificate on the origin, port 443 closed, no SNI support or no cipher in common with Cloudflare.
05Can an SSL certificate cause a handshake failure?
Yes. An expired certificate, a certificate for another name or a missing intermediate certificate makes clients reject the server. Browsers usually show a certificate warning, while curl, Java and apps often report a handshake error.