You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Certbot搭配Apache的通配符SSL证书无法匹配二级子域名如何解决

问题根因

你遇到的证书不匹配问题是SSL通配符证书的固有规则导致的,和Certbot、Apache配置无关:

  • 单通配符*.example.com仅能匹配直接在example.com下的一级子域名,不能跨层级匹配a.b.example.com这类多级子域名
  • Let's Encrypt官方不支持签发包含多个通配符的证书(比如*.*.example.com),所以Certbot才会返回对应的报错,这个限制是CA侧的,不是Certbot的问题

解决方案

方案1:在现有证书中添加指定层级的通配符域名

这是最省事的方案,Let's Encrypt允许单张证书最多添加100个SAN(主体备用名称)条目,你可以把需要用到的多级通配符都加到同一张证书里。
比如你需要支持所有*.test.example.com的子域名,重新执行证书签发命令,把所有需要的域名都带上即可:

certbot certonly --你的DNS插件参数 -d example.com -d *.example.com -d *.test.example.com

如果还有其他二级前缀的子域名需要支持,比如*.prod.example.com,直接在命令后追加-d *.prod.example.com即可,只要总数不超过100都可以正常签发。
签发完成后修改Apache配置的ServerAlias条目,匹配对应层级的域名:

ServerName example.com
ServerAlias *.example.com *.test.example.com *.prod.example.com

重启Apache后就可以正常访问多级子域名了。

方案2:分层签发单独的证书

如果你的多级子域名分属不同业务,需要单独管理证书,可以给每个二级前缀单独签发通配符证书:
比如给test二级域单独签发证书:

certbot certonly --你的DNS插件参数 -d *.test.example.com

然后在Apache中配置对应虚拟主机,指定该证书的路径即可,DNS插件会自动识别需要添加的验证记录层级,不需要手动调整插件生成的JSON文件。

方案3:直接添加具体的多级子域名到证书

如果用到的多级子域名数量少且固定,可以直接把完整域名加到证书里,比如:

certbot certonly --你的DNS插件参数 -d example.com -d *.example.com -d test1.test.example.com -d test2.test.example.com

这种方式不需要加通配符,适合临时使用的场景。


内容的提问来源于stack exchange,提问作者TVA van Hesteren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:15:03