浏览器
SSL_ERROR_BAD_CERT_DOMAIN:Firefox 证书与域名不符怎么修
SSL_ERROR_BAD_CERT_DOMAINSSL_ERROR_BAD_CERT_DOMAIN 的意思是:网站证书是签给另一个域名的,不包括你正在访问的这个。 证书本身可能完全有效,只是覆盖不到这个名字。这类问题基本都在服务器端修。
先判断是网站的问题还是你电脑的问题
外部检测的 SAN 列表里没有这个域名,是站长要修;外部检测正确而 Firefox 看到的证书不同,是网络在替网站应答。用 SSL 检测 看证书里有哪些域名:
curl ssl.sh/example.com
网络原因常见的是公共 Wi-Fi 认证页、DNS 过滤、hosts 文件条目,或者替别的网站应答的代理。另外检查一下是不是域名打错了、收藏夹里存的是早就停用的旧域名。
原因
下面 5 种原因归结为一点:证书的 SAN 列表没覆盖访问的域名,或者服务器返回了别的网站的证书。
1. 缺 www 或主域名
证书只覆盖 example.com,没覆盖 www.example.com,或者反过来。查看证书里的域名:
echo | openssl s_client -connect example.com:443 -servername www.example.com 2>/dev/null \
| openssl x509 -noout -ext subjectAltName
2. 通配符匹配不上
*.example.com 只覆盖一级,不匹配 example.com,也不匹配 dev.api.example.com。
3. 虚拟主机或 SNI 落到了默认站点
请求的域名没有匹配到任何 server 块,服务器就拿默认站点的证书应答,那是别的网站的证书。常见于先把域名解析到服务器、还没在 Web 服务里配置这个站的时候。宝塔面板里要在对应网站的“域名管理”里加上这个域名。
4. CDN 或负载均衡没绑这个域名的证书
阿里云/腾讯云 CDN 的加速域名没开 HTTPS 或没绑证书,节点就返回通用证书。每个加速域名都要绑定能覆盖它的证书。
5. 用 IP 或内网短名访问
输入 https://203.0.113.10 或内网短域名,几乎不可能和证书匹配。用证书签发时的完整域名访问。
在各浏览器/系统上的样子
同一问题在 Chrome、Edge、360 和 QQ 浏览器里是 NET::ERR_CERT_COMMON_NAME_INVALID,curl 报 no alternative certificate subject name matches target host name。
| 浏览器 | 显示内容 |
|---|---|
| Firefox | “警告:面临潜在的安全风险”,说明该网站使用的证书对 example.com 无效 |
| Chrome / Edge / 360 / QQ 浏览器 | NET::ERR_CERT_COMMON_NAME_INVALID |
| Safari | “此连接非私人连接” |
| curl | no alternative certificate subject name matches target host name |
站长怎么修
修法是让证书的 SAN 覆盖访客会用到的每个域名,并让每个域名落到正确的 server 块。
1. 一张证书写全所有域名。 访客会用到的每个域名都申请进去:
sudo certbot certonly --nginx -d example.com -d www.example.com
向商业 CA 申请需要 CSR 的话,CSR 生成器 会帮你把 SAN 写好。在阿里云、腾讯云申请免费单域名证书时,它通常只覆盖你填写的那一个域名(有的会附带 www),多个子域名要分别申请或改用多域名证书。
2. 每个域名对应正确的 server 块。
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
}
3. 改完逐个检查。 分别运行 curl ssl.sh/example.com 和 curl ssl.sh/www.example.com,都通过后,用 301 跳转统一到你的首选域名。
常见问题
SSL_ERROR_BAD_CERT_DOMAIN 能加例外吗?
只要网站没开 HSTS,Firefox 允许加例外。但只有在用 IP 或内网名访问你自己的设备时才说得过去。公开网站出现域名不符,可能说明你连到的不是那台服务器。
为什么只有在酒店、机场、高铁 Wi-Fi 上才出现?
这些网络的认证页会截住你的请求,用它自己的证书应答。先完成 Wi-Fi 登录认证,见 公共 Wi-Fi 认证页报错。
example.com 的证书能用在 www.example.com 上吗?
只有 SAN 里同时列了 www.example.com 才行。很多商业 CA 下单时会自动送 www,但 ACME 客户端只签你明确写出来的域名。
网站刚接入 CDN 就出现这个错误,哪里变了?
访客现在连的是 CDN 节点而不是你的源站,节点出示的是 CDN 账户里给这个加速域名绑定的证书。没签发也没上传的话,节点会拿一张别的域名的默认证书来应答。在阿里云/腾讯云 CDN 控制台给每个加速域名绑定能覆盖它的证书,再用 curl ssl.sh/example.com 确认节点发出的证书是对的,而不只是源站。