之前用了certbot来配置https服务端, 这两天发现证书过期了, 执行自动续约, 结果发现, 仍然没有见效, 以为是letsencrypt官方出错了, 再加上有别的事情, 就没有搞.
今天ssh到服务端看一下, 才发现了问题所在, 那就是新生成的pem, 名字不一样了.
它是使用***1.pem, ***2.pem这样的形式, 第二次renew的证书使用的是2. 这就理解了, 项目的配置中用的还是指向***1.pem的证书和私钥, renew的证书却不是这个名字了, 所以, 自动续约的脚本其实是没有意义的.
另外一个还有发现, 那就是证书被使用中, 它不能被renew, 必须stop掉比如nginx或者pm2中的服务, 然后才可以. 这很脑残, 既然你都生成重命名pem, 你还管我原来的pem文件是否在使用中干嘛?!
这么一来, 网上介绍的各种博客中, certbot renew的脚本都是不可用的. 首先, renew之后, service restart是不可行的, 必须service stop, 然后renew, 再service start. 其次, renew之后, 要嘛重新命名pem文件, 和原来的pem保持一致, 要嘛在服务的配置文件中, 要修改pem文件指向.
不过, 最好还是设置一个timer, 手动来管理证书的更新比较靠谱, 这种服务, 官方逻辑一旦更改, 我们的脚本就无效了, 依赖自动化, 本身就失去了意义. 再说了, 谁敢在人工不介入的情况下, 用脚本自动service restart?