同步操作将从 任鑫/DLicense 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
基于开源 truelicense
框架二次开发,依据业务场景设计抽象,提供整合SpringBoot的模块
基于springboot构建的应用证书授权验证服务
依赖jdk的keytool命令
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "renxin123" -keypass "renxin123" -dname "CN=cnrxmind, OU=rxmind, O=hy, L=HZ, ST=ZJ, C=CN"
命令参数说明:
参数 | 说明 | 备注 |
---|---|---|
keysize | 生成密钥长度 | 请务必设为1024 |
validity | 密钥有效期(单位:天) | 生成证书时证书有效期不应大于密钥有效期 |
alias | 私钥别名 | |
keystore | 生成私钥库的文件名 | |
storepass | 私钥库口令 | 必须为小写字母和数字组合,否则程序校验不通过 |
keypass | 密钥口令 | 保持与私钥库口令一致,否则解密证书会出现问题 |
dname | 密钥的Distinguished name | 程序生成证书会用到 |
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "renxin123" -file "certfile.cer"
命令参数说明:
参数 | 说明 | 备注 |
---|---|---|
alias | 私钥别名 | |
keystore | 上一步生成的私钥库的文件名 | |
storepass | 私钥库口令 | 上一步设置的私钥库文件名 |
file | 导出后的的公钥证书文件名 |
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "renxin123"
命令参数说明:
参数 | 说明 | 备注 |
---|---|---|
alias | 公钥别名 | |
file | 要导入的公钥文件 | |
keystore | 要导入的公钥库的文件名 | |
storepass | 公钥库口令,保持与第一步设置的私钥库口令一致,否则证书安装将不通过 |
DLicense 父工程,抽取公共依赖
license-core 核心抽象接口与完整的证书生成/校验功能
license-server 授权证书颁发、证书解码、公钥下载、内网检测
license-starter 整合springboot
keystore 示例工程默认使用的密钥库文件
按前述步骤生成两个密钥库文件privateKeys.keystore和publicCerts.keystore,详细记录相关参数。
classpath:/license/privateKeys.keystore
classpath:/license/publicCerts.keystore
该工程是一个示例工程,用以指导为应用程序引入证书校验功能。
该模块功能主要是有:
证书服务端证书生成功能
DLicenseCreator
接口提供了证书生成功能DServerLicenseManager
为 DLicenseCreator
实现证书客户端证书校验功能
DClientLicenseInstaller
接口提供了证书安装和校验器添加功能AbstractClientLicenseManager
客户端证书管理器,组合了一批校验器,实现证书安装、校验器执行、证书内容获取、校验结果通知功能ScheduleValidateClientLicenseManager
周期性执行校验逻辑的客户端证书管理器校验器抽象:
cn.rxmind.dlicense.core.validator
为校验器抽象接口
*·AbstractExitJVMLicenseValidator
抽象类,这种校验器当校验不通过时会退出虚拟机,core中有以下子类
IPAddressLicenseValidator
IP 地址校验器LicenseActiveTimeValidator
证书有效期校验器SubSiteCodeLicenseValidator
子站编码校验器MacAddressLicenseValidator
MAC 地址校验器*Rule 校验规则抽象,具体的校验规则,都是JDK Predicate
的实现
ActiveTimeRule
激活时间规则IncludeAndExcludeRule
包含/排除 规则Q1
为什么将私钥库密码、公钥库密码、私钥密码设为一致且必须为小写字母和数字组合?
A1
公私密钥库密码不统一将导致证书文件解密失败,这个坑很大,因为异常信息是在jdk解密工具包抛出,很难联想到需要公私钥库不统一。
Q2
如何扩展校验逻辑?
A2
可以通过扩展cn.rxmind.dlicense.core.validator
的实现来扩展新的校验逻辑
Q3
为什么限制扩展参数长度?
A3
所有校验参数最终都被truelicense框架序列化为xml字符串,经过私钥加密生成证书文件,使用证书时需要以字节数组形式读入证书文件,truelicense框架限制最大读入1024*1024大小的证书文件,
非对称加解密本身消耗系统资源比较大,因此不建议使用太庞大的扩展参数最终导致证书文件过大。
Q4
如何修改证书读取方式?
A4
core 中抽象出了证书读取器接口 LicenseBytesReader
, 在 license-starter 中组合进证书管理器中,用户可通过实现该接口并注册到spring容器中实现替换
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。