宝塔申请免费泛域名SSL证书与自动续期避坑记录

核心导读:记录在宝塔面板配置 Let's Encrypt 免费泛域名证书的过程,重点梳理 DNS API 授权方式、校验超时排查以及后台自动续期任务的注意事项,方便建站备忘。

最近手里几个二级域名的业务站点陆续上线,如果每个子域名都单独申请一张单域名证书,不仅管理起来琐碎,到期维护也很麻烦。趁着周末,我把几个主域名的泛域名证书(通配符证书 *.domain.com)在宝塔面板里统一申请并配置了自动续期。

中间踩了两个关于 DNS API 权限和校验超时的坑,顺手把实操流程和需要注意的细节记下来,留作备忘,也供有同样需求的朋友参考。

1. 为什么泛域名必须配置 DNS 验证

很多人在宝塔申请单域名证书时,习惯直接选“文件验证”,面板会自动在网站根目录下生成验证文件供 CA 机构抓取。这种方式对单个具体域名很方便,但不适用于泛域名证书

CA 机构(如 Let's Encrypt)规范明确要求:申请泛域名通配符证书,必须通过 DNS TXT 记录来证明你对该根域名拥有完整的控制权。如果选择“DNS 手动验证”,虽然能签发成功,但 90 天到期后无法自动化续签,届时站点依旧会因为证书过期而报安全拦截。因此,想要全自动续期,必须使用 DNS 接口(API)自动增删 TXT 记录。

2. 主流 DNS 接口参数配置参考

在宝塔面板的证书申请页面,选择“DNS 接口”时需要填入域名解析服务商的 API 凭证。不同厂商所需要的认证字段不同,整理如下:

DNS 服务商申请入口与凭证类型需要填入的关键参数
Cloudflare用户个人资料 -> API 令牌建议使用 API Token(赋予 Zone:DNS:Edit 权限),尽量不要用全局 Global Key
阿里云(Aliyun)RAM 访问控制 -> 用户 AccessKeyAccessKey ID 与 AccessKey Secret(建议新建只读写 DNS 权限的子账号)
腾讯云(DNSPod)DNSPod 控制台 -> 密钥管理DNSPod Token(ID 与 Token)或腾讯云 API 密钥(SecretId 与 SecretKey)

填入凭证后,在域名输入框中建议同时填写根域名和通配符域名,例如:
example.com
*.example.com

这样签发出来的一张证书可以同时保护裸域名和所有的二级子域名,避免访问根域名时出现证书不匹配的警告。

3. 申请失败的几个常见排查点

点击申请后,宝塔会调用底层 acme 脚本向服务商提交 TXT 记录,并等待 CA 验证。如果出现报错,通常集中在以下几个原因:

  • API 凭证权限不匹配:特别是 Cloudflare,如果配置了 API Token,必须确保包含对应域名的编辑权限;如果使用了限制客户端 IP 的策略,确保服务器的外网 IP 在白名单内。
  • DNS 解析生效延迟:某些域名服务商的海外节点同步较慢,CA 验证服务器抓取不到刚写入的 TXT 记录就会报错。可以稍等两分钟再试一次,或者把域名解析的 TTL 适当调小。
  • 服务器无法连接 Let's Encrypt 节点:有些轻量服务器的出网路由不太稳定,在向外网 ACME 验证节点发起请求时超时。可以在终端里手动测试一下服务器到 acme-v02.api.letsencrypt.org 的网络连通性。

4. 自动续期的生效机制与验证方法

证书申请成功后,宝塔会自动在面板的“计划任务”中添加一条名为“续签Let's Encrypt证书”的定时任务,默认每天凌晨执行一次检测。

该任务的触发逻辑是:只有当证书剩余有效期不足 30 天时,才会真正触发续期流程,并在续期成功后自动重载 Nginx 或 Apache 进程。平时任务即使每天跑,也不会对服务器资源造成任何压力。

配置完成后,建议在宝塔的“计划任务”列表中找到该任务,手动点击一次“执行”,然后查看执行日志。只要日志显示跳过了未到期的域名且没有报错退出,就说明整套自动续期调用链已经正常打通,后续无需人工干预。

常见问题与解答 (FAQ)

Q 为什么申请了泛域名证书后,三级域名(如 a.b.example.com)依然提示不安全?

通配符证书 `*.example.com` 只能匹配一层子域名,不涵盖二级子域名之下的三级域名;如果有三级域名需求,需要单独为其申请 `*.b.example.com` 格式的证书。

Q 配置完泛域名证书后,原先单个站点设置的独立证书需要手动删除吗?

不需要特意删除,只需进入对应站点的“SSL”设置,切换到新签发的泛域名证书并点击保存,Nginx 会自动重新加载新证书。

返回运维知识库