【Web】证书(SSL/TLS)与域名之间的关系:完整、通俗、可落地的讲解

📘

HTTPS 是否生效,完全取决于:

浏览器访问的"域名"是否与证书中声明的"域名"完全匹配。

换句话说:

HTTPS 的根本规则就是:域名要对得上。

而"对得上"又分三种方式:

  1. 精确匹配
  2. wildcard 匹配(通配符证书)
  3. SAN(多域名证书)匹配

这三种方式决定了:

  • 证书能覆盖哪些域名?
  • 能否支持多级域名?
  • *.example.com 的能力到底有限在哪里?
  • 为什么 *.*.api.example.com 不合法?
  • 为什么实际业务经常用 SAN?

以下按照"是什么 → 为什么 → 怎么做 → 实战规则"结构逐点说明。


一、证书绑定域名:是什么?

HTTPS 证书(SSL/TLS Certificate)中包含:"哪些域名是合法的"。

证书可以绑定两类域名字段:

① Common Name(CN)

早期使用,现在只是兼容项。

通常 CN 会填写主要域名:

复制代码
api.example.com

② SAN(Subject Alternative Name)

🚀 现代浏览器真正用来匹配的就是 SAN 列表。

一个证书可以绑定多个域名:

复制代码
api.example.com
www.example.com
v1.api.example.com

只要域名在 SAN 列表里,证书就合法。


二、证书为什么需要和域名匹配?

HTTPS 的目标是:

保证你访问的网站,真的是它自己声称的域名,而不是假冒的服务器。

因此:

  • api.example.com 就必须用能证明自己确实是 api.example.com 的证书
  • a.api.example.com 是另一个域,不能自动使用它父域的证书
  • 安全性要求高于便利性

这也是为什么"通配符有限制"的核心原因:

为了防止一个证书被滥用到大量不该访问的域名上。


三、证书如何匹配域名?(三种方式)

① 精确匹配(最严格、最安全)

证书写的是:

复制代码
api.example.com

浏览器访问:

  • api.example.com
  • www.example.com
  • v1.api.example.com
  • example.com

精确匹配最安全,但扩展性差。


② wildcard 匹配(通配符证书)

写法如下:

复制代码
*.example.com

这是浏览器和 CA 都支持的,但能力有限:

✔ 能匹配:

  • a.example.com
  • b.example.com
  • anything.example.com

❌ 不能匹配:

  • example.com(根域不能匹配)
  • a.b.example.com(多级不行)
  • v1.api.example.com(不是它这一层的)
  • *.*.example.com(非法格式)

Wildcard 的三大核心限制(非常重要)

  1. 只能有一个 * 号,且只能放在最左端:

    复制代码
    *.example.com ✔
    *.*.example.com ❌
    api.*.example.com ❌
    *.a.example.com ❌
  2. 只能匹配"一层子域"

    复制代码
    *.example.com 只能匹配 a.example.com
  3. 不能"向上"匹配父域

    复制代码
    *.example.com 不能匹配 example.com

这些限制都是为了防止安全风险。


③ SAN 多域证书(最灵活、企业最常用)

可写多个完全不同层级的域名:

复制代码
example.com
www.example.com
api.example.com
v1.api.example.com
admin.v1.api.example.com

特点:

  • ✔ 可以覆盖任意层级
  • ✔ 可以混合不同子域
  • ✔ 可把所有服务整合到一个证书里
  • ✘ 价格较高

适用于:

  • 微服务多域结构
  • 多层 API 域名
  • SaaS 平台大量子域

四、多级域名证书匹配:关键结论

❗ 结论 1:没有所谓"五级证书""六级证书"

证书体系只有三种:

  • 单域名
  • wildcard(一层子域)
  • SAN(多个具体域名)

域名层级多少不重要,重要的是:

"浏览器访问的域名是否在证书允许的范围内"。


❗ 结论 2:通配符不能用在多层

很多人想写:

复制代码
*.*.api.example.com

但这是非法的。

原因:

  • 不符合 RFC / CA/B Forum 标准
  • 通配符只能使用一次
  • 通配符只能在最左端标签
  • 通配符不能匹配多层域

所以:

你想覆盖五级域名:

复制代码
a.b.c.api.example.com

那么能做的只有:

✔ 单独写入 SAN

或者

✔ 在更深一层使用通配符,例如:

复制代码
*.c.api.example.com         → 覆盖所有 [任意].c.api.example.com
*.b.c.api.example.com       → 覆盖所有 [任意].b.c.api.example.com

但每一个 wildcard 仍然只能覆盖"一层"。


❗ 结论 3:Wildcard 不会递归匹配

复制代码
*.example.com

不能覆盖:

这是浏览器强制要求的,不是某家 CA 的限制。


五、如何为你的多级域名正确配置证书?(最实用)

假设你的域名结构如下:

复制代码
example.com
www.example.com
api.example.com
v1.api.example.com
admin.v1.api.example.com
inner.admin.v1.api.example.com

如果你的业务结构是:

  • 子域很多
  • 层级不固定
  • 通配符无法覆盖多层

👉 最佳方案:SAN 证书

把需要的域名全写进去。


如果你的业务只有"一层子域"

复制代码
a.example.com
b.example.com
c.example.com

👉 用:

复制代码
*.example.com

即可。


如果你的业务包含"多层、但同层很多"

例如:

复制代码
xxx.api.example.com
yyy.api.example.com
zzz.api.example.com

👉 用:

复制代码
*.api.example.com

刚刚好。


六、总结(最重要的 7 条原则)

  1. 证书必须与域名一一对应才能通过 HTTPS 校验。
  2. Wildcard 只能匹配一层子域,不支持递归。
  3. *Wildcard 只能有一个 ,且必须在最左侧。
  4. *.*.api.example.com 永远不合法,不会被任何 CA 签发。
  5. 没有所谓"多级证书",只能用 SAN 或更深层的 wildcard。
  6. 多级域名想全部覆盖,最安全也是最常用的是 SAN。
  7. "父域"与"子域"在证书上没有继承关系,各自必须独立声明。
相关推荐
世界尽头与你42 分钟前
SSL 签名相关漏洞
网络·安全·ssl
这是个栗子1 小时前
npm报错 : 无法加载文件 npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
HIT_Weston2 小时前
44、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(一)
前端·ubuntu·gitlab
xu_yule2 小时前
网络和Linux网络-5(应用层)HTTP协议(方法+报头+状态码)
linux·网络·网络协议·http
华仔啊2 小时前
Vue3 如何实现图片懒加载?其实一个 Intersection Observer 就搞定了
前端·vue.js
JamesGosling6663 小时前
深入理解内容安全策略(CSP):原理、作用与实践指南
前端·浏览器
不要想太多3 小时前
前端进阶系列之《浏览器渲染原理》
前端
g***96903 小时前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js
西幻凌云3 小时前
了解计算机网络的“物理根基”——物理层与数据链路层
网络·网络协议·计算机网络·数据链路层·物理层