宝塔面板 SSL 证书自动化:通配符证书 + 自动续期
宝塔面板建站,证书是最容易出问题的环节:单域名证书三个月到期,忘了续期网站就打不开。这篇文章讲怎么用 acme.sh 实现全自动续期,包括单域名和通配符证书。
为什么推荐 acme.sh
宝塔自带的 Let's Encrypt 申请功能能用,但有两个痛点:
- 单域名证书每次都要手动点续期(宝塔新版有自动续期,但依赖面板任务)
- 通配符证书(*.example.com)必须用 DNS 验证,面板默认不支持
- 验证路径 404:acme.sh 的挑战文件放在
.well-known/acme-challenge/子目录,nginx 配置里如果只放行了根路径,验证会失败。检查location匹配规则。 - 宝塔证书路径不能错:宝塔面板从
/www/server/panel/vhost/cert/<域名>/读证书,文件名必须是fullchain.pem和privkey.pem,否则面板里显示异常。 - 多实例 nginx:有些机器同时装了系统 nginx 和宝塔 nginx,配置写错实例会导致证书验证 404。先确认 80 端口是哪个 nginx 在监听(
ss -tlnp | grep :80)。 - 续期命令:
--reloadcmd里写死 reload 命令,证书更新后自动执行,不需要手动干预。
acme.sh 是社区最成熟的 ACME 客户端:纯 shell 脚本、支持 100+ DNS 服务商、自动续期、自动部署。
方案一:单域名证书(webroot 验证)
适合只有一个域名的情况,验证走网站目录:
# 签发
acme.sh --issue -d blog.example.com --webroot /www/wwwroot/blog.example.com
# 安装到宝塔证书目录
acme.sh --install-cert -d blog.example.com
--key-file /www/server/panel/vhost/cert/blog.example.com/privkey.pem
--fullchain-file /www/server/panel/vhost/cert/blog.example.com/fullchain.pem
--reloadcmd "/www/server/nginx/sbin/nginx -s reload"
nginx 配置里要放行验证路径:
location ~ /.well-known/acme-challenge/ {
allow all;
}
方案二:通配符证书(DNS 验证)
一个证书覆盖所有子域名,新增站点不用再签证书。DNS 验证需要 API 令牌,以 Cloudflare 为例:
# 配置 CF 令牌
export SAVED_CF_Token="你的令牌"
export SAVED_CF_Account_ID="你的账号ID"
# 签发 *.example.com(同时签发裸域)
acme.sh --issue -d "*.example.com" -d example.com
--dns dns_cf --server letsencrypt
acme.sh 会自动调用 CF API 添加 TXT 记录完成验证,签发后自动删记录。续期同样全自动:acme.sh 的 cron 任务每天检查,到期前 30 天自动续签。
方案三:IP 证书(特殊场景)
有些场景证书要签在 IP 上(比如宝塔面板自带端口)。Let's Encrypt 对 IP 证书有效期只有 7 天,必须高频续期:
# 每 5 天续一次
acme.sh --renew -d <IP> --force
配合 cron 每 5 天执行一次,基本不会断。
踩坑记录
总结
一套 acme.sh + CF DNS 的通配符方案,可以覆盖整个域名的所有站点:证书自动签发、自动续期、自动部署,一次配置,之后完全不用管。把 acme.sh --cron 加进系统 cron,它就是最省心的证书管家。
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 江江
评论
隐私政策
0/500
滚动到此处加载评论...
