我们知道在软件领域存在很多安全性问题,因此我们可以看到很多软件产品都会存在license认证功能,以防止软件被随意拷贝、破解等行为。版权问题一直是大家关注的问题!特别是基于java这一开源高级语言平台的软件产品,各方面的安全控制是有必要的。特别是企业级框架这些安全控制还是尤为重要的!
1、目的是为了防止用户随意拷贝软件,或者软件破解等
2、license有效期限制(根据具体情况设定有效期,有效期的设置大多数是为了销售产品限定使用时间、使用用户等)
3、license的创建与验证可由JAVA Security API、或者基于该API的license框架提供的数字签名机制来实现
如果我们自己来设计我们自己的框架的话,大致分为如下几个步骤:
一、定义license框架的license认证文件的格式属性(这些设定的格式属性可唯一标识在特定环境、场景下的license文件)
这些属性信息提供给license框架制作license文件的“素材”并提供给license框架验证依据等
二、提供创建license文件和验证license文件的API
三、增强license文件在软件产品中认证机制,实现产品细粒度安全性控制
我们都知道基于Java语言的软件产品的源代码很容易被一些市面上主流的反编工具反编译出来,随之也出现很多java源代码混淆加密等工具产生。由于这类工具的出现,使得license的认证机制以及流程很容易被看透。那么我们可以重写web服务器(Tomcat)的类加载器,使得我们的源码可被加密,但同时也不影响我们的源码(加密过)编译生成的class可以被我们重写的类加载器加载运行。但我们重写的加载器也很有可以破解,毕竟也是java语言编写的!我们只能根据我们自己的需要不断的增加软件破解难度,提高软件安全性。现在很多公司都提供这些java软件加密服务,大家可以去了解一下!这类服务如需要使用的话,是要收费的哦!
下面我着重讲解一下步骤二涉及的内容。
1、 生成公钥、私钥对(本人大致推荐两种:一种是通过特定的API生成,即通过代码生成;二是通过jdk提供的工具[keytool]生成)
如下介绍使用keytool的制作方法:
可使用KeyTool工具来生成私钥
keytool -genkey -alias privatekey -keystore xxx.store -validity 时限
然后把私匙库内的公匙导出到一个文件当中:
keytool -export -alias 别名 -file xxx.cer -keystore xxx.store
然后再把生成证书文件导入到公钥
keytool -import -alias 别名 -file xxx.cer -keystore xxx.store
生成公钥、私钥对提供给license框架创建定制的、特定格式的、加密的license文件
2、 授权者拥有私钥可用私钥对包含授权信息的license进行数字签名,也就是创建license文件过程
3、 公钥以生成license文件及可提供给授权的使用者,提供给使用者用于验证license是否符合使用条件,如果符合则允许用户使用软件提供的功能。
以上思路希望能大家帮助。
如下是jplogic的license认证功能截图: