ERR_SSL_UNRECOGNIZED_NAME_ALERT high
NET::ERR_SSL_UNRECOGNIZED_NAME_ALERT
The server returned a TLS unrecognized_name warning during the SNI handshake because no vhost matches the requested domain.
What you see
This site can't provide a secure connection example.com sent an invalid response. NET::ERR_SSL_UNRECOGNIZED_NAME_ALERT
What’s actually happening
The page dies before any HTML loads, usually on one specific hostname while a sibling subdomain on the same box works fine. During the handshake the server sends a TLS alert (level warning, description 112, unrecognized_name) saying it has no SSL config for the name the client put in the SNI extension. Older Chrome builds tolerated this alert; current ones treat it as fatal and bail. curl often still connects, which throws people off.
Common causes
- No SSL virtual host on the server matches the SNI hostname, so it falls through to a default that rejects the name
- The vhost's ServerName/server_name doesn't include the exact host being requested (e.g. www vs apex, or a new subdomain never added)
- Apache with no default SSL vhost: the first matching :443 block answers and emits the warning when the name doesn't line up
- A certificate installed for one domain while the request comes in for a different, uncovered domain on a shared IP
- Load balancer or CDN origin routing the request to a backend that has no TLS config for that host
How to fix it
- Confirm it's actually the SNI alertRun openssl s_client -connect example.com:443 -servername example.com and watch for 'TLS alert, unrecognized name (112)'. Then try -servername with a name you KNOW works. If the known-good name connects and the broken one alerts, it's a vhost/SNI gap, not a cert problem.
- Add the hostname to a real SSL vhostOn nginx, put the host in server_name on a server {} block listening on 443 ssl with a matching cert. On Apache, add it as ServerName or ServerAlias inside a <VirtualHost *:443> that has SSLCertificateFile pointed at a cert covering that name.
- Define an explicit default :443 vhostGive Apache a default-ssl vhost (or nginx a default_server on 443) so unmatched SNI lands somewhere with a valid cert instead of triggering the warning. This stops one stray hostname from breaking the whole listener.
- Make sure the cert covers the nameCheck the SAN list: openssl x509 -in cert.pem -noout -text | grep -A1 'Subject Alternative Name'. If the requested host isn't in there, reissue with it included (or add a SAN cert for that vhost). A vhost with the right server_name but the wrong cert still fails.
- Reload and retest both namesnginx -t && systemctl reload nginx, or apachectl configtest && systemctl reload apache2. Re-run the s_client check on the previously-broken host. The alert line should be gone and you should see the cert chain instead.
Stop it recurring
When you add a new subdomain, add its vhost and SAN at the same time, and keep an explicit default :443 vhost so unmatched names fail safe.
Related errors