• Spring Boot项目中使用 TrueLicense 生成和验证License(附源码)


    1、Linux

    在客户linux上新建layman目录,导入license.sh文件

    [root@localhost layman]# mkdir -p /layman
    
    • 1

    license.sh文件内容:

    #!/bin/bash
    # 1.获取要监控的本地服务器IP地址
    IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2}'`
    echo "IP地址:"$IP
    #
    # 2.获取默认网卡Mac地址
    mac_address=`cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address`
    echo "默认网卡Mac地址:"$mac_address
    #
    # 3.获取CPU序列号
    CPU_serial_number=`dmidecode -t 4 | grep ID |sort -u |awk -F': ' '{print $2}'`
    echo "CPU序列号:"$CPU_serial_number
    #
    # 4.获取主板序列号
    Motherboard_serial_number=`sudo dmidecode -s system-serial-number`
    echo "主板序列号:"$Motherboard_serial_number
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    执行sh文件,会在该目录下生成license.log

    [root@localhost layman]# sh license.sh 2>&1 | tee license.log
    
    • 1

    在这里插入图片描述

    2、Windows

    创建获取IP,mac,CPU,主板信息.bat文件,双击运行,会在D盘生成ComputerInfos.txt文件。
    .bat文件内容如下:

    @echo off
    echo 开始获取本机IP、MAC、CPU序列号、主板序列号信息,请稍等......
     
    if  exist D:\ComputerInfos.txt (
    echo ===================本机已删除旧的信息文件,请重新运行获取!!!==================
    del D:\ComputerInfos.txt 
    ) else (
    
    rem 查看本机IP信息
    echo 1-本机IP信息----------------------------------------------------------------------------:>>D:\ComputerInfos.txt 
     ipconfig>>D:\ComputerInfos.txt 
     
    rem 查看本机mac信息
    echo 2-本机mac信息---------------------------------------------------------------------------:>>D:\ComputerInfos.txt 
    getmac>>D:\ComputerInfos.txt 
    
    rem 查看本机CPU信息
    echo 3-本机CPU序列号-----------------------------------------------------------------------:>>D:\ComputerInfos.txt 
     wmic cpu get processorid>>D:\ComputerInfos.txt 
     
    rem 4-查看本机主板信息
    echo 4-主板序列号----------------------------------------------------------------------------:>>D:\ComputerInfos.txt
    wmic baseboard get SerialNumber>>D:\ComputerInfos.txt 
    echo "===================本机信息保存在 D:\ComputerInfos.txt================ "
    )
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    步骤

    1、使用JDK自带的 keytool 工具生成公私钥证书库:

    在C:\盘中新建layman目录,在 C:\layman 中cmd执行如下命令:
    假如我们设置公钥库密码为:public_password1234,私钥库密码为:private_password1234,则生成命令如下:

    #生成命令
    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"
    
    #导出命令
    keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password1234" -file "certfile.cer"
    
    #导入命令
    keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "public_password1234"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上述命令执行完成之后,会在当前路径下生成三个文件,分别是:privateKeys.keystore、publicCerts.keystore、certfile.cer。其中文件certfile.cer不再需要可以删除,文件privateKeys.keystore用于当前的 ServerDemo 项目给客户生成license文件,而文件publicCerts.keystore则随应用代码部署到客户服务器,用户解密license文件并校验其许可信息。

    2、为客户生成license文件:

    将LicenseDemo代码拉取到本地(联系作者获取源码),部署项目LicenseDemo,启动ServerDemo服务。
    使用postman工具:
    1、get请求获取客户机的ip、mac、cpu序列号、主板串行号等信息

    get
    http://127.0.0.1:7000/license/getServerInfos
    Content-Type      application/json;charset=UTF-8
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    2、post请求生成license.lic文件

    post
    http://127.0.0.1:7000/license/generateLicense
    请求时需要在Header中添加一个 Content-Type ,其值为:application/json;charset=UTF-8。参数示例如下:
    Content-Type      application/json;charset=UTF-8
    {
    	"subject": "layman_license",
    	"privateAlias": "privateKey",
    	"keyPass": "private_password1234",
    	"storePass": "public_password1234",
    	"licensePath": "C:/layman/license.lic",
    	"privateKeysStorePath": "C:/layman/privateKeys.keystore",
    	"issuedTime": "2023-04-18 00:00:00",
    	"expiryTime": "2023-04-24 10:20:00",
    	"consumerType": "User",
    	"consumerAmount": 1,
    	"description": "这是证书描述信息",
    	"licenseCheckModel": {
    		"ipAddress": [ "192.168.3.57","192.168.101.1"],
    		"macAddress": ["00-50-56-C0-00-08", "E0-E1-A9-9D-35-C8"],
    		"cpuSerial": "BFEBFBFF000906EA",
    		"mainBoardSerial": "/5H6MJ23/CNWS2009BK01DR/"
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述
    如果请求成功,那么最后会在 licensePath 参数设置的路径生成一个 license.lic 的文件,这个文件就是给客户部署代码的服务器许可文件。

    3、校验license:

    ClientDemo服务中license-config.properties参数配置如下:

    #License相关配置
    license.subject=layman_license   #主体 - 注意主体要与生成证书的主体一致一致,不然验证通过不了
    license.publicAlias=publicCert   #公钥别称
    license.storePass=public_password1234   #访问公钥的密码
    license.licensePathWin=C:/layman/license.lic   #license位置
    license.publicKeysStorePathWin=C:/layman/publicCerts.keystore   #公钥位置
    license.licensePathLinux=/layman/license.lic
    license.publicKeysStorePathLinux=/layman/publicCerts.keystore
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    启动ClientDemo服务,访问 http://127.0.0.1:7080/login。
    如果证书失效,这会出现以下报错。
    在这里插入图片描述

  • 相关阅读:
    布隆过滤器&HyperLogLog
    供应磷脂-聚乙二醇-羧基,DSPE-PEG-COOH,DSPE-PEG-Acid,MW:5000
    学成在线第一天
    Flink Kylinv10 java8 Flink镜像制作
    java-拓展
    计算机网络第三章习题
    解密负载均衡技术和负载均衡算法
    【C++】模版-初阶
    2021 ICPC 昆明 I Mr Main and Windmills(直线与线段的交点)
    linux下的gdb调试器
  • 原文地址:https://blog.csdn.net/weixin_54514751/article/details/133851967