yangys
2025-05-26 2ba2c339acf41fd7bb2a49f0ce186fd664a80cb5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.qianwen.license.common;
 
import de.schlichtherle.license.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
import javax.security.auth.x500.X500Principal;
import java.io.File;
import java.text.MessageFormat;
import java.util.prefs.Preferences;
 
 
public class LicenseCreator {
    //TODO 找个需要改掉
    //CN=yangys, OU=qianwen, O=qianwen, L=beijing, ST=beijing, C=cn是否正确?
    //private final static X500Principal DEFAULT_HOLDER_AND_ISSUER = new X500Principal("CN=GENMER, OU=GENM, O=GENM, L=FUZHOU, ST=FUJIAN, C=CHINA");
    /**
     * 发行方
     */
    private final static X500Principal DEFAULT_ISSUER = new X500Principal("CN=qw, OU=qwkj, O=qwkj, L=WUXI, ST=ZHEJIANG, C=CN");
    private final static X500Principal DEFAULT_HOLDER = new X500Principal("CN=qw, OU=qwkj, O=qwkj, L=WUXI, ST=ZHEJIANG, C=CN");
 
    private static Logger logger = LogManager.getLogger(LicenseCreator.class);
 
    private License license;
 
    public LicenseCreator(License license) {
        this.license = license;
    }
 
    /**
     * 生成License证书
     */
    public boolean generateLicense() {
        try {
            LicenseManager licenseManager = new CustomLicenseManager(initLicenseParam());
            LicenseContent licenseContent = initLicenseContent();
            licenseManager.store(licenseContent, new File(license.getLicensePath()));
            return true;
        } catch (Exception e) {
            logger.error(MessageFormat.format("证书生成失败:{0}", license), e);
            return false;
        }
    }
 
    /**
     * 初始化证书生成参数
     */
    private LicenseParam initLicenseParam() {
        Preferences preferences = Preferences.userNodeForPackage(LicenseCreator.class);
 
        //设置对证书内容加密的秘钥
        CipherParam cipherParam = new DefaultCipherParam(license.getStorePass());
 
        KeyStoreParam privateStoreParam = new CustomKeyStoreParam(LicenseCreator.class
                , license.getPrivateKeysStorePath()
                , license.getPrivateAlias()
                , license.getStorePass()
                , license.getKeyPass());
 
        return new DefaultLicenseParam(license.getSubject()
                , preferences
                , privateStoreParam
                , cipherParam);
    }
 
    /**
     * 设置证书生成正文信息
     */
    private LicenseContent initLicenseContent() {
        LicenseContent licenseContent = new LicenseContent();
        
        String name = String.format("CN=%s, OU=%s, O=%s, L=%s, ST=%s, C=%s", license.getCn(),license.getOu(),license.getO(),license.getL(),license.getSt(),license.getC());
        X500Principal holder = new X500Principal(name);//需要根据入参初始化
        
        licenseContent.setHolder(holder);
        licenseContent.setIssuer(DEFAULT_ISSUER);
 
        licenseContent.setSubject(license.getSubject());
        licenseContent.setIssued(license.getIssuedTime());
        licenseContent.setNotBefore(license.getIssuedTime());
        licenseContent.setNotAfter(license.getExpiryTime());
        licenseContent.setConsumerType(license.getConsumerType());
        licenseContent.setConsumerAmount(license.getConsumerAmount());
        licenseContent.setInfo(license.getDescription());
 
        //扩展校验,这里可以自定义一些额外的校验信息(也可以用json字符串保存)
        if (license.getLicenseExtraModel() != null) {
            licenseContent.setExtra(license.getLicenseExtraModel());
        }
 
        return licenseContent;
    }
 
}