宝塔面板 HTTPS 端口证书不生效排查记录

最近遇到一个宝塔面板 HTTPS 端口证书不生效的问题:证书文件已经更新,但是浏览器访问面板地址时仍然提示证书异常。排查后发现,问题不在域名解析,也不在证书链,而是面板进程没有重新加载新的证书。

这类问题容易混淆,因为同一个域名在不同端口上可能使用完全不同的证书。例如:

text 复制代码
https://panel.example.com/       # 网站 443 端口
https://panel.example.com:9527/  # 宝塔面板或其他服务端口

即使 443 端口的证书已经正常,面板端口仍然可能在使用旧证书。

现象

常见表现有几种:

  • 浏览器提示证书已过期
  • 浏览器提示证书名称不匹配
  • 检查证书文件发现已经是新证书
  • 访问面板端口仍然返回旧证书
  • 宝塔证书任务日志里出现 Python traceback,但最后又显示 Successful

其中最迷惑的是:文件里的证书是新的,但端口实际返回的仍然是旧证书。

第一步:确认端口实际返回的证书

不要只看本地证书文件,要直接检查服务端口返回的证书:

bash 复制代码
echo | openssl s_client -connect panel.example.com:9527 -servername panel.example.com 2>/dev/null \
| openssl x509 -noout -subject -dates -ext subjectAltName

重点看这几项:

text 复制代码
subject=CN=panel.example.com
notBefore=...
notAfter=...
X509v3 Subject Alternative Name:
    DNS:panel.example.com

如果这里显示的是旧的 notAfter,说明访问端口仍然在返回旧证书。

第二步:确认面板证书文件

宝塔面板 SSL 证书一般在:

bash 复制代码
/www/server/panel/ssl/certificate.pem
/www/server/panel/ssl/privateKey.pem

检查证书内容:

bash 复制代码
openssl x509 -in /www/server/panel/ssl/certificate.pem -noout -subject -dates -ext subjectAltName

如果这个文件显示的是新证书,但上一步端口返回的是旧证书,基本可以判断为进程没有重新加载。

第三步:确认端口是谁在监听

面板端口不一定永远由宝塔面板进程监听,也可能被 Nginx 或其他服务接管。先看监听进程:

bash 复制代码
ss -lntp | grep ':9527'

如果是宝塔面板进程,处理面板 SSL 即可。

如果是 Nginx,则要去找对应的 listen 9527 ssl 配置:

bash 复制代码
grep -R "listen .*9527" /www/server/panel/vhost/nginx /www/server/nginx/conf -n

然后检查配置里的证书路径:

nginx 复制代码
ssl_certificate     /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;

第四步:重启宝塔面板进程

这次问题的关键就在这里:证书文件已经换好了,但宝塔面板进程还没有重新加载。

直接重启宝塔面板:

bash 复制代码
bt 1

也可以使用:

bash 复制代码
/etc/init.d/bt restart

重启后再检查端口证书:

bash 复制代码
echo | openssl s_client -connect panel.example.com:9527 -servername panel.example.com 2>/dev/null \
| openssl x509 -noout -subject -dates -ext subjectAltName

看到新的过期时间,说明已经生效。

如果宝塔证书任务报 No module named 'mod'

有时宝塔的证书任务会出现类似错误:

text 复制代码
ModuleNotFoundError: No module named 'mod'

即使日志最后显示 Successful,也不要直接相信。前面已经出现 traceback,说明任务链路中断过。

可以先检查模块是否存在:

bash 复制代码
ls -ld /www/server/panel/mod
ls -l /www/server/panel/mod/base.py

如果文件缺失,优先修复宝塔面板:

bash 复制代码
bt 16

或者执行面板更新修复脚本:

bash 复制代码
curl -sSO https://download.bt.cn/install/update_panel.sh && bash update_panel.sh

修复后重启面板:

bash 复制代码
bt 1

手动替换面板证书

如果只是要快速恢复访问,可以手动替换面板证书:

bash 复制代码
cp /www/server/panel/ssl/certificate.pem /www/server/panel/ssl/certificate.pem.bak
cp /www/server/panel/ssl/privateKey.pem /www/server/panel/ssl/privateKey.pem.bak

cp /path/to/fullchain.pem /www/server/panel/ssl/certificate.pem
cp /path/to/privkey.pem /www/server/panel/ssl/privateKey.pem

chmod 644 /www/server/panel/ssl/certificate.pem
chmod 600 /www/server/panel/ssl/privateKey.pem

bt 1

注意:

  • certificate.pem 建议使用完整证书链
  • privateKey.pem 必须和证书匹配
  • 证书 SAN 必须包含面板访问域名
  • 替换后一定要重启面板进程

总结

宝塔面板 HTTPS 端口证书不生效时,不要只看网站 SSL,也不要只看证书文件。排查顺序建议是:

  1. openssl s_client 看端口实际返回的证书
  2. 检查 /www/server/panel/ssl/ 下的面板证书文件
  3. ss -lntp 确认端口监听进程
  4. 如果文件已更新但端口仍返回旧证书,重启宝塔面板

这次的最终修复就是:证书文件已经正确,只需要重启宝塔面板进程让新证书生效。


更多内容欢迎关注公众号:

相关推荐
用户2367829801681 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux
zzipeng2 小时前
Linux LCD驱动
linux·运维·服务器
思麟呀2 小时前
C++11并发编程:call_once一次性执行+atomic原子类型+CAS无锁编程+自旋锁
linux·开发语言·jvm·c++·windows
浮生若城2 小时前
Linux库制作与原理(2):理解链接与加载
linux·运维·服务器
Cat_Rocky2 小时前
Gitlab安装与配置
linux·运维·gitlab
宋冠巡2 小时前
OpenEuler 系统下 Nginx 安装配置与管理指南(基于 OpenEuler 22.03 LTS SP4)
nginx·openeuler
志栋智能2 小时前
超自动化巡检:降低运维总成本(TCO)的有效路径
大数据·运维·网络·人工智能·自动化
爱讲故事的2 小时前
操作系统第一讲复习:为什么学习操作系统,以及操作系统到底在做什么?
linux·开发语言·windows·学习·ubuntu·c#
荒--2 小时前
kali安装与下载、设置(2026)
linux·服务器