侧边栏壁纸
博主头像
西瓜码农

成功需要脚踏实地,一步一个脚印

  • 累计撰写 128 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

宝塔面板自动续签SSL证书教程 - Linux服务器免维护方案

一、为什么要自动续签 SSL 证书?

Let's Encrypt 提供的免费 SSL 证书有效期只有 90 天,如果忘记续签,网站就会弹出"不安全"警告,访客直接吓跑。手动续签不仅麻烦,还容易忘,所以自动化续签是刚需

好消息是,宝塔面板已经内置了续签脚本,只需要配置一个定时任务,就能实现全程无人值守的证书更新。

二、前提条件

  1. 证书是通过宝塔面板 → 网站 → SSL → Let's Encrypt 申请的(免费、90 天有效期)。
  2. 推荐使用 DNS 验证方式(支持泛域名、成功率更高,不受 80/443 端口限制)。
  3. 宝塔面板版本 ≥ 7.7(内置 acme_v2.py 续签脚本)。

三、核心方案:宝塔内置自动续签脚本

3.1 续签命令

一行命令搞定续签、覆盖旧证书、重载 Nginx:

/www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew=1 2>&1 | tee -a /www/wwwlogs/ssl_renew.log

参数说明:

  • --renew=1:仅在证书剩余有效期 ≤ 20 天时才触发续签,避免频繁请求 Let's Encrypt 服务器。
  • 续签成功后会自动覆盖旧证书文件自动重载 Nginx,无需手动 reload。
  • 日志输出到 /www/wwwlogs/ssl_renew.log,方便后续排查问题。

3.2 在宝塔添加计划任务

通过宝塔 Web 界面添加定时任务,步骤如下:

  1. 登录宝塔面板 → 左侧菜单点击【计划任务】→ 点击【添加定时任务】
  2. 按以下配置填写:
    • 任务类型:Shell 脚本
    • 任务名称:SSL证书自动续签
    • 执行周期:每天 03:01(凌晨低峰时段,不影响白天访问)
    • 执行用户:root(必须 root,否则权限不足无法写入证书文件)
    • 脚本内容:粘贴上面的续签命令

宝塔计划任务配置截图

  1. 保存后,点击【执行一次】测试,查看日志是否出现 renew success 字样。

四、证书路径与 Nginx 配置确认

宝塔 Nginx 的证书默认存放路径如下(在站点配置文件中可以查到):

ssl_certificate /www/server/panel/vhost/cert/你的域名/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/你的域名/privkey.pem;

续签脚本会自动覆盖这两个文件并重载 Nginx,所以你不需要修改任何 Nginx 配置。

五、替代方案:直接写 crontab

如果你不想通过宝塔的计划任务界面,也可以直接编辑系统 crontab:

# 编辑定时任务
crontab -e

# 添加以下一行(每天凌晨 3:01 执行)
1 3 * * * /www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew=1 2>&1 | tee -a /www/wwwlogs/ssl_renew.log

效果和宝塔计划任务完全一样,只是配置方式不同。

六、常见问题与排查

6.1 执行成功但证书没更新

  • 检查执行用户是否为 root,非 root 用户可能无法写入证书目录。
  • 查看日志:tail -f /www/wwwlogs/ssl_renew.log,关注错误信息。
  • 确认域名解析正常,DNS API 配置正确(使用 DNS 验证时)。

6.2 HTTP 验证失败

国内服务器经常遇到 HTTP 验证失败的问题(80 端口被拦截、CDN 冲突等)。解决方案:

  • 切换为 DNS 验证(推荐),在宝塔 SSL 页面配置对应域名商的 DNS API(支持阿里云、腾讯云、Cloudflare 等)。
  • DNS 验证不依赖 80/443 端口,成功率远高于 HTTP 验证。

6.3 想强制立即续签

直接在终端执行续签命令即可,或者在宝塔计划任务中点击【执行一次】。注意:如果证书剩余有效期超过 20 天,--renew=1 会跳过续签。如需强制续签,去掉 --renew=1 参数。

七、进阶方案:使用 acme.sh

如果你不使用宝塔面板,或者需要更灵活的证书管理,可以使用 acme.sh 这个第三方工具。

7.1 安装 acme.sh

curl https://get.acme.sh | sh -s email=your@email.com

7.2 申请/续签并部署到 Nginx

/root/.acme.sh/acme.sh --install-cert -d yourdomain.com \
  --key-file "/www/server/panel/vhost/cert/yourdomain.com/privkey.pem" \
  --fullchain-file "/www/server/panel/vhost/cert/yourdomain.com/fullchain.pem" \
  --reloadcmd "service nginx force-reload"

acme.sh 安装时会自动添加 crontab 定时任务,默认每天检查一次证书有效期并自动续签。

7.3 手动添加 crontab

0 3 * * * /root/.acme.sh/acme.sh --cron >> /www/wwwlogs/acme_renew.log

八、总结

首选方案:宝塔内置脚本 + 计划任务,一行命令搞定续签、覆盖、重载,稳定且由宝塔官方维护。对于大多数使用宝塔面板的用户来说,这是最省心的选择。

如果你没有使用宝塔面板,或者需要更多自定义选项,acme.sh 是成熟的替代方案,社区活跃、文档完善。

无论选择哪种方案,自动化续签都是必须的——别让一张过期的证书毁了你网站的信任度。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区