很多人第一次给网站配置 HTTPS 证书时,都会遇到这个提示:
您的连接不是私密连接
攻击者可能会试图窃取您的信息(例如密码、消息或信用卡信息)。
net::ERR_CERT_COMMON_NAME_INVALID
明明在主域名上是安全的,结果访问一个子域名却提示"不安全",这到底是怎么回事?
别急,我们一步步来讲清楚。
一、问题现象
比如,你的网站主域名访问正常:
https://backend.example.cn
但当你访问一个带前缀的子域名时:
https://a.backend.example.cn
浏览器却直接报错:
此服务器无法证明它是 a.backend.example.cn;
其安全证书来自 example.cn。
出现此问题的原因可能是配置有误或您的连接被拦截了。
二、问题原因:证书域名不匹配
HTTPS 报错的根本原因是------当前访问的域名不在证书的有效范围内。
举个简单的例子:
- 你申请的证书是给
example.cn或*.example.cn的; - 访问的却是
a.backend.example.cn。
浏览器发现证书的"通用名称(Common Name)"与访问的域名不匹配,就会立刻拦截,提示连接不安全。
三、了解域名的层级结构
要弄懂这个问题,我们必须先明白"一级域名"和"二级域名"是什么意思。
从右往左看,一个域名是分层的:
| 层级 | 示例 | 说明 |
|---|---|---|
| 顶级域名 (TLD) | .cn |
国家或行业域,比如 .com、.net、.cn |
| 一级域名 (主域名) | example.cn |
你注册的域名 |
| 二级域名 | backend.example.cn |
一级域名下的子域名 |
| 三级域名 | a.backend.example.cn |
二级域名的子域 |
| 四级域名 | b.a.backend.example.cn |
三级域名的再下一层 |
四、通配符证书的匹配规则
SSL 证书在签发时,会定义它可以保护哪些域名。
常见的几种类型如下:
| 证书类型 | 能保护 | 不能保护 |
|---|---|---|
example.cn(单域) |
仅保护 example.cn |
❌ 无法保护任何子域 |
*.example.cn(一级通配) |
保护所有一级子域,如 www.example.cn、api.example.cn |
❌ 不保护 a.backend.example.cn(三级域) |
*.backend.example.cn(二级通配) |
保护 a.backend.example.cn、b.backend.example.cn 等 |
❌ 不保护 backend.example.cn 本身 |
⚠️ 注意:
通配符只匹配一层,不会跨层。
五、如何验证证书包含哪些域名
如果你想查看服务器证书究竟覆盖哪些域名,可以使用 OpenSSL 命令:
bash
echo | openssl s_client -connect backend.example.cn:443 2>/dev/null | openssl x509 -noout -text | grep DNS
你会看到类似这样的输出:
DNS:example.cn, DNS:*.example.cn
如果这里没有 a.backend.example.cn,那就说明证书不支持这个子域。
六、解决方案
✅ 方案一:申请新的通配符证书(推荐)
最简单的方式就是申请一个更细层的通配符证书,例如:
*.backend.example.cn
这样就能覆盖:
a.backend.example.cn
b.backend.example.cn
而不会再报错。
✅ 方案二:直接使用已有的一级子域
如果 a.backend.example.cn 只是临时调试用,可以直接使用:
https://backend.example.cn
只要访问的是证书覆盖的域名范围,浏览器就不会警告。
✅ 方案三:申请多域名(SAN)证书
有些证书支持同时绑定多个域名(称为 SAN,多域名证书):
example.cn
backend.example.cn
a.backend.example.cn
这种方式虽然麻烦一点,但对于多站点统一管理非常方便。
七、总结对比表
| 访问地址 | 属于哪层 | 若证书为 *.example.cn 是否有效 |
|---|---|---|
backend.example.cn |
二级域名 | ✅ 匹配 |
a.backend.example.cn |
三级域名 | ❌ 不匹配 |
api.example.cn |
二级域名 | ✅ 匹配 |
b.a.backend.example.cn |
四级域名 | ❌ 不匹配 |
八、结语
当你看到"您的连接不是私密连接"时,不要慌。
它不是服务器坏了,也不是有人在攻击,而是浏览器在保护你------提醒证书与访问的域名不符。
只要你:
- 了解域名的层级结构;
- 知道通配符证书的匹配规则;
- 按需重新签发合适的证书;
这个问题就能轻松解决。
💡 小贴士:
建议为每个主要业务模块(如前端、后端、API)使用独立二级域名;
再针对它们申请相应的 HTTPS 证书。
既安全,又方便后续维护。