赞
踩
License,也就是版权许可证书,一般用于收费软件给付费用户提供的访问许可证明。根据应用部署位置的不同,一般可以分为以下几种情况讨论:
注意:任何加密都有反编译、破解、跳过的手段。
license授权机制的原理
TrueLicense是一个开源的证书管理引擎。
项目源代码地址:https://www.aliyundrive.com/s/2zzpRqTC988
使用Keytool生成公私钥证书库
假如我们设置公钥库密码为:public_password1234,私钥库密码为:private_password1234,则生成命令如下(按顺序执行下边的三条命令即可):
## 1. 生成私匙库 # validity:私钥的有效期多少天 # alias:私钥别称 # keystore: 指定私钥库文件的名称(生成在当前目录) # storepass:指定私钥库的密码(获取keystore信息所需的密码) # keypass:指定别名条目的密码(私钥的密码) keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password1234" -keypass "private_password1234" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" ## 2. 把私匙库内的公匙导出到一个文件当中 # alias:私钥别称 # keystore:指定私钥库的名称(在当前目录查找) # storepass: 指定私钥库的密码 # file:证书名称 keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password1234" -file "certfile.cer" ## 3. 再把这个证书文件导入到公匙库 # alias:公钥别称 # file:证书名称 # keystore:公钥文件名称 # storepass:指定私钥库的密码 keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "public_password1234"
在D盘新建一个license目录,在该目录下打开cmd窗口,执行上边第一个命令后,就会生成privateKeys.keystore文件,如下
再接着执行第二条命令,生成certfile.cer文件,如下
再接着执行第三条命令,生成publicCerts.keystore文件,如下
上述命令执行完成之后,会在当前路径下生成三个文件,分别是:privateKeys.keystore、publicCerts.keystore、certfile.cer。其中文件certfile.cer不再需要,可以删除,文件privateKeys.keystore用于当前的 license-server 项目给客户生成license文件,而文件publicCerts.keystore则随应用代码部署到客户license-client服务器,用户解密license文件并校验其许可信息。
把server程序部署到客户服务器上,获取客户端的信息
把license-server项目部署到用户服务器上,启动项目里的license-server端程序,然后访问如下接口http://localhost:8000/license/getServerInfos,获取客户部署服务器的cpu、ip、mac地址、主板序列号等等信息。当然,如果license里不校验用户服务器的这些信息的话,就没必要获取这些内容了。如license只对有效日期进行校验,则不需要访问这个接口获取用户的部署环境信息了。
生成license证书
在我们自己本地(不是客户服务器了),运行license-server项目,项目启动后,由于是post请求,只能通过postman访问接口,生成证书,请求地址:http://localhost:8000/license/generateLicense
头信息
body信息如下:
ip和mac是数组,可以写多个。licenseCheckModel里的内容,不校验的话可以不写
body如下
body:
{ "subject": "license_demo", "privateAlias": "privateKey", "keyPass": "private_password1234", "storePass": "public_password1234", "licensePath": "D:/license/license.lic", "privateKeysStorePath": "D:/license/privateKeys.keystore", "issuedTime": "2023-04-10 00:00:01", "expiryTime": "2024-05-31 23:59:59", "consumerType": "User", "consumerAmount": 1, "description": "这是证书描述信息", "licenseCheckModel": { "ipAddress": [], "macAddress": [], "cpuSerial": "", "mainBoardSerial": "" } }
上边参数,各字段含义如下
{ "subject": "license_demo",主题名,一般写项目名就行 "privateAlias": "privateKey",私钥名称 "keyPass": "private_password1234",私钥密码· "storePass": "public_password1234",证书校验的密码 "licensePath": "D:/license/license.lic",要生成的证书路径 "privateKeysStorePath": "D:/license/privateKeys.keystore",之前生成的文件的路径 "issuedTime": "2023-04-10 00:00:01",证书开始生效的时间 "expiryTime": "2024-05-31 23:59:59",证书有效期结束的时间 "consumerType": "User", "consumerAmount": 1, "description": "这是证书描述信息", "licenseCheckModel": { 下边这些内容可以为空,为空的话就不进行验证了,有值才会进行验证 "ipAddress": [],ip地址(由于客户的ip会动态变化所以一般不设置ip校验) "macAddress": [],mac地址 "cpuSerial": "",cpu序列号 "mainBoardSerial": "" 主板序列号 } }
调完接口后,会生成证书如下
生成上边的证书,也可以直接执行代码里提供的测试方法:
资料里的license-client项目,就是要部署在客户服务器上的项目。
把2.1章节里生成的license.lic文件,还有公钥文件,放到客户服务器指定目录,项目里指定的目录要与这个文件目录一致
启动项目测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。