文档章节

truelicense简要说明

Airship
 Airship
发布于 2017/09/07 04:55
字数 971
阅读 19
收藏 0
点赞 0
评论 0

truelicense简要说明

2012-08-01 21:38 by 尔, 558 阅读, 0 评论, 收藏编辑

使用trueLicense来做软件产品的保护,我们主要使用它的LicenseManager类来生成证书文件、安装证书文件、验证证书文件.

 

假设我们已为我们软件的使用者提供了证书,下面的流程图为简略的trueLicense验证证书文件的流程。

 

 

LicenseEngine是我们自己写的一个引擎类,它封装了一些业务逻辑,以方便外部进行调用,我们验证license文件时,首先要安装license文件,安装license文件就是把文件形式的license文件(数字签名过的普通文本文件)转换成GenericCertificate对象,这个以及其他的持久化操作是由de.schlichtherle.xml.PersistenceService类提供的。

GenericCertificate是一个起纽带作用的类,也是truelicense最底层最核心的类。它对最底层的javax.crypto包下类的方法进行了逻辑封装,truelicense上层在生成license文件时对其数字签名以及在验证证书内容时解密证书内容就是借助它来完成的。

 

安装license文件和调用verify()方法时都会进行certification的验证和license内容的校验。

从LicenseManager的install()方法的源码中可以看出我们最好让LicenseManager为单例,只要虚拟机一直运行,在安装license时,install方法会通过setCertificate(certificate)来设置系统当前的certificate,注意LicenseManager是线程安全的类,使用得当的情况下单例也不会出现线程问题。

以下是install方法的源码。

validate(LicenseContent content)方法会验证证书的基本内容,最主要的是验证内容是对比当前日期和证书上的有效期。trueLicense的验证机制是当验证失败后,直接抛出异常。

下面简要说明如何生成license文件

首先license文件是被数字签名的普通文本信息,我们需要一个私钥库来生成私钥来用于加密,我们相应也需要一个从私钥库中导出的公钥来解密,我们可以使用JAVA的Toolkit来生成私钥库。

(1)命令行下:

keytool -genkey -alias privatekey -keystore privateKeys.store   

 

此时生成私钥库。

别名很重要 请务必记下来。

此时会提示你输入keyStore的密码,注意此时有个小陷阱,请务必把密码设置为数字和小写字母的混合体,原因是因为TrueLicense安全机制需要至少6个字符且同时包含数字和字母,否则汇报错。

 

 

(2)然后把私匙库内的公匙导出到一个文件当中:
keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store

 

 

(3)然后再把这个证书文件导入到公匙库:

keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store


这个公钥库要随软件一起发布给用户。

 

 

 

 

 

 

生成license文件依然需要用到LicenseManager类

从它实现的接口上看知道其既有创建License的职责又有验证License文件的职责。

调用LicenseManager的实例方法store(LicenseContent, File)即可生成license文件。

 下面是LiicenseManager类构造器的源码。

 public LicenseManager(LicenseParam param) {

        setLicenseParam0(param);

 }

生成一个LicenseManager类的实例,需要一个LicenseParam类型的形参。

下面是LicenseParam的继承体系

 

它持有生成license和验证license时所需要的一些对象。

注意这里的subject和LicensContent的subject必须一致,否则不能通过验证而抛出异常。

 

