有阿里云服务器用户使用宝塔面板遇到自动续签Let's Encrypt SSL数字证书失败的问题,报错内容为:Traceback (most recent call last): File "/www/server/panel/class/acme_v2.py", line 1456, in renew_cert write_log('|-本次跳过域名:{},因连续3次续签失败,不再续签此证书'.format(self._config['orders'][index]['domains']))KeyError: None。有的网友分析这个主要问题其实是/www/server/panel/class/acme_v2.py 第1456行的这句话变量问题self._config['orders'][index]['domains'] -> self._config['orders'][i]['domains'],把index 改成 i 就可以了,但如果你用的是新版本宝塔,发现这个bug已经修复,但续签仍然失败。
下面分析一下真实的原因:
1、py脚本自动续签失败,看log是3次续签失败导致的脚本中断。可是每次宝塔界面却可以手动续签。所以排除网络问题,配置问题。
2、研究了一下/www/server/panel/class/acme_v2.py这个脚本,log中提示的1456行, if self._config['orders']['retry_count'] >= 3: 看起来是个检测重试次数retry_count的语句。
3、寻找这个retry_count的计数值是在哪里保存,在py脚本的62行找到了: _conf_file = 'config/letsencrypt.json' 。
4、编辑/www/server/panel/config/letsencrypt.json,在里面的order段落中,找到了好几个证书续签的条目。其中有几个是之前删过的域名(看domains和save path),并且retry_count=3。
5、备份配置文件,把这几个retry_count=3的证书续签的order删掉再次运行py脚本,问题解决。
6、如果还有问题,可以把所有order都删掉,然后去宝塔的ssl面板中删除证书,再重新申请即可。
综上所述,问题的所在应该是原来在宝塔ssl证书界面的某些操作,导致无效的续签信息保存在了/www/server/panel/config/letsencrypt.json当中,宝塔的校验逻辑又不缜密,web界面删除站点或者证书时,没有将letsencrypt.json中相应的续签信息删掉,导致配置文件中一直存在retry_count=3的条目。acme.py脚本执行时,检测到retry_count超出限制,脚本中断执行。
如果您的阿里云服务器没有专门的技术人员维护,可以将服务器委托给万维景盛托管,费用不高,省心省力哦!
扫一扫关注微信公众号
扫一扫访问手机站
扫一扫微信小程序
扫一扫百度小程序