⭐ 推荐:社区规则条款 V1.0

通配符SSL证书怎么选,能覆盖几级子域名?

阿乐
阿乐 资深会员
发布于 2026-10-25 23:15 ·3 浏览 ·2 回复
内容摘要

通配符SSL证书只覆盖一级子域名且不含根域名,根域名和更深层级需作为SAN一并签发;固定域名少于5个宜用多域名证书,多且动态可用通配符组合,纯技术站点选DV、需展示企业资质选OV。

本文转载自 GJ站长论坛,原文地址:https://www.gj0.com/thread-2555.html
转载请注明出处,版权归原作者所有。

全部回复 2

周末
周末 萌新站长 1楼 2026-10-25 23:37

覆盖层级的结论没错,我再补充几个实际部署中容易出问题的地方。

一、Let's Encrypt 的通配符只能走 DNS-01 验证,HTTP-01 一定失败。用 acme.sh 时 --dns dns_ali 要求先提供 API 凭证(export Ali_Key=xxx Ali_Secret=xxx 后再执行,acme.sh 会把凭证写入 account.conf,后续续期自动使用)。很多人第一次手动签发成功,三个月后自动续期静默失败,就是因为凭证只在当前 shell 有效。建议直接加上 --reloadcmd "systemctl reload nginx",并把续期交给 cron 管理;否则证书更新了但服务没有重新加载,等于没有更新。

二、多通配符和 SAN 的成本结构不一样。 LE 单张证书最多 100 个名字,*.example.com 加 *.b.example.com 放在一张证书里没问题;商业 CA 的多通配符往往是独立 SKU,并非加 SAN 就能解决,报价可能翻倍。如果固定域名少于 5 个,直接买多域名 SAN 证书更便宜,也省去通配符私钥泄露的连带风险。

三、私钥分发是通配符最大的隐性成本。 部署到 CDN、多节点或容器环境时,私钥要分发到每台机器,一旦泄露,所有一级子域名都会受到影响。按业务线拆成 *.api、*.cdn 这类子通配符确实更稳妥;同时把私钥权限设为 600,并且不要提交到 Git。

常见问题:nginx 的 server_name *.example.com 不会匹配 example.com,必须显式写上根域;老版本 Android 对证书链要求严格,务必配置 fullchain.pem,不要只配置 cert.pem,否则浏览器正常,但 App 内请求会报错;续期后顺手用 openssl x509 -noout -ext subjectAltName -in cert.pem 再检查一遍,确认根域仍在列表里。

chinaz
chinaz 初级会员萌新站长 #2900 2楼 2026-10-25 23:53
周末:覆盖层级的结论没错,我再补充几个实际部署中容易出问题的地方。 **一、Let's Encrypt 的通配符只能走 DNS-01 验证**,HTTP-01 一定…

补充得很到位,DNS-01 凭证和 reloadcmd 这两处正是自动续期静默失败的高发区,我再补三个部署细节。

一、续期失败默认是“静默”的,要主动让它响。 acme.sh 装完 cron 后不会通知任何人,建议把 renew 的输出重定向到日志文件,定期检查,或者用 --notify-hook 加上邮件/webhook 通知。另外可以加 --days 30 把续期提前量拉长,DNS 接口临时抽风时不至于一次没续上就进入危险期。想手动验证流程,直接跑一遍 acme.sh --cron --home ~/.acme.sh,能复现 cron 环境下的真实情况。

二、DNS-01 可以用 CNAME 委派,把凭证集中到一处。 把 _acme-challenge.example.com CNAME 到统一的 _acme.zone.example.net,只需要在一个 DNS 服务商那里维护一套 API 凭证,多业务线拆 *.api、*.cdn 时不用给每家都配 key。你说的凭证只在当前 shell 有效的问题,这样也能一并绕开。

三、注意 CT 日志会把 SAN 全部公开。 公网 CA 签发的证书会写进 Certificate Transparency 日志,如果把内网系统的主机名(比如 oa.b.example.com)加进公网证书的 SAN,等于把内部结构公开了。这类服务建议走私有 CA,或者至少别用真实业务命名。

nginx 那边顺手补一句:server_name example.com *.example.com; 写在一行就行,比拆两个 server 块省事。另外 reloadcmd 失败时 acme.sh 只在日志里记一条,建议改成 nginx -t && systemctl reload nginx,避免配置有问题导致 reload 失败、而证书其实已经换掉了。