1 Star 0 Fork 0

大兔子 / LicenseDemo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

LicenseDemo

通过图文详细描述基于TrueLicense实现的一个带认证的前后端分离Demo。

项目模块说明:

license-demo
    |- license-client (模拟真实应用客户端)
    |- license-server (生成证书的服务端)
    |- license-web    (模拟前后端分离页面)

1. 为什么需要License?

开发的软件产品在交付使用的时候,往往有一段时间的试用期,这期间我们不希望自己的代码被客户二次拷贝,这个时候license就派上用场了,license的功能包括设定有效期绑定ip绑定mac 等。

授权方直接生成一个license给使用方使用,如果需要延长试用期,也只需要重新生成一份即可,无需手动修改源代码。

TrueLicense是一个开源的证书管理引擎,详细介绍见 https://truelicense.java.net/

首先介绍下license授权机制的原理:

  • 生成密钥对,包含私钥和公钥。
  • 授权者保留私钥,使用私钥对授权信息诸如使用截止日期,mac 地址等内容生成 license 签名证书。
  • 公钥给使用者,放在代码中使用,用于验证 license 签名证书是否符合使用条件。

了解了这些后,我们来看下如何生成证书并校验把。

2. 生成密钥对

首先要用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.storelicDemoPub.store 拷贝出来备用。

3. 通过私钥生成证书

利用私钥生成证书,我们需要两部分内容,一部分是私钥的配置信息(私钥的配置信息在生成私钥库的过程中获得),一部分是自定义的项目证书信息。

这边可以参考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,如下图所示:

通过私钥生成证书

生成的证书文件如下图:

生成的证书文件

这边需要注意的是,发布日期和失效日期一定要配置正确,不然启动会无法生成证书。

4. 利用公钥验证证书

生成好证书后,我们接下来就要模拟真实应用如何校验证书了,这边可以参考license-clientlicense-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

5. 验证

配置文件修改正确后,我们启动Client项目进行证书的验证,启动后,会进行证书的安装及校验,如下图所示:

证书验证1

接下来我们打开license-weblogin.html,点击登录按钮,观察控制台,对证书也进行了校验,如下图所示:

证书验证2

6. 其他

真实场景部署完后,记得删除server的jar,只保留license.liclicDemoPub.store即可。

空文件

简介

暂无描述 展开 收起
Java 等 4 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/zjwGit/license-demo.git
git@gitee.com:zjwGit/license-demo.git
zjwGit
license-demo
LicenseDemo
master

搜索帮助