通过图文详细描述基于TrueLicense
实现的一个带认证的前后端分离Demo。
项目模块说明:
license-demo
|- license-client (模拟真实应用客户端)
|- license-server (生成证书的服务端)
|- license-web (模拟前后端分离页面)
开发的软件产品在交付使用的时候,往往有一段时间的试用期,这期间我们不希望自己的代码被客户二次拷贝,这个时候license
就派上用场了,license
的功能包括设定有效期
、绑定ip
、绑定mac
等。
授权方直接生成一个license
给使用方使用,如果需要延长试用期,也只需要重新生成一份即可,无需手动修改源代码。
TrueLicense
是一个开源的证书管理引擎,详细介绍见 https://truelicense.java.net/
首先介绍下license授权机制的原理:
了解了这些后,我们来看下如何生成证书并校验把。
首先要用KeyTool
工具来生成私匙库
(-alias别名 -validity 1 表示1天有效):
keytool -genkey -alias licDemoPri -keysize 1024 -keystore licDemoPri.store -validity 1
然后把私匙库内的证书导出到一个文件中(注意alias包括keyStore跟上一步命令中的保持一致):
keytool -export -alias licDemoPri -file licDemo.cer -keystore licDemoPri.store
然后再把这个证书文件导入到公匙库(注意file跟上一步命令中的保持一致):
keytool -import -alias licDemoPub -file licDemo.cer -keystore licDemoPub.store
接着我们把文件拷贝出来,我这边的目录是C:\Users\Administrator
,找到licDemoPri.store
,licDemoPub.store
拷贝出来备用。
利用私钥生成证书,我们需要两部分内容,一部分是私钥的配置信息(私钥的配置信息在生成私钥库的过程中获得),一部分是自定义的项目证书信息。
这边可以参考license-server
项目,关于私钥的一些配置信息可以在application.properties
下看到:
#License相关配置
## 项目的唯一识别码
license.subject=licDemo
## 私钥的别名
license.privateAlias=licDemoPri
## 该密码是生成密钥对的密码 — 需要妥善保管,不能让使用者知道
license.keyPass=demo123456
## 该密码是访问密钥库的密码 — 使用 keytool 生成密钥对时设置,使用者知道该密码
license.storePass=demo123456
## 证书生成路径
license.licensePath=C:/Users/Administrator/Desktop/license-demo/license.lic
## 密钥库的地址
license.privateKeysStorePath=C:/Users/Administrator/Desktop/license-demo/licDemoPri.store
## 发布日期
license.issuedTime=2021-04-20 15:00:12
## 失效日期
license.expiryTime=2021-04-20 17:55:00
启动项目后,系统就会自动生成一份证书到licensePath
,如下图所示:
生成的证书文件如下图:
这边需要注意的是,发布日期和失效日期一定要配置正确,不然启动会无法生成证书。
生成好证书后,我们接下来就要模拟真实应用如何校验证书了,这边可以参考license-client
和license-web
项目。
利用公钥验证证书,我们需要有公钥库、license证书等信息,关于公钥的相关信息可以见license-client
项目下的application.properties
,如下:
# 公钥的配置信息
## 项目的唯一识别码
license.subject=licensedemo
## 公钥别名
license.publicAlias=pubDemo
## 密码
license.storePass=zjw123456
## 证书路径
license.licensePath=C:/Users/Administrator/Desktop/license-client/license.lic
## 公共库路径
license.publicKeysStorePath=C:/Users/Administrator/Desktop/license-client/pubDemo.store
接下来就是怎么用公钥验证license证书,怎样验证 ip、mac 地址等信息的过程了,关于这部分代码可以见:LicenseInterceptor
。
还有最重要的一点,我们需要在项目启动的时候,安装licnese
证书,然后验证ip、mac 等信息。如果校验不通过,就阻止项目启动,关于启动安装证书见:LicenseInstallController
配置文件修改正确后,我们启动Client项目进行证书的验证,启动后,会进行证书的安装及校验,如下图所示:
接下来我们打开license-web
的login.html
,点击登录按钮,观察控制台,对证书也进行了校验,如下图所示:
真实场景部署完后,记得删除server
的jar,只保留license.lic
及licDemoPub.store
即可。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。