NET::ERR_CERT_COMMON_NAME_INVALID 怎么解决
该错误表示证书的域名列表(SAN)不包含你访问的域名。排查:对比证书 SAN 与访问域名、检查 www 与非 www 是否都覆盖、DNS 是否指错服务器。附站长修复与用户侧应对。
一句话回答:这个错误的意思是"证书上没有你正在访问的这个域名"——证书的 SAN 列表与地址栏域名对不上。站长视角按三处查:证书 SAN 是否包含该域名(含 www/非 www 两种形态)、DNS 是否把域名指到了没有它证书的服务器、重定向是否把用户带去了证书未覆盖的域名。修复就是给证书补上该域名(重签/SAN/泛域名)或修正指向。
先看清证书实际覆盖谁
echo | openssl s_client -connect 域名:443 -servername 域名 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
把输出里的 SAN 列表与地址栏的域名逐字对比。高频不匹配模式:
| 访问 | 证书只有 | 结果 |
|---|---|---|
www.example.com |
example.com |
❌ 报错 |
example.com |
www.example.com |
❌ 报错 |
a.b.example.com |
*.example.com |
❌ 泛域名只盖一级 |
| 域名 A | 服务器上默认站点的证书 B | ❌ 串站 |
站长修复方案
1. 证书缺形态就补上
最常见的坑:证书只签了 example.com,用户输 www.example.com 就报错。重签证书时把两个形态都加进 SAN(Let's Encrypt:certbot -d example.com -d www.example.com),泛域名 *.example.com 不覆盖 example.com 本身,裸域仍要单列 SAN。
2. 检查重定向链路
http→https、非 www→www 的跳转链上,每一跳的目标域名都要在对应证书里。跳转目标的证书没配好,用户在中间那跳就被拦下。
3. DNS/服务器错位
域名指到了别人的服务器(迁移后没改 DNS、共享主机默认站点),返回的自然是别人的证书。dig 域名 确认解析目标。
4. SNI 缺失场景
老客户端不发 SNI 时拿到默认证书——给默认 server 块配兜底证书,或放弃对上古客户端的支持。
证书部署完成后,分别请求裸域、www 和实际使用的子域。若用观测云 HTTPS 拨测持续验证,为各入口建立独立任务并保留证书校验,先确认请求命中预期站点;证书剩余天数则可单独在 SSL 拨测中设置判断条件。
访客侧怎么办(你不是站长)
- 检查网址拼写(
example.comvsexamp1e.com) - 试 https 与另一种形态(加/去掉 www)
- 确认系统时间正确
- 不要绕过警告提交账号、密码或其他敏感信息;让管理员修复域名与证书映射
常见问题(FAQ)
Q:证书里有这个域名,为什么还报?
A:确认你看到的就是服务器实际返回的证书(用上面 openssl 命令,别看本地保存的旧证书);CDN 场景检查边缘证书和回源 Host 配置;多服务器负载均衡场景可能只有一台证书没更新。
Q:和内网的 ERR_CERT_AUTHORITY_INVALID 是同一回事吗?
A:不是。COMMON_NAME_INVALID 是"域名对不上";AUTHORITY_INVALID 是"签发者不被信任"(自签/内部 CA)。内网服务两个错误常一起出现,自签证书 + 域名不匹配的组合很典型。
Q:改完证书多久生效?
A:直连服务器成功重载后,新握手通常使用新证书;CDN/负载均衡终止 TLS 时,边缘证书需单独部署并等待传播。既有连接和会话恢复也可能影响观察,逐入口重新握手验证。
参考资料
本文依据官方资料核对,未进行现场运行测试;代码与配置示例需结合实际版本、权限和环境验证。
- docs.openssl.org:openssl s client
- nginx.org:configuring https servers
- docs.guance.com:http
- docs.guance.com:ssl
- docs.guance.com:synthetic test detection