ERR_SSL_PROTOCOL_ERROR

DIRECT ANSWER
ERR_SSL_PROTOCOL_ERROR means the browser could not complete a TLS handshake with the server. Common causes include plain HTTP on port 443, an incorrect HTTPS virtual host, a CDN or proxy mismatch, or an incompatible TLS configuration. Test the HTTPS endpoint and certificate from the server or network side before changing browser settings.
Key takeaways
- First determine whether port 443 is speaking TLS; a plain HTTP response or another protocol on that port commonly triggers this error.
- A certificate may be present but unusable if it is expired, lacks the requested hostname, is missing intermediates, or was not loaded after renewal.
- CDN, reverse-proxy, and load-balancer settings must match the origin’s actual HTTPS protocol, port, hostname, and certificate configuration.
- Use
openssl s_clientwith SNI to distinguish a listener problem from certificate selection, chain, or TLS-policy problems. - Do not permanently disable certificate verification; correct the origin certificate and TLS configuration instead.
Site Administrator
What this error means & how to recognize it
- Chrome or Edge reports “This site can’t provide a secure connection” with
ERR_SSL_PROTOCOL_ERROR. - The failure may affect the entire site, one subdomain, or only one hostname behind a proxy or load balancer.
- Plain HTTP on port 80 may work while HTTPS fails, indicating a problem in the TLS path rather than necessarily in the application.
- The error may start after a certificate renewal, server migration, web-server configuration change, CDN change, or change to the service listening on port 443.
- A direct origin test and a public hostname test may produce different results when a CDN, reverse proxy, or load balancer is involved.
Root causes, ordered by likelihood
- Port 443 is serving plain HTTP or another non-TLS protocol. The HTTPS listener may be missing, or the wrong service may have bound to port 443. The browser then receives data that is not a TLS handshake.
- The HTTPS virtual host or server block is incorrect. The server may listen on the wrong address, select the wrong hostname, or lack the TLS directives required by the web server.
- A CDN, reverse proxy, or load balancer has an origin mismatch. The proxy may be using HTTP while the origin expects HTTPS, or it may connect to the wrong port or backend.
- The TLS configuration is incompatible or malformed. Unsupported protocol versions, restrictive cipher settings, SNI routing problems, or a misconfigured TLS-terminating device can stop the handshake before certificate validation.
- The certificate or chain is unusable. An expired certificate, missing intermediate certificate, or certificate that does not cover the requested hostname can prevent a secure connection. Some browsers and connection paths show a more specific certificate warning instead.
- A renewed certificate was not loaded by the service. Updating certificate files on disk does not change the certificate presented by a running web server until its configuration is reloaded or restarted according to the service’s documented procedure.
How to fix it
1. Establish whether the failure is public, origin-specific, or local
Try the exact failing hostname from a second network or device. If only one computer fails, check local security software, interception proxies, and system time. If every client fails, continue with the server, proxy, CDN, or load-balancer investigation.
If HTTP works but HTTPS does not, focus on the TLS listener, port 443, certificate selection, and any proxy between the client and origin. Do not assume that an HTTP success proves the HTTPS configuration is correct.
2. Test the TLS handshake without changing server state
From an administrative terminal with network access to the endpoint, run:
openssl s_client -connect [your-hostname]:443 -servername [your-hostname] -showcertsThe -servername option matters when SNI selects certificates or virtual hosts. Record whether the handshake starts, which certificate is returned, the certificate expiry, the Subject Alternative Name hostnames, and whether intermediate certificates are included.
- If the connection returns plain HTTP or fails before any certificate appears, inspect the port 443 listener and proxy routing.
- If a certificate is returned, compare it with the requested hostname and check its validity dates and chain.
- If a direct origin test works but the public hostname fails, inspect the CDN, reverse proxy, load balancer, or DNS path rather than changing the application.
3. Verify the HTTPS listener and hostname routing
With appropriate server access and authorization, inspect the active web-server configuration and confirm that:
- the intended service is listening on port 443;
- the HTTPS server block or virtual host is enabled;
- the requested hostname is included in the relevant
server_nameorServerName/ServerAliassettings; - TLS is enabled for that listener; and
- the certificate and private-key paths point to the intended files.
For Nginx, check the enabled server block and its listen 443 ssl configuration. For Apache, check the <VirtualHost *:443> configuration and SSLEngine on. Do not copy directives between products without checking the syntax and version supported by the installed server.
4. Validate the certificate and chain
Confirm that the presented certificate:
- is not expired or prematurely invalid;
- covers the exact hostname in its Subject Alternative Name entries;
- matches the corresponding private key; and
- is accompanied by the required intermediate certificate chain.
A certificate for the bare domain does not automatically cover every subdomain. The subdomain must be listed explicitly or covered by an appropriate wildcard certificate. If the server presents only the leaf certificate, install the chain file supplied by the certificate authority in the format required by the web server.
5. Check renewal and certificate loading
For a Certbot-managed deployment, an administrator can run certbot renew --dry-run to test the renewal workflow without issuing a production certificate. Review the output, renewal configuration, permissions, and the service’s reload hook.
If renewal succeeded but clients still receive the old certificate, confirm that the web server or TLS-terminating proxy has loaded the new files. A reload or restart changes service state and should be performed only during an approved maintenance window, with a rollback plan and the product’s documented procedure. Keep this operational action separate from read-only diagnostics.
6. Inspect CDN, proxy, and load-balancer TLS settings
Identify where TLS terminates: at the CDN, edge proxy, load balancer, or origin server. Verify that the configured origin protocol and port match what the origin actually serves.
If a CDN offers modes such as Flexible, Full, or Full (strict), select the mode that matches the origin’s real configuration and certificate validity. A less strict mode may hide the underlying problem or create a different failure; it is not a durable substitute for a valid origin certificate. Make configuration changes only with authorization, then retest both the public hostname and the origin path where possible.
7. Check for protocol, SNI, or network-device interference
If the endpoint presents a valid matching certificate but the handshake still fails, compare results from different networks and TLS clients. Review firewall, load-balancer, web-application-firewall, and TLS-inspection settings for blocked protocol versions, unsupported cipher policies, incorrect SNI routing, or altered traffic. Preserve the handshake output and relevant server logs for the hosting provider or network administrator.
Prevention & how to verify the fix
- Monitor certificate expiry independently of the renewal mechanism and alert before certificates become invalid.
- Test renewal in a non-production or dry-run workflow and verify that the service reload hook actually presents the new certificate.
- Keep a documented inventory of every hostname, TLS termination point, certificate, private key, and intermediate chain.
- After changes to certificates, proxies, load balancers, or port mappings, test the public hostname and each important subdomain.
- Review TLS configuration changes for SNI, protocol-version, cipher, and origin-port compatibility before deployment.
- Retain recent server, proxy, and certificate details so a failed handshake can be compared with the last known-good configuration.
When to get outside help
Escalate to the hosting provider, CDN, load-balancer administrator, or network team when the endpoint returns a valid matching certificate and complete chain but the handshake still fails. Include the exact hostname, time of failure, whether the test was direct or through a proxy, the openssl s_client results, relevant web-server or proxy logs, and recent configuration changes. Avoid sharing private keys or other secrets.
Escalation is also appropriate when you cannot identify which service terminates TLS or when a certificate change, reload, or restart requires provider-level access. Keep any restart or reload within the provider’s approved maintenance and rollback procedures.
Frequently asked questions
Is ERR_SSL_PROTOCOL_ERROR caused by an expired certificate?
It can be related to certificate validity, but an expired certificate more commonly produces a certificate-specific warning. Check the complete handshake result rather than assuming the browser error identifies the exact certificate problem.
Why does HTTP work while HTTPS shows ERR_SSL_PROTOCOL_ERROR?
HTTP and HTTPS normally use different ports and listeners. If HTTP works but HTTPS fails, the application may be healthy while port 443 has a missing HTTPS configuration, a wrong service, or a proxy-to-origin TLS problem.
What does openssl s_client reveal for this error?
It shows whether a TLS handshake begins, which certificate the endpoint presents, whether SNI selects the expected certificate, and what certificate chain is returned. This helps distinguish a non-TLS listener from a certificate, chain, or TLS-policy problem.
Can a certificate for the main domain cover a subdomain?
Not automatically. The requested subdomain must appear in the certificate’s Subject Alternative Names or be covered by a suitable wildcard entry. A certificate covering only the bare domain is not sufficient for every subdomain.
How do I troubleshoot this error with Cloudflare or another CDN?
Determine whether the error occurs between the browser and CDN or between the CDN and origin. Check the configured origin hostname, port, protocol, certificate validity, and verification mode. Correct the origin configuration rather than permanently weakening certificate verification.
Why does the old certificate remain after renewal?
The renewal process may have written a new certificate to disk without reloading the service that terminates TLS. Confirm the active endpoint’s presented certificate and review the service reload hook before making an authorized reload or restart.
Further documentation
For authoritative implementation details, consult the current documentation for the web server or TLS terminator in use, the certificate authority or Certbot renewal documentation, and the CDN or reverse-proxy provider’s TLS-origin configuration guide. The appropriate references depend on where TLS terminates and which server product is installed. Use the relevant product documentation for certificate-chain format, reload procedures, supported protocol settings, SNI behavior, and proxy modes.