前言

今天网站突然提示 SSL 过期,宝塔不是可以自动续期吗?貌似之前经常需要手动去续,带着这个疑惑分了下是什么问题?接下来就是分析过程了。


分析

仔细看了一下日志,应该是是acme_v2的脚本问题。

|-共需要续签 1 张证书
|-正在续签第 1 张,域名: ['www.quchao.net']..
|-正在创建订单..
|-正在获取验证信息..
|-正在验证域名..
|-正在发送CSR..
|-正在下载证书..
Traceback (most recent call last):
File "/www/server/panel/class/acme_v2.py", line 692, in save_cert
self.sub_all_cert(key_file, pem_file)
File "/www/server/panel/class/acme_v2.py", line 714, in sub_all_cert
if to_cert_init['issuer'] != cert_init['issuer'] and to_cert_init['issuer'].find("Let's Encrypt") == -1:
AttributeError: 'NoneType' object has no attribute 'find'

|-续签成功!
看似成功实际上根本就没有成功。 于是定位到 /www/server/panel/class/acme_v2.py 714 行,
if to_cert_init['issuer'] != cert_init['issuer'] and to_cert_init['issuer'].find("Let's Encrypt") == -1:
这条语句出现了问题,应该改成
if to_cert_init['issuer'] != cert_init['issuer'] and str(to_cert_init['issuer']).find("Let's Encrypt") == -1:
即可正常签到。

相关

PS:还有老旧版本会存在一键证书卡死在“正在申请证书”
先执行cd /www/server/panel/class
再执行python acme_v2.py 会发现
Traceback (most recent call last): File "acme_v2.py", line 40, in import dns.resolver ImportError: No module named dns.resolver
此种情况一般是宝塔面板安装时或者安装后有交叉 Python 版本存在,Python2 和 3 的 pip 混乱导致 dnspython 无法安装 此时执行:
pip install dnspython
pip2 install dnspython
后再次申请证书即可正常使用 最新版不存在这个问题,如果上面命令还是无法解决你的问题最好是安装新版宝塔面板为妙。
Last modification:November 20th, 2020 at 09:41 am
If you think my article is useful to you, please feel free to appreciate