证书“假过期”需先验证真实有效期与Nginx加载状态,再检查privkey.pem权限是否为600、fullchain.pem是否为644,DNS验证需确认AccessKey权限及TXT记录清理,续签后务必执行bt reload nginx。

证书显示过期但实际未生效?先确认是不是「假过期」
宝塔面板里看到“已过期”或“剩余 0 天”,不等于浏览器真的报错——有可能是证书文件没被 Web 服务加载,也可能是面板缓存没刷新。尤其当你刚手动续签完、或改过 Nginx 配置后,面板的 SSL 状态栏有时会滞后几小时才更新。
- 打开终端,直接检查证书真实有效期:
openssl x509 -in /www/server/panel/vhost/cert/example.com/fullchain.pem -noout -dates,看notAfter时间是否真的过了 - 确认 Nginx 是否真在用这张证书:
nginx -T | grep -A 2 "ssl_certificate.*example.com",路径必须和面板里显示的一致 - 如果证书文件存在、时间正常,但浏览器仍提示过期,大概率是证书链不全或私钥权限不对(见下一条)
/www/server/panel/vhost/cert/ 下证书文件权限错误
宝塔续签后会把新证书写入 /www/server/panel/vhost/cert/,但若该目录或其中 privkey.pem 文件权限太松(比如 644 或 755),Nginx 启动时会拒绝加载,回退到旧证书甚至自签名证书,导致“明明续了却还过期”的现象。
- 正确权限应为:
privkey.pem→600,fullchain.pem→644 - 一键修复命令:
chmod 600 /www/server/panel/vhost/cert/*/privkey.pem && chmod 644 /www/server/panel/vhost/cert/*/fullchain.pem - 执行后必须重载 Nginx:
bt reload nginx,不能只靠面板点“重载配置”——它有时跳过权限校验
强制更新失败:acme_v2.py 返回 no domain found
运行 /www/server/panel/pyenv/bin/python /www/server/panel/class/acme_v2.py --renew=1 却提示 no domain found,说明脚本找不到可续签的目标,不是证书坏了,而是“索引断了”。常见于手动删过证书文件、清空过网站 SSL 设置、或升级面板后配置路径偏移。
- 先停面板:
bt stop,再备份当前证书配置:cp -r /www/server/panel/vhost/cert/ /www/backup/cert_$(date +%s) - 清理残留订单缓存:
rm -f /www/server/panel/data/orders/*.json - 重启面板:
bt start,然后立刻进【网站】→【设置】→【SSL】,点一次“Let’s Encrypt”→“申请证书”(哪怕只是勾选再取消),强制重建域名绑定关系 - 之后再跑续签命令,通常就能识别出域名了
DNS 验证失效导致自动续签静默跳过
如果你用的是泛域名(*.example.com)或服务器 80 端口被 CDN/NAT 挡住,就必须走 DNS 验证。但一旦阿里云/腾讯云的 AccessKey 被轮换、权限被回收(比如从 AliyunDNSFullAccess 降级为只读),acme_v2.py 就会在后台悄悄失败,日志里只写“验证超时”,面板状态栏却依然显示“剩余 XX 天”,给人“还能撑”的错觉。
- 查 DNS 验证是否启用:
grep -r "dns" /www/server/panel/vhost/cert/*/config.json,有"auth_type": "dns"才算真正走 DNS - 检查旧 TXT 记录是否堆积:
dig _acme-challenge.example.com txt +short,若返回多个值,说明上次验证没清理干净,需手动删掉所有_acme-challenge开头的 TXT 记录 - 阿里云用户务必确认 RAM 子账号已授予
AliyunDNSFullAccess,仅ReadOnlyAccess会导致添加记录失败且无明确报错
最麻烦的不是续不上,而是续上了却没重载、或重载失败了还不报错。建议所有自动任务末尾加一句 bt reload nginx 2>/dev/null || echo "nginx reload failed at $(date)" >> /var/log/bt_ssl_renew.log,不然半夜证书静默失效,你根本不知道。


















