Camunda是通用的流程编排引擎

1. 企业版破解方法

Camunda Platform企业版功能比社区版更完善,不过企业版默认仅能试用30天,按照如下方法可以突破此限制长期使用。

首先在 Camunda下载页面选择 30-Day Trial Enterprise Edition 填写相关信息后下载企业版, 注意邮箱必须填写真实邮箱,因为Camunda会向邮箱发送一个试用账号和License,只有使用此账号才能下载。

下载并解压后的Camunda目录结构如下所示,在internal/webapps目录下有一个名称为 camunda-license-check 的jar包, 这个jar包就负责校验license,后续步骤会替换jar包根目录下的公钥 unified_public_key.der

configuration/
internal/
--example/
--rest/
--swaggerui/
--webapps/

下一步执行如下如下Java类生成密钥对和签名,注意修改main方法中的 privateKeyPathpublicKeyPath 两个参数为电脑上存在的目录。 这个类运行后会打印一个无限期使用的license字符串,保存下来在下一步使用。

import org.apache.commons.codec.binary.Base64;
import org.springframework.util.FileCopyUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;

public class Camunda {

    private static final Base64 BASE64 = new Base64(0);

    /**
     * 生成密钥对
     * @param privateKeyPath  私钥文件
     * @param publicKeyPath   公钥文件
     * @throws NoSuchAlgorithmException
     * @throws IOException
     */
    private static void generateKeyPair(String privateKeyPath, String publicKeyPath) throws NoSuchAlgorithmException, IOException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(4096);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PrivateKey aPrivate = keyPair.getPrivate();
        PublicKey aPublic = keyPair.getPublic();
        byte[] publicEncoded = aPublic.getEncoded();
        byte[] privateEncoded = aPrivate.getEncoded();
        FileCopyUtils.copy(publicEncoded, new FileOutputStream(publicKeyPath));
        FileCopyUtils.copy(privateEncoded, new FileOutputStream(privateKeyPath));
    }

    private static String sign(String privateKeyPath) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PKCS8EncodedKeySpec keySpec1 = new PKCS8EncodedKeySpec(FileCopyUtils.copyToByteArray(new File(privateKeyPath)));
        PrivateKey privateKey = keyFactory.generatePrivate(keySpec1);
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        String licenseBody = "customer = jd;expiryDate = unlimited;cawemo = true;optimize = true;camundaBPM = true;";
        signature.update(licenseBody.getBytes());
        byte[] sign = signature.sign();
        String encodedSign = BASE64.encodeToString(sign);
        encodedSign = encodedSign + ";\n" + "customer = jd;\nexpiryDate = unlimited;\ncawemo = true;\noptimize = true;\ncamundaBPM = true;";
        return encodedSign;
    }

    public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeySpecException, SignatureException, InvalidKeyException {
        String privateKeyPath = "C:/Users/pxzxj1/Desktop/private_key.pem";
        String publicKeyPath = "C:/Users/pxzxj1/Desktop/unified_public_key.der";
        generateKeyPair(privateKeyPath, publicKeyPath);
        String signature = sign(privateKeyPath);
        System.out.println(signature);
    }

}

使用上一步生成的unified_public_key.der公钥替换 camunda-license-check jar包中的对应公钥后就可以启动服务。启动后在License Key菜单中输入上一步生成的 License字符串,保存后会提示 Your license key has unlimited validity. It will not expire. 表示已经破解成功。