SpringBoot -- 软件许可(License)证书生成+验证+应用完整流程

一、项目目录树结构

   

        由于时间有限,不可能在博客上花太多时间、也不可能每一个细节都说的很细,所以,下面的内容虽然一时间看着比较懵,但是文末有项目的GitHub地址,或者不懂的可以留言;

      

       这个是粗糙的项目结构,没有细分,实际应用的话应该是授权的代码要和验证的代码分开,防止授权的代码引进客户端系统中,被破解和拆穿,也为了防止公钥store被客户端用户串改;

 

      正确、良好的结构应该是如下的:

      由于上面的结构里面引入了其他包,故在最后,我就不放这个结构的代码在我的github上了

二、如何生成秘钥对

       网上有,这个不再细说了,直接上文本:

1、首先要用KeyTool工具来生成私匙库:(-alias别名 –validity 3650表示10年有效)
keytool -genkey -alias privatekey -keystore privateKeys.store -validity 3650

2、然后把私匙库内的公匙导出到一个文件当中:
keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store

3、然后再把这个证书文件导入到公匙库:
keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store

最后生成文件privateKeys.store、publicCerts.store拷贝出来备用。

三、如何应用

(1) 获取服务器硬件信息

访问地址:localhost:8066/license/getServerInfos

{
    "ipAddress": [
        "10.16.248.102"
    ],
    "macAddress": [
        "58-00-E3-D4-83-2B"
    ],
    "cpuSerial": "BFEBFBFF000506E3",
    "mainBoardSerial": "",
    "macCheck": false,
    "ipCheck": false,
    "cpuCheck": false,
    "boardCheck": false
}

(2) 生成许可文件

  生成接口:localhost:8066/license/generateLicense

 

  注册信息:

 

{
	"subject": "landi",
	"privateAlias": "privateKey",
	"keyPass": "123456a",
	"storePass": "123456a",
	"licensePath": "F:\\app\\license.lic",
	"privateKeysStorePath": "/privateKeys.store",
	"issuedTime": "2019-09-26 14:50:00",
	"expiryTime": "2019-09-27 17:45:55",
	"consumerType": "User",
	"consumerAmount": 1,
	"description": "这是证书描述信息",
	"licenseCheck": {
		"ipCheck":true,
		"ipAddress": [
			"10.16.248.102", "10.0.5.22"
		],
		"macCheck":true,
		"macAddress": [
			"58-00-E3-D4-83-2B", "50-7B-9D-F9-18-41"
		],
		"cpuSerial": "BFEBFBFF000406E3",
		"mainBoardSerial": "L1HF65E00X9"
	}
}

 

  注册结果:

{
    "result": "ok",
    "msg": {
        "subject": "landi",
        "privateAlias": "privateKey",
        "keyPass": "123456a",
        "storePass": "123456a",
        "licensePath": "F:\\app\\license.lic",
        "privateKeysStorePath": "/privateKeys.store",
        "issuedTime": "2019-09-26 14:50:00",
        "expiryTime": "2019-09-27 17:45:55",
        "consumerType": "User",
        "consumerAmount": 1,
        "description": "这是证书描述信息",
        "licenseCheck": {
            "ipAddress": [
                "10.16.248.102",
                "10.0.5.22"
            ],
            "macAddress": [
                "58-00-E3-D4-83-2B",
                "50-7B-9D-F9-18-41"
            ],
            "cpuSerial": "BFEBFBFF000406E3",
            "mainBoardSerial": "L1HF65E00X9",
            "macCheck": true,
            "ipCheck": true,
            "cpuCheck": false,
            "boardCheck": false
        }
    },
    "date": "证书安装成功,证书有效期:2019-09-26 14:50:00 - 2019-09-27 17:45:55"
}

(3) 项目启动 -- 安装证书

 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.4.RELEASE)

2019-09-27 14:10:04.196  INFO 16220 --- [           main] cn.bluethink.license.App                 : Starting App on 9VSNYQQSFL96GK6 with PID 16220 (F:\gitlab\license\target\classes started by Administrator in F:\gitlab\license)
2019-09-27 14:10:04.199  INFO 16220 --- [           main] cn.bluethink.license.App                 : No active profile set, falling back to default profiles: default
2019-09-27 14:10:05.689  INFO 16220 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8066 (http)
2019-09-27 14:10:05.712  INFO 16220 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-09-27 14:10:05.712  INFO 16220 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.17]
2019-09-27 14:10:05.817  INFO 16220 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-09-27 14:10:05.818  INFO 16220 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1571 ms
2019-09-27 14:10:06.042  INFO 16220 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
[INFO ] 2019-09-27 14:10:06,274 method:cn.bluethink.license.listener.LicenseCheckListener.onApplicationEvent(LicenseCheckListener.java:60)
++++++++ 开始安装证书 ++++++++
[INFO ] 2019-09-27 14:10:06,430 method:cn.bluethink.license.core.LicenseVerify.install(LicenseVerify.java:41)
证书安装成功,证书有效期:2019-09-26 14:50:00 - 2019-09-27 17:45:55
[INFO ] 2019-09-27 14:10:06,430 method:cn.bluethink.license.listener.LicenseCheckListener.onApplicationEvent(LicenseCheckListener.java:73)
++++++++ 证书安装结束 ++++++++
2019-09-27 14:10:06.463  INFO 16220 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8066 (http) with context path ''
2019-09-27 14:10:06.466  INFO 16220 --- [           main] cn.bluethink.license.App                 : Started App in 2.523 seconds (JVM running for 2.854)

(4) 许可认证

     认证接口:localhost:8066/hello

A:验证主板信息的(认证不通过的情况):

后台控制台信息输出:

B:不验证主板信息(认证通过的情况):

(四)项目GitHub地址

https://github.com/kobeyk/license.git

分支:

发布了208 篇原创文章 · 获赞 645 · 访问量 212万+

猜你喜欢

转载自blog.csdn.net/Appleyk/article/details/101530203