前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TrueLicense使用

TrueLicense使用

作者头像
用户1637609
发布2022-09-08 20:29:05
1.4K0
发布2022-09-08 20:29:05
举报
文章被收录于专栏:马洪彪

参考:

https://blog.csdn.net/qq_43403676/article/details/124578390 https://blog.csdn.net/Genmer/article/details/118574390

原理:

qingfeng这个东西没少写,但有缺陷,合理的逻辑应是:

  • license,授权,授权内容应包含授权给谁(服务器、客户等)、授权使用时限(无限期或特定时间)、授权的功能(trunk license的版本,授权可用的系统功能、模块)、授权的并发用户数(高级内容,可限制用户的并发用户量)、授权的客户端(高级内容,对于global部署的系统可限制用户的公司分部)
  • 用户服务器(license的client端)获取服务器IP、MAC等作为被授权服务器的标识。qingfeng的示例代码是在server端。。。。
  • 应对IP、MAC这些信息进行编码,计算哈希值等,应避免被授权用户知晓服务器的标识,以免被授权用户篡改,例如知晓标识为IP地址,则修改了某未授权服务器A的IP地址为授权的服务器B的IP地址后就可以非法在A服务器上运行。 当然,应对用户告知服务器的识别信息,例如告知服务器识别信息包含IP,则用户在更换IP时提前申请license避免事故。因此标识信息应尽量使用主板、CPU标识而非IP这些容易更改的。避免合法用户的多余license注册和非法用户的盗用license需要平衡。 服务器主机识别适用于单机软件,对于集群服务难以识别主机,应使用被授权的系统标识、数据库标识等。
  • 当用户获取到服务器标识,一般称为install key,安装码,发给授权方进行授权。
  • 授权方将安装码(识别授权给谁)和使用权限等信息编制license授权书
  • 为了保密,防止被授权方篡改、复制授权信息,例如篡改使用期限,对license加密,可使用对称或非对称加密
  • qingfeng示例使用非对称加密,因此先用jdk工具创建密钥对,然后私钥加密,将加密后的license发给用户
  • 系统在运行时,使用公钥(部署在系统的特定位置)解密license(内存),并使用license,使被授权方无法篡改license
  • 系统运行时可对license中的信息校验,例如校验时限不对,则停止服务
  • 系统运行后,可对服务进行拦截,并校验,例如校验并发数、校验功能授权等,校验不通过则服务不可用
  • 授权方如需要破解,1是通过注册机模式(kegen)生成license,因为对license校验时是从内存中加载解密的license,因此及时用户自行解密获取license也无法提供给程序
  • 2是使用破解模式(crack),找到验证license的地方或生成license的地方,去掉license的验证或伪造license,验证的地方一般多,生成license的地方少。
  • 应对办法:1.生成license的地方通过动态编译、代理等方式实现,破解方难以找到。
  • 2.调用验证的地方,破解方通过反编译可修改调用,因此使用代码混淆(丑化)使破解方无法理解代码。

生成公私密钥

  • 使用管理员允许cmd,避免创建密钥库失败
  • 进入jdk目录 cd C:\Program Files\Java\jdk1.8.0_321\bin
  • 生成秘钥对 keytool是jdk带的“密钥和证书管理工具”

命令: -certreq 生成证书请求 -changealias 更改条目的别名 -delete 删除条目 -exportcert 导出证书 -genkeypair 生成密钥对 -genseckey 生成密钥 -gencert 根据证书请求生成证书 -importcert 导入证书或证书链 -importpass 导入口令 -importkeystore 从其他密钥库导入一个或所有条目 -keypasswd 更改条目的密钥口令 -list 列出密钥库中的条目 -printcert 打印证书内容 -printcertreq 打印证书请求的内容 -printcrl 打印 CRL 文件的内容 -storepasswd 更改密钥库的存储口令

使用genkeypair命令生成密钥对

生成密钥对

选项:

-alias 要处理的条目的别名 -keyalg 密钥算法名称 -keysize 密钥位大小 -groupname Group name. For example, an Elliptic Curve name. -sigalg 签名算法名称 -destalias 目标别名 -dname 唯一判别名 -startdate 证书有效期开始日期/时间 -ext X.509 扩展 -validity 有效天数 -keypass 密钥口令 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令

密钥库口令和密钥口令设置为一样即可。 证书有效期设置10年,3650天

生成密钥库 keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "AbcD123!" -keypass "AbcD123!" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" 在jdk/bin目录下生成privateKeys.keystore文件。

升级密钥库加密算法 keytool -importkeystore -srckeystore privateKeys.keystore -destkeystore privateKeys.keystore -deststoretype pkcs12

从密钥对中导出证书 keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "AbcD123!" -file "certfile.cer" 导出证书文件certfile.cer到当前目录(bin)

从证书中导出公钥,并导入到当前主机的密钥库中 keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "AbcD123!" bin目录下生成publicCerts.keystore文件

客户端功能

获取服务器信息(IP、MAC、CPU、主板) http://localhost:8001/license/getServerInfos

server端功能

对license加密,生成加密后的license文件 http://localhost:8000/license/generateLicense

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考:
  • 原理:
  • 生成公私密钥
  • 客户端功能
  • server端功能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档