发布时间:2025-12-10 11:24:01 浏览次数:6
在客户服务器部署软件项目后,为了项目版权管控或者对项目进行授权收费处理的,就需要实现项目的授权和许可验证。
在这里讲解的是使用 license证书 的形式实现授权和许可验证(已通过测试)。
主要是通过 IP地址、MAC地址、CPU序列号、主板序列号 服务器硬件信息生成一个License证书,同时可以设置生效时间与失效时间,控制项目到期之后项目不可用。
license授权机制的原理
1、生成密钥对,包含私钥和公钥。2、授权者保留私钥,使用私钥对授权信息诸如使用截止日期,mac 地址等内容生成 license 签名证书。3、公钥给使用者,放在代码中使用,用于验证 license 签名证书是否符合使用条件。实现流程
1、使用JDK自带的 keytool 生成密钥对(生成私钥和公钥两个文件)2、License服务端获取服务器硬件信息3、License服务器根据服务器硬件信息和私钥文件加密生成 License.lic 文件,也就是License证书。4、License客户端安装License证书并生效和到期日期进行校验1、自己本地随便找个位置创建一个文件夹,我这里创建了名为 License 的文件夹
2、进入到该文件中,在上面的路径中输入cmd并回车,会打开命令窗口
3、在命令窗口中依次输入以下命令
命令参数说明:
keysize 密钥长度keyalg 加密方式 validity 私钥的有效期(单位:天)alias 私钥别称keystore 指定私钥库文件的名称 (生成在当前目录)storepass 指定私钥库的密码 (keystore 文件存储密码)keypass 指定别名条目的密码 (私钥加解密密码)dname 证书个人信息CN 为你的姓名OU 为你的组织单位名称O 为你的组织名称L 为你所在的城市名称ST 为你所在的省份名称C 为你的国家名称 # 删除keytool -delete -alias privateKey -keystore "privateKeys.keystore" -storepass "ljh521548"# 查看keytool -list -v -keystore zuiyuPrivateKeys.keystore -storepass "ljh521548"源码:https://gitee.com/sshmily/license-service
1、启动后通过 /api/license/getServerInfos/{osName} 接口获取到服务器的硬件地址。
如果是windows系统osName参数就输入windows,Linux系统osName参数就输入Linux。
2、使用服务器的硬件信息和第一步生成的私钥生成License证书
使用 /api/license/generateLicense 接口生成证书。
请求参数示例
源码:https://gitee.com/sshmily/license-client
源码拿到本地后主要是修改yml文件配置即可,其他的代码都有说明
license:subject: license_ljh #主题名publicAlias: publicCert #公钥别名storePass: ljh21548 #密钥库密码licensePath: D:/License/license.lic #license证书存放位置publicKeysStorePath: D:/License/publicCerts.keystore #公钥文件存放位置uploadPath: D:/LicenseDemo/当证书过期的时候启动客户端控制台会提示 exc.licenseHasExpired 错误,说明证书已经过期的。
这个时候访问项目就会出现以下提示