license-service授权加密jar包

license-service授权加密jar包

参考博主

想养一只!

https://blog.csdn.net/weixin_45151960/article/details/128262535

在客户服务器部署软件项目后,为了项目版权管控或者对项目进行授权收费处理的,就需要实现项目的授权和许可验证。

在这里讲解的是使用 license证书 的形式实现授权和许可验证(已通过测试)。
主要是通过 IP地址、MAC地址、CPU序列号、主板序列号 服务器硬件信息生成一个License证书,同时可以设置生效时间与失效时间,控制项目到期之后项目不可用

详解

image-20230925150120865

license授权机制的原理

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

实现流程

1、使用JDK自带的 keytool 生成密钥对(生成私钥和公钥两个文件)
2、License服务端获取服务器硬件信息
3、License服务器根据服务器硬件信息和私钥文件加密生成 License.lic 文件,也就是License证书。
4、License客户端安装License证书并生效和到期日期进行校验
License服务端获取服务器信息和生成License证书

我使用的服务器是LINUX,debian10操作系统,mvn clean package 首先build,然后java -jar启动jar包
image-20230925150516263

启动jar包

java -jar   license-service.jar

image-20230925151808974

生成证书

## 1. 生成私匙库
# validity:私钥的有效期多少天
# alias:私钥别称
# keystore: 指定私钥库文件的名称(生成在当前目录)
# storepass:指定私钥库的密码(获取keystore信息所需的密码)
# keypass:指定别名条目的密码(私钥的密码)
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password123456" -keypass "private_password123456" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"

## 2. 把私匙库内的公匙导出到一个文件当中
# alias:私钥别称
# keystore:指定私钥库的名称(在当前目录查找)
# storepass: 指定私钥库的密码
# file:证书名称
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password123456" -file "certfile.cer"

## 3. 再把这个证书文件导入到公匙库
# alias:公钥别称
# file:证书名称
# keystore:公钥文件名称
# storepass:指定私钥库的密码
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "public_password123456"

image-20230926103131697

访问接口

image-20230926103339529

{
    "subject": "license_demo",//主题名
    "privateAlias": "privateKey",//私钥别名
    "keyPass": "private_password123456",//私钥密码
    "storePass": "public_password123456",//密钥库密码
    "licensePath": "/opt/license.lic",//生成证书的存储位置
    "privateKeysStorePath": "/opt/privateKeys.keystore",//私钥的存储位置
    "issuedTime": "2023-09-09 00:00:00",//开始生效时间
    "expiryTime": "2099-12-09 00:00:00",//证书到期时间
    "description": "这是证书描述信息",
    "licenseCheckModel": {  //licenseCheckModel 第一步获取到的服务器硬件信息
        "ipAddress": [
            ""
        ],
        "macAddress": [
            ""
        ],
        "cpuSerial": "",
        "mainBoardSerial": ""
    }
}

生成证书

image-20230926103227379

部署成容器方式(二)

制作Dockerfile
# 使用 OpenJDK 8 镜像作为基础镜像
FROM openjdk:8-jre

# 维护者信息
MAINTAINER aike

# 创建应用程序目录并确保 /opt 存在
RUN mkdir -p /opt  &&  mkdir -p /mydata

# 复制你的 Java 应用程序 JAR 文件到容器
COPY target/license-service.jar /opt/app.jar

# 暴露应用程序的端口
EXPOSE 8000

docker build -t my-java-app:1.0 .  制作镜像

image-20230926104443694

编写docker-compose.yaml
version: '3'
services:
  license-service:
    image: my-java-app:1.0
    container_name: license-service
    ports:
      - "8000:8000"
    volumes:
      - /mydata/license-service/key:/mydata



docker compose up -d  启动

image-20230926104602309

生成证书

这里解释一下,因为这个加密JDK11加密有问题,必须使用JDK8所以才制作的镜像,这里有俩种办法解决,
1:是直接把生成证书的指令添加到Dockerfile里面,这样会增加体积

2:是进入到容器里面执行添加

## 1. 生成私匙库
# validity:私钥的有效期多少天
# alias:私钥别称
# keystore: 指定私钥库文件的名称(生成在当前目录)
# storepass:指定私钥库的密码(获取keystore信息所需的密码)
# keypass:指定别名条目的密码(私钥的密码)
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password123456" -keypass "private_password123456" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"

## 2. 把私匙库内的公匙导出到一个文件当中
# alias:私钥别称
# keystore:指定私钥库的名称(在当前目录查找)
# storepass: 指定私钥库的密码
# file:证书名称
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password123456" -file "certfile.cer"

## 3. 再把这个证书文件导入到公匙库
# alias:公钥别称
# file:证书名称
# keystore:公钥文件名称
# storepass:指定私钥库的密码
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "public_password123456"

容器里面
image-20230926105508486

宿主机也会存在

image-20230926105529532

访问接口-生成证书

image-20230926105900715

查看宿主机

image-20230926105945021

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值