truelicense简要说明

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

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


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

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

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

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

以下是install方法的源码。


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

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

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

(1)命令行下:

keytool -genkey -alias privatekey -keystore privateKeys.store   

此时生成私钥库。

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

此时会提示你输入keyStore的密码,注意此时有个小陷阱,请务必把密码设置为数字和小写字母的混合体,原因会在后面说明。

(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时所需要的一些对象。

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

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

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


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


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
开发框架架构是指在软件开发过程中,为了提高开发效率和代码质量,所采用的一种组织和管理代码的结构和规范。根据引用和引用的内容,可以得出以下简要说明: 1. 单体架构:最早期的开发框架架构,将整个应用程序打包成一个单一的部署单元。这种架构简单易用,但随着应用规模的增长,单体架构面临着可维护性和扩展性的挑战。 2. 面向服务架构 (SOA):将应用程序拆分成一系列服务,每个服务都可以独立开发、部署和扩展。SOA架构可以提高系统的灵活性和可扩展性,但也需要额外的开发和管理成本。 3. 微服务架构:将应用程序拆分成一组更小、更独立的微服务,每个微服务都专注于一个特定的业务功能。微服务架构可以实现敏捷开发和部署,同时提高系统的可伸缩性和容错性。 4. 服务网格架构:将微服务组织成一个服务网格,通过网络来交互和通信。服务网格架构提供了服务发现、负载均衡和容错等功能,用于简化微服务之间的通信和管理。 5. 中台架构:将一些常用的功能模块抽象出来,形成一个中台,供不同的业务系统共享和使用。中台架构可以提高系统的复用性和协同性,减少重复开发和维护工作。 6. 云原生架构:将应用程序设计和构建成适合在云环境中运行的架构。云原生架构强调容器化、自动化和可扩展性,以提高应用的弹性和可管理性。 7. Serverless 架构:将应用程序的开发和运行从基础设施中抽象出来,使开发人员可以专注于业务逻辑的实现。Serverless 架构可以减少基础设施管理的复杂性,提高开发效率。 综上所述,开发框架架构的演进是为了解决不同规模和需求下的开发挑战,不同的架构有不同的优势和适用场景,开发团队需要根据具体情况选择最合适的架构来进行开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [程序员整体架构之开发架构](https://blog.csdn.net/chentian114/article/details/122647254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值