最近遇到一个宝塔面板 HTTPS 端口证书不生效的问题:证书文件已经更新,但是浏览器访问面板地址时仍然提示证书异常。排查后发现,问题不在域名解析,也不在证书链,而是面板进程没有重新加载新的证书。
这类问题容易混淆,因为同一个域名在不同端口上可能使用完全不同的证书。例如:
1 | https://panel.example.com/ # 网站 443 端口 |
即使 443 端口的证书已经正常,面板端口仍然可能在使用旧证书。
现象
常见表现有几种:
- 浏览器提示证书已过期
- 浏览器提示证书名称不匹配
- 检查证书文件发现已经是新证书
- 访问面板端口仍然返回旧证书
- 宝塔证书任务日志里出现 Python traceback,但最后又显示
Successful
其中最迷惑的是:文件里的证书是新的,但端口实际返回的仍然是旧证书。
第一步:确认端口实际返回的证书
不要只看本地证书文件,要直接检查服务端口返回的证书:
1 | echo | openssl s_client -connect panel.example.com:9527 -servername panel.example.com 2>/dev/null \ |
重点看这几项:
1 | subject=CN=panel.example.com |
如果这里显示的是旧的 notAfter,说明访问端口仍然在返回旧证书。
第二步:确认面板证书文件
宝塔面板 SSL 证书一般在:
1 | /www/server/panel/ssl/certificate.pem |
检查证书内容:
1 | openssl x509 -in /www/server/panel/ssl/certificate.pem -noout -subject -dates -ext subjectAltName |
如果这个文件显示的是新证书,但上一步端口返回的是旧证书,基本可以判断为进程没有重新加载。
第三步:确认端口是谁在监听
面板端口不一定永远由宝塔面板进程监听,也可能被 Nginx 或其他服务接管。先看监听进程:
1 | ss -lntp | grep ':9527' |
如果是宝塔面板进程,处理面板 SSL 即可。
如果是 Nginx,则要去找对应的 listen 9527 ssl 配置:
1 | grep -R "listen .*9527" /www/server/panel/vhost/nginx /www/server/nginx/conf -n |
然后检查配置里的证书路径:
1 | ssl_certificate /path/to/fullchain.pem; |
第四步:重启宝塔面板进程
这次问题的关键就在这里:证书文件已经换好了,但宝塔面板进程还没有重新加载。
直接重启宝塔面板:
1 | bt 1 |
也可以使用:
1 | /etc/init.d/bt restart |
重启后再检查端口证书:
1 | echo | openssl s_client -connect panel.example.com:9527 -servername panel.example.com 2>/dev/null \ |
看到新的过期时间,说明已经生效。
如果宝塔证书任务报 No module named 'mod'
有时宝塔的证书任务会出现类似错误:
1 | ModuleNotFoundError: No module named 'mod' |
即使日志最后显示 Successful,也不要直接相信。前面已经出现 traceback,说明任务链路中断过。
可以先检查模块是否存在:
1 | ls -ld /www/server/panel/mod |
如果文件缺失,优先修复宝塔面板:
1 | bt 16 |
或者执行面板更新修复脚本:
1 | curl -sSO https://download.bt.cn/install/update_panel.sh && bash update_panel.sh |
修复后重启面板:
1 | bt 1 |
手动替换面板证书
如果只是要快速恢复访问,可以手动替换面板证书:
1 | cp /www/server/panel/ssl/certificate.pem /www/server/panel/ssl/certificate.pem.bak |
注意:
certificate.pem建议使用完整证书链privateKey.pem必须和证书匹配- 证书 SAN 必须包含面板访问域名
- 替换后一定要重启面板进程
总结
宝塔面板 HTTPS 端口证书不生效时,不要只看网站 SSL,也不要只看证书文件。排查顺序建议是:
- 用
openssl s_client看端口实际返回的证书 - 检查
/www/server/panel/ssl/下的面板证书文件 - 用
ss -lntp确认端口监听进程 - 如果文件已更新但端口仍返回旧证书,重启宝塔面板
这次的最终修复就是:证书文件已经正确,只需要重启宝塔面板进程让新证书生效。
更多内容欢迎关注公众号:
