宝塔1024及双11特惠活动,企业版1099元/年,送SSL证书,最高立减2万元!查看活动
当前位置:论坛首页 > Linux面板 > 求助

【待反馈】宝塔计划任务续签Let's Encrypt证书 有bug

发表在 Linux面板2024-6-21 18:10 [复制链接] 6 612

为了能快速了解并处理您的问题,请提供以下基础信息:  
面板、插件版本:8.20


系统版本:CentOS 7.6.1810(Py3.7.9) 


问题描述:宝塔的计划任务续签Let's Encrypt证书有bug,首次设置lets证书后可以续签 QQ截图20240621180445.jpg ,第二次计划任务续签就会显示 QQ截图20240621180120.jpg ,虽然显示续签成功,但是实际时间不增加,证书只更新在/www/server/panel/vhost/letsencrypt这个文件夹


相关截图(日志、错误):

使用道具 举报 只看该作者 回复
发表于 2024-6-21 18:36:40 | 显示全部楼层
您好,您说的时间不增加是指新续签的证书没有重置三个月的时间吗,
使用道具 举报 回复 支持 反对
发表于 2024-6-21 21:12:04 | 显示全部楼层
运维技术阿闯 发表于 2024-6-21 18:36
您好,您说的时间不增加是指新续签的证书没有重置三个月的时间吗,

是的,就是原证书。但是新证书有下载到/www/server/panel/vhost/letsencrypt这个文件夹,但是没同步到vhost/cert和vhost/ssl这两个文件夹里,就是少了检测证书时间早晚这个步骤。你们可以测试下就知道了,按照主题里我说的测试条件。
使用道具 举报 回复 支持 反对
发表于 2024-6-22 15:25:06 | 显示全部楼层
宝塔用户_qxeibk 发表于 2024-6-21 21:12
是的,就是原证书。但是新证书有下载到/www/server/panel/vhost/letsencrypt这个文件夹,但是没同步到vho ...

好的,请您稍等,后期会测试一下这个
使用道具 举报 回复 支持 反对
发表于 2024-10-22 09:21:25 | 显示全部楼层
我遇到的问题,和这个情况一模一样
请问如何解决,
使用道具 举报 回复 支持 反对
发表于 2024-10-22 10:13:10 | 显示全部楼层
# 替换服务器上的同域名同品牌证书
    def sub_all_cert(self, key_file, pem_file):
        cert_init = self.get_cert_init(pem_file)  # 获取新证书的基本信息
        paths = ['/www/server/panel/vhost/cert', '/www/server/panel/vhost/ssl','/www/server/panel']
        is_panel = False
        for path in paths:
            if not os.path.exists(path):
                continue
            for p_name in os.listdir(path):
                to_path = path + '/' + p_name
                to_pem_file = to_path + '/fullchain.pem'
                to_key_file = to_path + '/privkey.pem'
                to_info = to_path + '/info.json'
                # 判断目标证书是否存在
                if not os.path.exists(to_pem_file):
                    if not p_name in ['ssl']: continue
                    to_pem_file = to_path + '/certificate.pem'
                    to_key_file = to_path + '/privateKey.pem'
                    if not os.path.exists(to_pem_file):
                        continue
                    is_panel = True
                # 获取目标证书的基本信息
                to_cert_init = self.get_cert_init(to_pem_file)
                # 判断证书品牌是否一致
                if to_cert_init['issuer'] != cert_init['issuer'] and to_cert_init['issuer'].find("Let's Encrypt") == -1 and to_cert_init['issuer'] != 'R3':
                    continue
                # 判断目标证书的到期时间是否较早
                if to_cert_init['notAfter'] > cert_init['notAfter']:
                    continue
                # 判断认识名称是否一致
                if len(to_cert_init['dns']) != len(cert_init['dns']):
                    continue
                is_copy = True
                for domain in to_cert_init['dns']:
                    if not domain in cert_init['dns']:
                        is_copy = False
                if not is_copy:
                    continue

应该是上面这一段代码判断出的问题,如果有一个不符合就  continue 跳过本次循环了。
如果上面这些 continue 的检测都符合,就会接下来执行输出 :

"|-检测到{}下的证书与本次申请的证书重叠,且到期时间较早,已替换为新证书!".format(to_path))

只要有这个提示,那说明就百分百可以续签成功,到期时间也是新的,如果没有这一行输出,那就是证书成功下载安装了,但是文件没有拷贝到 ssl 和 cert 这两个目录,这样就自动续签失败了,


但是这种情况,如果再执行自动续签的计划任务,也是没任何用处的,会提示: 找不到30天内要续签的域名,实际上这个域名并没有续签成功。
所以说这个自动计划任务,每月执行一次和每天执行一次,效果是一样的,就算是每天都执行,也都会提示:找不到30天内的续签域名。

所以说这个计划任务,实际上只给了一次执行的机会,一旦续签出现失败情况,实际上也不叫失败,是letsencrypt 目录下载成功,但没有COPY 到 ssl 和 cert 目录。
一旦续签失败一次,那么在接下来几个月内就再也没机会续签了,因为会一直提示没有到期的证书。  所以这个实际上多次的计划任务并没有起任何作用。



另外就是,如果这个续签失败,那么用手工点续签,是一定可以成功的,也就是在网站后面的单独设置里面,SSL里面,直接在页面上点击    续签   按钮,是一定可以成功的。

所以说这个手工点击续签按钮,所用的 LINUX命令是什么,有谁知道可以告诉一下,这样我们可以用LINUX命令来做单独域名网站 的LETSENCRYPT续签,这样不用手工点按钮了
使用道具 举报 回复 支持 反对
发表于 前天 22:45 | 显示全部楼层
遇到同样的问题,
另外:希望宝塔团队给一份最新的API文档,里面包含证书的续期,任务的触发接口。
目前的API文档都好几年前了,有点拉跨啊,这个。。。
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表