SSL证书自动续期宝塔定时任务稳定HTTPS
为什么需要给SSL证书设置自动续期
使用 Let's Encrypt 等免费证书时,默认有效期只有90天。
如果忘记手动续期,网站会直接变成“不安全”,访客浏览器弹出警告,严重的甚至会直接拦截网站。
手动续期又容易遗忘,所以用宝塔面板的定时任务实现自动续期是保障 HTTPS 稳定的最佳方案。
宝塔面板SSL证书续期前置检查
在创建定时任务前,请确认以下几点:
- 宝塔面板版本:建议升级到最新版,旧版可能存在任务执行异常。
- SSL证书来源:只支持面板内申请的 Let's Encrypt 或其他免费证书自动续期,手动上传的付费证书需要自己处理。
- 网站运行状态:确保目标网站正常,域名解析正确,且80/443端口可访问(续期需要验证域名所有权)。
创建自动续期定时任务(两种方法)
宝塔面板提供了两种方式实现自动续期,推荐用第一种,更稳定。
方法一:使用宝塔内置“计划任务”+ 续期脚本
- 登录宝塔后台,左侧菜单点击计划任务。
- 点击添加任务,任务类型选择Shell脚本。
- 任务名称:填入“SSL自动续期”(方便识别即可)。
- 执行周期:建议选择N天,输入 60(因为证书有效期90天,提前30天续期更安全)。也可以选择每月,但为了精确,推荐每60天执行一次。
- 脚本内容:复制以下命令:
btpython /www/server/panel/class/acme_v2.py --renew 2>&1
注意:如果你的宝塔面板路径不是默认的 /www/server/panel,请自行替换。该命令会调用宝塔内置的 acme 续期脚本,自动扫描所有证书并更新。
- 点击添加任务保存。
方法二:使用系统 crontab 配合面板接口(进阶)
如果你熟悉 Linux,也可以直接在服务器 Shell 中添加定时任务(不依赖面板计划任务)。
但建议先用方法一,出错更容易排查。
常见报错与避坑指南
问题1:定时任务执行后,证书没有更新
- 检查网络:服务器必须能访问 Let's Encrypt 的验证服务器(通常是 *.acme-v02.api.letsencrypt.org)。
- 检查日志:在宝塔计划任务列表中,点击任务对应行的日志,查看执行输出。常见的错误是
urn:ietf:params:acme:error:rateLimited,表示请求频率超限,等待几分钟重试即可。 - 检查系统时间:时间不准会导致证书验证失败,执行
date -R查看,如果不对,安装 ntpdate 并同步时间。
问题2:使用面板的 Let's Encrypt 证书,但定时任务没有生效
- 确认该证书是通过宝塔面板申请的(非手动上传)。
- 检查
/www/server/panel/vhost/cert/下是否有对应站点文件夹,如果没有,说明证书不在面板管理范围内。
避坑提醒
- 不要同时多个定时任务重复续期,会导致 IP 被临时封禁。
- 如果服务器使用 CDN,续期时域名必须直接解析到服务器 IP(或通过 HTTP 验证),否则需要改用 DNS 验证方式(宝塔目前不支持自动 DNS 续期,需手动处理)。
- 建议在凌晨流量低峰期执行,避免影响网站服务。
验证续期是否生效
设置完成后,建议先手动执行一次定时任务测试:
- 在宝塔计划任务列表,点击该任务右侧的执行按钮。
- 执行完毕后,查看日志中是否有
Renew success或类似提示。 - 访问网站,查看证书有效期是否延长(路径:浏览器地址栏锁图标 → 证书信息 → 有效日期)。
- 也可以使用命令行工具
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>&1 | openssl x509 -noout -dates查看证书开始和结束时间。
如果一切正常,之后每60天凌晨你的证书都会自动续期,HTTPS 在90天内保持有效,无需再手动操心。
最后提醒:如果你使用的是宝塔商业版或企业版,部分证书可能自带自动续期功能,请先查阅产品文档。
定期检查网站 SSL 状态,确保万无一失。