1、简介

TrueLicense是一个开源的证书管理引擎,使用场景:当项目交付给客户之后用签名来保证客户不能随意使用项目,默认校验了开始结束时间,可扩展增加mac地址校验等。 其中还有ftp的校验没有尝试,本demo详细介绍的是本地校验 license授权机制的原理: 生成密钥对,方法有很多。我们使用trueLicense来做软件产品的保护,我们主要使用它的LicenseManager类来生成证书文件、安装证书文件、验证证书文件。

2、原理

  • 首先需要生成密钥对,方法有很多,JDK中提供的KeyTool即可生成。
  • 授权者保留私钥,使用私钥对包含授权信息(如截止日期,MAC地址等)的license进行数字签名。
  • 公钥交给使用者(放在验证的代码中使用),用于验证license是否符合使用条件。

3、生成密钥对

3.1、生成私匙库

validity:私钥的有效期多少天(3650≈10年)
alias:私钥别称
keystore: 指定私钥库文件的名称(生成在当前目录)
storepass:指定公/私钥库的密码(获取keystore信息所需的密码)
keypass:指定别名条目的密码(私钥的密码)

keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKeyAliasDemo" -keystore "privateKeyStoreNameDemo.keystore" -storepass "storePwdDemo@qst613" -keypass "privateKeyDemo@qst613" -dname "CN=demo, OU=demo, O=demo, L=TJ, ST=TJ, C=CN"

3.2、把私匙库内的公匙导出到一个文件当中

alias:私钥别称
keystore:指定私钥库的名称(在当前目录查找)
storepass: 指定公/私钥库的密码
file:证书名称

keytool -exportcert -alias "privateKeyAliasDemo" -keystore "privateKeyStoreNameDemo.keystore" -storepass "storePwdDemo@qst613" -file "certFileDemo.cer"

3.3、再把这个证书文件导入到公匙库

alias:公钥别称
file:证书名称
keystore:公钥文件名称
storepass:指定公/私钥库的密码(这个后面在项目中使用)

keytool -import -alias "publicKeyAliasDemo" -file "certFileDemo.cer" -keystore "publicKeyStoreNameDemo.keystore" -storepass "storePwdDemo@qst613"

注意:公/私钥库密码要一致。

4、代码实现

完整代码见:

4.1、引入依赖

<!--license依赖-->
<dependency>
    <groupId>de.schlichtherle.truelicense</groupId>
    <artifactId>truelicense-core</artifactId>
    <version>1.33</version>
    <scope>provided</scope>
</dependency>

<!--工具包,项目内已引入依赖的不要导入-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

<!--json,项目内已引入依赖的不要导入-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.33</version>
</dependency>

4.2、具体类

下面是简单说明,详见代码实现:

java license使用 java实现license认证_密钥对

4.3、yml配置

license:
  #License路径
  licensePath: D:/0/demo/license.lic
  #项目主题与生成License保持一致
  subject: dq-demo
  #公钥别称
  publicAlias: publicKeyAliasDemo
  #访问公钥库的密码
  storePass: storePwdDemo@qst613
  #公钥文件路径
  publicKeysStorePath: D:/0/demo/publicKeyStoreNameDemo.keystore

4.4、生成证书

使用下面方式调用系统服务或者使用工具见:

使用Postman,用POST请求方式请求http://localhost:8090/license/generateLicense

{
 "subject": "dq-demo",
 "privateAlias": "privateKeyAliasDemo",
 "keyPass": "privateKeyDemo@qst613",
 "storePass": "storePwdDemo@qst613",
 "licensePath": "D:/0/demo/license.lic",
 "privateKeysStorePath": "D:/0/demo/privateKeyStoreNameDemo.keystore",
 "issuedTime": "2022-10-11 00:00:00",
 "expiryTime": "2032-10-10 23:59:59",
 "consumerType": "user",
 "consumerAmount": 1,
 "description": "临时证书",
 "licenseCheckModel": {
  "ipAddress": ["10.86.37.169", "192.168.181.1", "192.168.159.1"],
  "macAddress": ["4C-CC-6A-C7-8E-27","00-50-56-C0-00-01","00-50-56-C0-00-08"],
  "cpuSerial": "BFEBFBFF000506E3"
 }
}

java license使用 java实现license认证_证书_02

5、启动效果

java license使用 java实现license认证_证书_03