心百科的证书到期了,打开雷池的管理界面,在通用设置中尝试手动上传证书进行更新。但让人恼火的是,控制台中显示的证书有效期并没有随之更新。而此前类似操作却是可以的。
径默认的证书保存在/data/safeline/resources/nginx/certs下,查看证书的修改日期确实是最新的,并且打开后与上传的证书内容一致,也就是说证书上传没有问题。
尝试重新启动雷池,使用官方给出的命令如下:
container_id=$(docker ps -n 1 --filter name=.*safeline-mgt.* --format '{{.ID}}')
SAFELINE_PATH=$(docker inspect --format '{{index .Config.Labels "com.docker.compose.project.working_dir"}}' $container_id)
cd $SAFELINE_PATH && docker compose down && docker compose up -d
证书信息仍然维持在过期状态,没有任何效果。
雷池的升级日志中对于9.2.2的记录就是修复部分情况证书无法续期的问题,显然我的问题并没有得到有效解决。
尝试卸载最新版的雷池,改装9.1.0-lts版。由于卸载后所有配置均被删除,只能重新创建应用。再次手动上传证书,结果还是显示证书过期。
进行到这里,感觉只有等雷池的更新版本出来或许才可以解决问题。在技术群和论坛中都提交了问题,可惜迟迟没有回应。
既然雷池方面没办法,那就从证书方面考虑了。
在使用雷池前,所有证书都是通过网站服务器中的acme生成。在测试和配置雷池时,因为不确定是否能使用长久,所以所有的证书文件都是从网站服务器中下载后再手动上传到雷池中。每次升级证书同样是下载新证书再上传,直到这一次出现状况。
既然手动上传的有问题,那就直接在雷池服务器中生成证书,然后直接替换掉原有的证书(比如/data/safeline/resources/nginx/certs目录下的cert_1.crt和cert_1.key,表示的是雷池第一个创建的应用)。
根据acme的教程,使用DNS的方式生成证书,然后复制安装新证书,命令如下:
acme.sh --install-cert -d example.com \
--key-file /data/safeline/resources/nginx/certs/cert_1.key \
--fullchain-file /data/safeline/resources/nginx/certs/cert_1.crt \
--reloadcmd "docker exec safeline-tengine nginx -s reload"
刷新雷池控制台,问题依旧。但过了一段时间之后,无意中再次刷新控制台,证书终于正常了。
用群里网友的说法,用雷池还是有一定的玄学意味在的,所以整个过程中我并不确定到底是哪个环节使得问题最终得到了解决,只能说运气使然。