KeyStoreParam是根据公、私匙库的参数抽象出的类,在底层操作公私钥库时需要这些具体的参数(如通过alias来找到具体的钥库等

 

 

 

 

下面是简要的license文件生成的时序图。

 

 

 

简单说来就是对licenseContent的byte[]形式先进行签名,然后将byte[]以文件的形式输出。

本文转载自:http://www.cnblogs.com/91AS/archive/2012/08/01/3849678.html

共有 人打赏支持
Airship
粉丝 34
博文 789
码字总数 18996
作品 0
南京
高级程序员
truelicense实现JAVA的license机制(包括license生成和验证)

原文来自:http://blog.csdn.net/luckymelina/article/details/22870665 开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了。不同于在代码中直接加...

zhaojd
2017/12/13
0
0
JS几种变量交换方式以及性能分析对比

前言 “两个变量之间的值得交换”,这是一个经典的话题,现在也有了很多的成熟解决方案,本文主要是列举几种常用的方案,进行大量计算并分析对比。 起由 最近做某个项目时,其中有一个需求是...

撒网要见鱼
2016/11/24
0
0
JS几种数组遍历方式以及性能分析对比

前言 这一篇与上一篇 JS几种变量交换方式以及性能分析对比 属于同一个系列,本文继续分析JS中几种常用的数组遍历方式以及各自的性能对比 起由 在上一次分析了JS几种常用变量交换方式以及各自...

撒网要见鱼
2016/11/25
0
0
jQuery Lightbox(balupton版)图片展示插件demo

link:http://www.zhangxinxu.com/jq/balupton_zh/demo/ 官网:http://leandrovieira.com/projects/jquery/lightbox/ jQuery Lightbox(balupton版)图片展示插件demo 一、Lightbox Tour <sc......

李长春
2011/11/25
0
0
doxgen comments example

1. 模块定义(单独显示一页) / @defgroup 模块名 模块的说明文字 @{ / … 定义的内容 … /** @} */ // 模块结尾 2. 分组定义(在一页内分组显示) / @name 分组说明文字 @{ / … 定义的内容...

长平狐
2013/01/06
46
0
doxgen comments example

1. 模块定义(单独显示一页) / @defgroup 模块名 模块的说明文字 @{ / … 定义的内容 … /** @} */ // 模块结尾 2. 分组定义(在一页内分组显示) / @name 分组说明文字 @{ / … 定义的内容...

晨曦之光
2012/03/02
293
0
Java程序员面试的5点小技巧

程序员面试的时候掌握更多的技巧,就能在面试时更加得心应手,更顺利的拿到理想的offer,本文为大家介绍一下java面试的小技巧,希望能对大家的面试有帮助: 1. 笔试 一般是笔试,笔试这个环节...

李序锴
2017/11/09
0
0
Memcached集成Spring缓存环境构建

Memcached简要说明: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动...

蚂蚁也疯狂
2015/11/24
5.2K
0
元命令行工具--keep

keep,元命令行工具 -- 你的个人 shell 命令管理者。 特性: 保存包含简要说明的新命令。 使用强大的模式搜索已保存的命令。 将命令保存在远程服务器上。 使用 和 以在所有计算机之间同步命令...

匿名
2017/02/24
108
0
做一个Chrome大约多少钱?

我指的是基于DZ论坛的Chrome应用。 大概功能可以包括:短消息、提醒、论坛界面优化,快捷功能 前2个的简要补充: 用户可以在本地手动设置提示音, 第三点的说明: 背景的手动设置、风格等高级...

芳乃琴里樱
2013/10/28
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

gcviewer的使用

1、没有安装git软件 在编译打包GCViewer的过程中,不能执行git命令,错误信息如下: [ERROR] Failed to execute goal org.codehaus.mojo:buildnumber-maven-plugin:1.4:create (create-build...

刀锋
9分钟前
0
0
Android LogUtil 日志优化 调试的时候打印 点击跳转

打印日志的时候,可以点击跳转 LogUtil.java public class LogUtil { private static boolean IS_DEBUG = BuildConfig.DEBUG; public static void i(String tag, String message) {......

Jay_kyzg
18分钟前
0
0
人工智能你必须掌握的32个算法(二)归并排序算法

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子...

木头释然
21分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
44分钟前
1
0
流利阅读笔记27-20180716待学习

生了娃照样能打,两位母亲温网会师 Lala 2018-07-16 1.今日导读 现今在生儿育女后回归事业的母亲们已经非常多见,但是很少有人想到,以高强度运动与竞争激烈为特色的竞技体育项目也会有 work...

aibinxiao
45分钟前
6
0
Guava 源码分析(Cache 原理【二阶段】)

前言 在上文「Guava 源码分析(Cache 原理)」中分析了 Guava Cache 的相关原理。 文末提到了回收机制、移除时间通知等内容,许多朋友也挺感兴趣,这次就这两个内容再来分析分析。 在开始之前...

crossoverJie
57分钟前
0
0
OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
749
19
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部