修改/www/server/panel/class/ssl_info.py文件第242行左右的verify_certificate_and_key_match函数为下面并重启面板即可(注意缩进)。

PYTHON
def verify_certificate_and_key_match(self, key_pem, cert_pem, password=None):        """        验证证书和私钥是否匹配(通过签名验证)        :param key_pem: 私钥内容        :param cert_pem: 证书内容        :param password: 私钥密码        :return: 验证成功返回True,失败返回False        """        from cryptography.hazmat.primitives.asymmetric import ec        message = b"test message"        private_key = self.analysis_private_key(key_pem, password)        cert = self.analysis_certificate(cert_pem)        if not private_key:            return False, "密钥错误,请检查是否为正确的PEM格式私钥"        if not cert:            return False, "证书错误,请检查是否为正确的PEM格式证书"         # 根据私钥类型选择不同的签名方式        try:            if isinstance(private_key, ec.EllipticCurvePrivateKey):                # EC密钥签名                signature = private_key.sign(                    message,                    ec.ECDSA(hashes.SHA256())                )            else:                # RSA密钥签名                signature = private_key.sign(                    message,                    padding.PKCS1v15(),                    hashes.SHA256()                )                # 使用证书中的公钥验证签名            public_key = cert.public_key()                        if isinstance(public_key, ec.EllipticCurvePublicKey):                # EC公钥验证                public_key.verify(                    signature,                    message,                    ec.ECDSA(hashes.SHA256())                )            else:                # RSA公钥验证                public_key.verify(                    signature,                    message,                    padding.PKCS1v15(),                    hashes.SHA256()                )            return True, "验证成功"        except Exception as e:            return False, f"密钥和证书不匹配:{str(e)}"

如果申请ssl出现:module 'OpenSSL.crypto' has no att...,这是宝塔官方的bug 官方bug复现贴:https://www.bt.cn/bbs/thread-140990-1-1.html 解决办法

Bash
btpip install pyOpenSSL==24.2.1 -U

执行上面的命令 然后重启面板