宝塔面板SSL证书过期怎么办?自动续签配置教程+续签失败排查
你是否也遇到过:客户发来消息说你网站打不开,打开一看,浏览器显示一个大大的红色警告:”您的连接不是私密连接”。
这多半是SSL证书过期了。
Let’s Encrypt证书有效期是90天,三个月到期一次,需要手动续签。如果没有配好自动续签,迟早会忘。忘了之后,网站HTTPS失效,浏览器直接报警,访客看到红色警告页基本立刻关掉,搜索排名也会受影响。
好消息是宝塔面板处理这件事其实不麻烦。这篇文章把三个点讲清楚:怎么第一次申请SSL、怎么配好自动续签、自动续签失败了怎么排查。
宝塔提供哪几种证书?
宝塔面板里申请SSL,目前主要有两个选项:
宝塔SSL:和宝塔合作的免费证书,一次申请有效期是1年,但不支持续签,到期了必须重新申请。操作麻烦,不推荐。
Let’s Encrypt:国际通用的免费SSL,有效期3个月,支持续签,宝塔有内置的自动续签机制。这是主流选择,本文主要讲这个。
付费证书:你也可以去第三方渠道购买付费证书,或者宝塔官网提供的付费证书。一般看你购买的期限。(非商业的个人网站用免费证书就足够了,而付费 SSL 证书(如 OV 企业型、EV 增强型))
第一步:申请Let’s Encrypt证书
如果你的网站还没装SSL,先从这里开始。已经装好的跳到第二步。
登录宝塔后台 → 左侧菜单点网站 → 找到你的域名,点后面的设置 → 弹出的窗口里点SSL → 选(免费证书)Let’s Encrypt标签。
验证方式这里有两个选项,选哪个取决于你的域名解析情况:
文件验证:宝塔在网站目录里放一个验证文件,Let’s Encrypt来访问确认你拥有这个域名。要求是域名已经正确解析到服务器IP,80端口可以正常访问。这是最常用的方式,速度快,一两分钟出证书。
如果你还不会解析域名可以参考:域名解析教程
DNS验证:在域名的DNS解析里添加一条TXT记录来验证身份。如果你的服务器80端口被封了、或者域名还没解析生效,就用这个方式。缺点是需要手动操作DNS,每次续签也要手动加记录——所以除非文件验证用不了,否则不推荐DNS验证做自动续签。
勾选你的域名(www和不带www的都勾上),点申请,等一两分钟,看到”部署成功”就完成了。
申请完之后,在SSL页面把强制HTTPS打开,让所有HTTP流量自动跳转到HTTPS。
第二步:确认自动续签是否已开启
宝塔会在证书到期前30天内自动触发续签任务,可以在左侧计划任务处查看是否存在名为”续签Let’s Encrypt证书”的任务,如果有这个任务并且是启用状态,SSL就是自动续签的。
去确认一下:宝塔后台 → 左侧菜单点计划任务,在任务列表里找有没有一条叫”续签Let’s Encrypt证书”或类似名字的任务。
通常是每天执行一次,宝塔用这个频率来防止证书过期。任务存在且状态是启用,说明自动续签已经配好了,不需要额外操作。
如果列表里找不到这条任务,需要手动添加——点右上角添加任务:
- 任务类型:Shell脚本
- 任务名称:续签SSL证书(随便写)
- 执行周期:每天,时间选个凌晨低峰期,比如凌晨3点
- 脚本内容:
/www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew_v2=1
保存之后这条任务每天自动跑,到期前30天内会触发续签。
第三步:手动续签(应急用)
自动续签没生效、或者发现证书马上要到期了,手动续签是最直接的解决方式。
宝塔后台 → 网站 → 找到对应域名 → 设置 → SSL → Let’s Encrypt → 点续签按钮。
点续签之后宝塔会重新向Let’s Encrypt申请一张新证书,成功后到期时间会往后延3个月。整个过程通常一两分钟,看到成功提示就完成了。
手动续签完之后,回计划任务检查一下自动续签任务是否还在启用状态,防止下次又忘了。
自动续签失败怎么查?几个最常见原因
自动续签这东西,配好了90%的时间没问题,但偶尔会失败。常见失败原因包括:域名未正确解析、80端口被占用、计划任务被删除或禁用、面板版本过旧。再加上一个经常被忽视的——letsencrypt.json配置文件里有残留失败记录。
逐一排查:
原因一:域名DNS解析有问题
文件验证方式要求Let’s Encrypt能从外网访问到你的服务器。如果域名解析的IP和服务器实际IP对不上、或者DNS还没生效,验证就会失败。
在服务器上跑这条命令确认域名解析是否指向本机(自行替换为你自己的域名):
dig www.ctzpj.com +short
返回的IP和服务器IP一致才行。
原因二:80端口被占用或屏蔽
文件验证走的是HTTP(80端口),如果80端口被其他进程占着,或者服务器防火墙屏蔽了80端口,Let’s Encrypt就访问不到验证文件。
检查80端口是否正常监听:
bash
netstat -tlnp | grep :80
正常情况应该看到Nginx在监听80端口。如果没有,检查Nginx是否启动,以及宝塔防火墙里80端口是否放行。
原因三:计划任务被禁用或删除
有时候装了某些插件,或者手动操作过,计划任务会被意外禁用。回宝塔后台 → 计划任务,确认续签任务状态是启用,没有被关掉。
原因四:宝塔面板版本太旧
宝塔老版本的自动续签脚本有已知的bug,比如9.0.0版本存在证书内容比对不匹配的问题,导致脚本找不到即将到期的证书从而不触发续签。
宝塔后台 → 面板设置 → 检查更新,把宝塔更新到最新版本,很多续签失败的问题会随版本更新修复。
配置Nginx让证书续签更稳定
Let’s Encrypt文件验证时,会访问 http://你的域名/.well-known/acme-challenge/ 这个路径。如果你的Nginx配置里有强制跳转HTTPS的规则,这条验证请求可能会被重定向到HTTPS,而Let’s Encrypt只接受HTTP验证,就会失败。
检查一下宝塔里这个网站的Nginx配置(网站设置 → 配置文件),确认80端口的server块里有这段例外规则,让验证路径不被重定向:
检查一下宝塔里这个网站的Nginx配置(网站设置 → 配置文件),确认80端口的server块里有这段例外规则,让验证路径不被重定向:
server {
listen 80;
server_name 你的域名 www.你的域名;
# Let's Encrypt验证路径例外,不强制跳HTTPS
location /.well-known/acme-challenge/ {
root /www/wwwroot/你的网站根目录;
try_files $uri =404;
}
# 其他请求跳转HTTPS
location / {
return 301 https://$host$request_uri;
}
}
宝塔面板在申请证书的时候通常会自动处理这部分,但如果你之前手动改过Nginx配置,可能会把这段规则覆盖掉。遇到续签失败时检查一下这里。
配置好之后,加一个监控兜底
自动续签已经配好了,但人不能完全依赖自动化——万一计划任务哪天没跑起来、或者续签失败了没注意,最好有一个外部监控在证书快到期的时候主动提醒你。
UptimeRobot的免费版支持SSL证书到期监控,设置很简单,到期前30天会发邮件提醒,不需要付费升级。
关于UptimeRobot的设置方法,参考:UptimeRobot免费版监控教程
宝塔面板建站完整流程:宝塔面板完整使用教程
宝塔面板安全加固避免配置被篡改:宝塔面板安全加固10项配置
如果你用的是Hostinger VPS建站,可以参考:Hostinger VPS搭建宝塔+WordPress完整教程
域名指南:如何正确注册与解析域名
SSL证书续签,配一次就可以躺平,只要自动续签任务在跑、80端口没问题,三个月到期的时候宝塔会自己处理,你不需要管。麻烦的是出了问题不知道从哪查,按照上面的几个原因逐一核对,大多数情况都能找到。