通配符 SSL 证书:一个证书管所有子域名
子域名一多,每个都申请 SSL 太麻烦:通配符证书 *.example.com 一次签发,所有一级子域名通用。Let's Encrypt 免费签发,小够讲清 DNS 验证流程、DNS 插件自动续期和面板一键申请三种路子。
我是小够,只推够用的 VPS。
网站做大了,子域名越来越多:www、blog、api、panel、cdn……每个子域名单独申请 SSL,管理起来是灾难:续期时间各不同,漏掉一个就有一个子域名打不开。通配符证书(*.example.com)一次签发,所有一级子域名通用。今天讲 Let’s Encrypt 免费版的申请全流程。
通配符证书和普通证书的区别
普通证书只保一个域名(www.example.com),通配符证书保 *.example.com——blog.example.com、api.example.com、panel.example.com 全都覆盖,一张搞定。
注意两个细节:
- 它不保裸域名。
*.example.com不匹配example.com本身,申请时把裸域名一起加进去(-d "*.example.com" -d "example.com"),一次解决。 - 它只保一级子域名。
*.example.com不匹配a.b.example.com(二级子域名),有这种需求的要单独处理——不过个人建站基本碰不到。
申请流程:DNS 验证
通配符证书只能用 DNS 验证(DNS-01),不能用文件验证——因为你要证明的是"我拥有整个域名",而不只是"这个子域名上有个文件"。流程:
第 1 步:在服务器上运行 certbot(以 Linux 为例):
certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d "example.com"
第 2 步:certbot 会给你一条 TXT 记录,形如 _acme-challenge.example.com,让你去域名 DNS 解析里添加。去你的域名注册商后台(或 Cloudflare/DNSPod),加好这条 TXT 记录,等几分钟生效——可以用 dig -t txt _acme-challenge.example.com 确认。
第 3 步:回到 certbot 按回车,验证通过后证书就签发下来了,同样 90 天有效期,文件在 /etc/letsencrypt/live/ 下。
自动续期:DNS 插件是正解
手动 DNS 验证有个大坑:每次续期都要手动加 TXT 记录。90 天一次,迟早会忘,忘了就是证书过期、网站打不开。正确姿势是用 DNS 插件:certbot 支持各大 DNS 服务商的 API 插件(Cloudflare、阿里云、DNSPod 等都有对应插件),配置好 API 密钥后,续期全自动——插件自己加 TXT 记录、验证、删记录,一气呵成。
配好后先 dry-run 测试:
certbot renew --dry-run
通了再放心。把 certbot renew 加进 cron,每天跑一次,证书永远不过期。记住:任何手动续期的证书,早晚会过期在你最忙的那天。
面板用户更简单
宝塔和 1Panel 的 SSL 管理里,申请 Let’s Encrypt 时直接勾选"通配符",面板会自动处理 DNS 验证——需要你填 DNS 服务商的 API 密钥(去服务商后台申请,只给 DNS 解析权限)。比命令行省心,推荐面板用户走这条路。面板还会自动处理续期,基本零维护。
什么情况下别用通配符
诚实地说两种情况不适合:
- 子域名很少(就 1-2 个):普通证书更简单,别折腾 DNS 验证。
- 子域名分属不同团队/项目:通配符证书的私钥一旦泄露,所有子域名一起遭殃。这种场景下各子域名独立证书,风险隔离更好。
面板之外的选择:acme.sh
不用面板、也不想装 certbot 插件的人,可以试试 acme.sh:纯 Shell 脚本实现,轻量,支持的 DNS 服务商非常多。流程和 certbot 类似:
acme.sh --issue --dns dns_cf -d "*.example.com" -d "example.com"
dns_cf 是 Cloudflare 的 DNS API 模式,换成你用的服务商对应的参数就行。acme.sh 会自动处理续期(它自己装 cron),证书签好后用 --install-cert 装到 Nginx/Apache 的配置目录。
acme.sh 的好处是不依赖 Python 环境,极简系统也能跑;坏处是全命令行,对新手不友好。选哪个看你的 comfort zone——功能上没本质区别。
通配符证书的续期监控
自动续期配好了,也别完全撒手。加个监控:
- certbot 的 cron 输出:让 cron 把执行结果发到你的邮箱,失败了你能第一时间知道。很多系统默认 cron 输出发到 root 邮箱——确认你能收到。
- 在线到期监控:用免费的 SSL 到期监控服务,提前 14 天、7 天、3 天分别提醒。双保险,证书过期这种蠢事故,理论上永远不该发生。
小够见过太多"自动续期配好了,但 DNS API 密钥过期了没人知道"的案例——自动化+监控,才是完整的自动化。
小够总结
子域名超过 3 个,通配符证书就开始划算了:一次申请、全部通用、自动续期。记住三个关键点:必须用 DNS 验证;续期一定要自动化(DNS 插件或面板);API 密钥只给最小权限。证书过期导致网站打不开,是最不该发生的事故——因为它是完全可以避免的。