License授权方案

源码地址: https://github.com/sixj0/license
解决的问题:

将项目卖给其他公司,需要将jar包在客户的服务器上部署,为了避免客户将项目jar包进行二次售卖,或者我们需要控制项目的使用期限,比如控制项目只能运行一年,这个是时候,需要使用License认证,生成一个License证书,该证书中包含客户服务器信息(IP地址、MAC地址、CPU序列号、主板序列号),同时可以设置生效时间与失效时间,控制项目到期之后项目不可用。

license授权机制的原理

(1)生成密钥对,包含私钥和公钥。

(2)授权者保留私钥,使用私钥对授权信息诸如使用截止日期,mac 地址等内容生成 license 签名证书。

(3)公钥给使用者,放在代码中使用,用于验证 license 签名证书是否符合使用条件。

使用KeyTool生成密匙库:
  1. 生成私钥库

    keytool -genkeypair -keysize 1024 -validity 3650 -alias SYSHLANG -keystore privateKeys.keystore -storepass 12345678A -keypass 12345678A -dname "CN=sixj, OU=runlion, O=redlion, L=HZ, ST=ZJ, C=CN"
    

参数说明:

  • keysize 密钥长度

  • validity 私钥的有效期(单位:天)

  • alias 私钥别称

  • keystore 指定私钥库文件的名称 (生成在当前目录)

  • storepass 指定私钥库的密码 (keystore 文件存储密码)

  • keypass 指定别名条目的密码 (私钥加解密密码)

  • dname 证书个人信息

  • CN 为你的姓名

  • OU 为你的组织单位名称

  • O 为你的组织名称

  • L 为你所在的城市名称

  • ST 为你所在的省份名称

  • C 为你的国家名称

  1. 生成证书文件

    keytool -exportcert -alias SYSHLANG -keystore privateKeys.keystore -storepass 12345678A -file certfile.cer
    

参数说明:

  • alias 私钥别称

  • keystore 指定私钥库文件的名称 (如果没有带路径,在当前目录查找)

  • storepass 指定私钥库的密码

  • file 导出证书文件名称

  1. 生成公钥库

    keytool -import -alias SYSHLANG -file certfile.cer -keystore publicCerts.keystore  -storepass 12345678A
    

参数说明:

  • alias 公钥别称

  • file 证书文件名称

  • keystore 公钥文件名称

  • storepass 指定私钥库的密码

看到以下三个文件:

  • privateKeys.keystore(私钥)提供给生成证书使用

  • publicCerts. keystore(公钥)提供给证书认证使用

  • certfile.cer后续步骤用不到,可以删除。

License证书:

根据客户服务器硬件信息(MAC地址、IP地址、CPU序列号、主板序列号)生成授权证书,同时可以给授权证书设置生效时间与失效时间。

整个授权过程分为三步:

  1. 获取客户端服务器信息(license-server-info服务)

将license-server-info服务部署到客户服务器上

请求接口/license/getServerInfo

得到硬件信息:

{
 "ipAddress": [ //授权的ip列表
     "172.17.0.8"
 ],
 "macAddress": [ //授权的mac地址列表
     "52-54-00-74-0B-D9"
 ],
 "cpuSerial": "55 06 05 00 FF FB 8B 0F", //cpu序列号
 "mainBoardSerial": "afb14aac-eccb-4a37-9c31-e7951ce73e0d"//主板序列号
}
  1. 生成授权证书(license-creator服务)

我们自己部署生成证书的服务(license-creator)

请求接口/license/generateLicense

传入授权信息:

{

 "expiryTime":"2021-05-25 19:07:59", //生效时间
 "issuedTime":"2021-04-25 19:07:00", //失效时间
 "keyPass":"12345678A", //密钥的密码
 "privateAlias":"SYSHLANG",
 "licensePath":"/Users/sixj/Desktop/license/license.lic", //证书生成地址
 "privateKeysStorePath":"/Users/sixj/Desktop/license/privateKeys.keystore",// 密钥文件地址
 "storePass":"12345678A", //密钥库的密码
 "subject":"pushi-kn-graph",
 "licenseCheckModel":{ //授权验证信息
     "cpuSerial":"47A8E193-23D4-5B93-92AB-4A96FBC0346F",//cpu序列号
     "ipAddress":[ //ip
         "192.168.174.107"
     ],
     "macAddress":[ //mac地址
         "F8-FF-C2-6A-3E-73"
     ],
     "mainBoardSerial":"C02C31HZMD6P"//主板序列号
 }
}
 

会生成一个license.lic授权文件到执行目录

  1. 授权验证(license-verify-starter)

需要添加授权功能的服务需要依赖license-verify-starter

配置证书信息

license.subject: pushi-kn-graph
license.publicAlias: SYSHLANG
license.storePass: 12345678A
license.licensePath: /Users/sixj/Desktop/license/license.lic
license.publicKeysStorePath: /Users/sixj/Desktop/license/publicCerts.keystore
 

项目启动的时候,会去验证授权证书的有效性,是否在有效期内,硬件信息是否匹配,如果授权证书无效,项目启动失败。

另外可以在一些核心接口,比如登陆接口,添加@License注解,请求该接口的时候,也会去验证授权证书的有效性,比如验证证书是否到期,如果失效,该接口将会拒绝访问。

  • 7
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
对于上传系统License证书的需求,以下是一个可能的需求说明: 一、需求背景 系统License证书是用于验证系统合法性和授权权限的重要文件。上传系统License证书的需求主要是为了将有效的License证书应用到系统中,确保系统能够正常运行并获得相应的功能和服务。 二、需求概述 上传系统License证书的需求主要包括以下方面: 1. 提供上传License证书的功能,允许管理员或授权人员将有效的License证书导入系统。 2. 验证License证书的合法性和有效性,确保上传的证书符合授权要求。 3. 实现License证书的解析和存储,将证书相关信息存储到系统中,以供后续验证和授权操作使用。 三、详细需求描述 1. 提供上传License证书的功能 1.1. 在系统管理界面或相关设置页面,提供上传License证书的按钮或文件选择功能。 1.2. 允许管理员或授权人员选择本地存储的License证书文件进行上传。 2. 验证License证书的合法性和有效性 2.1. 对上传的License证书进行验证,确保证书格式正确且未被篡改。 2.2. 根据证书中的授权信息,验证其是否与当前系统匹配,如授权时间、许可数量等。 2.3. 检查证书的数字签名或其他安全措施,确保证书的合法性和可信度。 3. 实现License证书的解析和存储 3.1. 对上传的License证书进行解析,提取出授权信息和相关数据。 3.2. 将License证书相关的信息存储到系统的数据库或其他持久化存储中,确保证书信息的可用性和安全性。 四、技术实现方案 1. 开发相应的界面或接口,用于实现上传License证书的功能。 2. 使用合适的加密算法或数字签名验证技术,确保证书的合法性和安全性。 3. 使用数据库或其他持久化存储技术,将License证书相关信息存储到系统中。 五、需求交付物 1. 需求说明书; 2. 系统设计文档; 3. 系统源代码; 4. 用户手册; 5. 系统部署说明。 六、注意事项 在上传License证书的过程中,需要确保证书的安全性和保密性,避免证书泄露给未经授权的人员。另外,需要进行充分的测试和验证,确保上传的证书能够成功应用到系统中,并且系统可以正常运行和提供相应的功能和服务。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值