十天前,我在宝塔面板手动对快到期的网站 Let’s Encrypt SSL 证书进行续签,都失败了。因为是最新的稳定版,按理说都是经过测试后发布的,便觉得不应该是宝塔面板的问题。但还是按常规流程:删除证书 -> 修复宝塔 -> 重启宝塔 -> 重新申请证书,结果还是失败。
一直以来都用的 DNS 自动验证方式进行解析记录验证,便猜测是不是 DnsPod 的口令失效了。登录 DnsPod 后台申请了新口令进行测试,依旧失败。查了 DnsPod 后台日志,发现没有 API 操作 DNS 解析的日志记录。这要么是宝塔程序有问题,要么就是 DnsPod API 接口存在问题。
使用 curl 直接给 DnsPod 提交了一条解析记录,成功添加,确认“八阿哥”是属于宝塔面板了。上宝塔论坛发贴反馈,宝塔面板的工作人员回复倒是及时,说证书申请相关代码已很久没有改过,建议我先使用手动配置DNS解析解决。
之所以使用 DNS API 方式申请证书,是因为这台服务器的 Nginx 只作为反向代理使用,使用手动添加 DNS 记录进行验证或者 HTTP 方式验证(因为这需要先关闭反向代理),都无法完全自动化。记得升级到最新稳定版 7.9.4 后,我有过证书申请成功的操作,同一个版本的代码,一会儿是好的一会儿又是不好,我不得不问罪于我的服务器系统环境。
有问题解决问题,于是进行一番排查:
- 在 esxi 后台使用模板新建一台虚拟服务器
- 在新服务器里安装宝塔面板
- 安装 Nginx
- 申请新的 DnsPod API 口令
- 测试 DNS 自动解析方式申请证书
排查结果很如意——证书申请失败。
这下肯定了,锅是甩不掉的——“八阿哥” 就是宝塔的。
我想再给宝塔反馈,便进行了一番证据收集:把代码下载到本地、找出宝塔证书申请的相关代码、新增日志记录进行 bug 跟踪、对排查过程进行截图,汇总之后回宝塔论坛跟贴。可发现帖子已经被设置为已完成。接下来一个多星期,常去看我的帖子,却没见着官方给出新回复。
在 9 月 19 日 23 点后,我的宝塔面板访问不进去了,便使用 SSH 登录服务器,使用 bt 命令进行面板修复,才发现宝塔面板修复功能是直接下载代码强行替换服务器中已安装的代码。在修复面板后,宝塔面板可以访问了,怀着侥幸心理我使用新的子域名进行 SSL 证书申请,竟然成功了。
我在另一台服务器进行测试,使用 bt 命令进行面板修复,对已拥有就证书的网站删除证书后再重新申请,可以成功申请证书。因为我之前一直使用 Web 界面的修复面板功能,但证书申请失败的问题一直没解决,便以为 bt 命令可以正确修复 bug。
便马上去论坛把这些情况反馈,今天发现官方终于给出了新的回复,他们 19 号对相关问题进行修复,修复面板即可恢复正常。也真巧了,他们刚进行了修复,我晚上就进行了面板修复,然后发现问题得以解决。
忍不住吐槽一下,宝塔面板定版发布的系统竟然还能修改。这就导致了我最初更新新版本时证书申请功能是正常的,而之后因为使用修复面板功能,导致引入了有 bug 的代码(不知道期间哪个程序员动到了相关代码)然后证书申请失败,经过我的反馈,宝塔修复了相关 bug,修复面板后可恢复正常,而系统版本依然是免费版 7.9.4。
冏。
虽然吐槽了一下,但还是要肯定——宝塔面板是一个非常优秀的服务器管理系统,感谢宝塔。