ERR_SSL_PROTOCOL_ERROR means the secure connection failed during the TLS handshake, the first exchange in which browser and server agree on a protocol version and encryption settings. The cause is usually a server setting, such as outdated TLS versions or a broken virtual host, or something on the network that interferes. Your SSL certificate is rarely the problem.
What causes ERR_SSL_PROTOCOL_ERROR?
The browser and server could not complete the TLS handshake. Most often the server offers only old protocol versions or cipher suites (sets of encryption algorithms) the browser no longer accepts, the server is misconfigured, or a middlebox such as a firewall, proxy or antivirus program breaks the connection.
| Cause | Where it sits | Typical sign |
|---|---|---|
| Server offers only TLS 1.0 or 1.1 | Server | Fails in every current browser, works in old tools |
| No cipher suite in common | Server | Fails after a hardening change or an OS upgrade |
| Port 443 answers with plain HTTP | Server | Fails right after setup or a config edit |
| No certificate configured for this hostname (SNI) | Server | One domain on a shared server fails, others work |
| Firewall, proxy or antivirus inspecting HTTPS | Network or device | Fails only in one office, network or computer |
| QUIC, extension or cached data in the browser | Browser | Fails in one browser, works in another |
Check your server in seconds
Our checker shows which certificate and chain your server sends for a hostname, so you can rule out the certificate side first.
Run the SSL checkerIs my certificate the problem?
Usually not. This error appears when the handshake fails before the browser has finished checking the certificate, so the cause is almost always the server or network configuration. Problems with the certificate itself, such as an expired date or a wrong name, show their own codes like NET::ERR_CERT_DATE_INVALID.
There are exceptions. If the certificate file, private key or chain is missing or does not match, some servers start the HTTPS listener without a usable certificate and break every handshake. Our SSL checker quickly shows whether the certificate side is fine. The overview of SSL certificate errors lists the certificate-specific warnings.
Narrow it down before you change anything
Test another browser and network
If the site works on a phone using mobile data, the problem is local to the first device or network.
Check the certificate side
Confirm a valid certificate and complete chain are served for the exact hostname.
Test the handshake directly
Use openssl s_client from a server or terminal to see which TLS versions the site accepts.
Fix the side that fails
Server issue: follow the server steps below. Device issue: follow the browser steps.
How do I fix it on my server?
Enable TLS 1.2 and TLS 1.3, offer modern cipher suites, and make sure every hostname has its own HTTPS virtual host with a certificate. Then reload the server and test again from outside your network.
1. Enable TLS 1.2 and TLS 1.3
Chrome removed support for TLS 1.0 and 1.1 in Chrome 84 (2020), and other current browsers have done the same. A server that still offers only those versions produces this error. The basic settings look like this:
- Nginx:
ssl_protocols TLSv1.2 TLSv1.3;in the server block - Apache:
SSLProtocol -all +TLSv1.2 +TLSv1.3in the SSL virtual host - IIS: enable TLS 1.2 (and TLS 1.3 where Windows Server supports it) in the Windows SChannel settings, then restart
For the differences between the two versions and how to switch TLS 1.3 on, see TLS 1.2 vs TLS 1.3.
2. Offer current cipher suites
If you hand-picked a cipher list years ago, it may contain only algorithms that browsers have dropped. Use your server’s current recommended defaults, or a list built for TLS 1.2 and 1.3 with ECDHE key exchange and AES-GCM or ChaCha20.
3. Check SNI and virtual hosts
SNI (Server Name Indication) lets one IP address serve different certificates for different hostnames. If a hostname has no HTTPS virtual host, the server may answer with the wrong configuration or none at all. Confirm that port 443 is set up for TLS (for example listen 443 ssl; in Nginx) and that each domain has a certificate assigned. If you need to redo this, follow our guide to install an SSL certificate.
Tip: Test the handshake withopenssl s_client -connect example.com:443 -servername example.com -tls1_2, then repeat with-tls1_3. A failure on both points to the server, not the browser.
How do I fix it in my browser?
If the site works elsewhere, reset the parts of your browser and device that touch encrypted connections. Test one change at a time so you know what fixed it.In a company network, ask IT whether a proxy or firewall inspects HTTPS traffic – that is a common cause they need to fix centrally.
- Open a private window to rule out extensions, then disable them one by one
- Temporarily turn off QUIC in chrome://flags and restart the browser
- Pause your antivirus HTTPS or "web shield" scanning to test
- Check that date, time and time zone are set automatically
- Clear the browser cache and cookies for the site
- Update the browser and operating system
- Try another network to rule out a proxy or firewall
Quick diagnosis table
| What you observe | Most likely cause | Next step |
|---|---|---|
| Every browser and device fails | Server protocol, cipher or listener setting | Enable TLS 1.2/1.3 and check port 443 config |
| Only one domain on the server fails | Missing HTTPS virtual host or SNI mapping | Add the host and assign its certificate |
| Only one computer fails | Antivirus, extension, QUIC or clock | Work through the browser checklist |
| Only one office network fails | Proxy or firewall doing HTTPS inspection | Ask IT to update or bypass the inspection |
Confirm the fix
After changing the server, check the hostname again to make sure the right certificate and chain are served.
Check your site now