原文
TrueLicense是一个开源的证书管理引擎,官网
使用场景:当项目交付给客户之后用签名来保证客户不能随意使用项目
默认校验了开始结束时间,可扩展增加mac地址校验等。
其中还有ftp的校验没有尝试,本文详细介绍的是本地校验
license授权机制的原理:
- 生成密钥对,方法有很多。
- 授权者保留私钥,使用私钥对包含授权信息(如使用截止日期,MAC地址等)的license进行数字签名。
- 公钥给使用者(放在验证的代码中使用),用于验证license是否符合使用条件。
使用keytool生成密钥对
以下命令在dos命令行执行,注意当前执行目录,最后生成的密钥对即在该目录下:
- 首先要用KeyTool工具来生成私匙库:(-alias别名 –validity 3650表示10年有效)
keytool -genkey -alias privatekey -keystore privateKeys.store -validity 3650
- 然后把私匙库内的公匙导出到一个文件当中:
keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store
- 然后再把这个证书文件导入到公匙库:
keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store
最后生成文件privateKeys.store、publicCerts.store拷贝出来备用。
使用LicenseCreate来生成需要的数字签名
配置文件说明:
PRIVATEALIAS:对应生成的私匙库名称别名alias privatekey
KEYPWD:该密码生成密钥对的密码,生成密钥对时录入的密码
STOREPWD:该密码是在使用keytool生成密钥对时设置的密钥库的访问密码
SUBJECT:生成的签名主题
licPath:生成的签名文件存放路径
priPath:使用的私匙库文件路径
剩下的为签名文件中的内容配置
其中consumerType和ConsumerAmount不明确如何使用
扩展签名文件中的自定义字段
//在CreateLicense#createLicenseContent方法中
// Extra中可以存储扩展的字段,校验时读取该信息即可
content.setExtra(new Object());
使用LicenseVerify来验证签名
配置文件说明:
PUBLICALIAS:对应生成的公匙库别名alias publiccert
STOREPWD:该密码生成密钥对的密码,生成密钥对时录入的密码
SUBJECT:校验的签名主题
licPath:校验的签名文件存放路径
pubPath:使用的公匙库文件路径
扩展字段校验
修改cn.melina.license.VerifyLicense中verify方法
public boolean verify() {
/************** 证书使用者端执行 ******************/
boolean result = true;
LicenseManager licenseManager = LicenseManagerHolder
.getLicenseManager(initLicenseParams());
// 安装证书
try {
licenseManager.install(new File(licPath));
} catch (Exception e) {
e.printStackTrace();
return false;
}
// 验证证书
try {
//使用LicenseContent来接收默认校验的返回值,返回值为签名内容,进行二次校验
LicenseContent licenseContent = licenseManager.verify();
//扩展验证,非扩展验证可从licenseContent中获取
Map<String,String> content = (Map<String, String>) licenseContent.getExtra();
String targetMac = content.get("mac");
//此处用于存储最大用户数
String maxUserCount = content.get("maxUserCount");
result = validateMacAddress(targetMac);
} catch (Exception e) {
e.printStackTrace();
result = false;
}
return result;
}
本文转载自:http://blog.csdn.net/luckymelina/article/details/22870665