TrueLicense简介

简介: 原文 TrueLicense是一个开源的证书管理引擎,官网 使用场景:当项目交付给客户之后用签名来保证客户不能随意使用项目 默认校验了开始结束时间,可扩展增加mac地址校验等。 其中还有ftp的校验没有尝试,本文详细介绍的是本地校验 license授权机制的原理: 生成密钥对,方法有很多。

原文
TrueLicense是一个开源的证书管理引擎,官网
使用场景:当项目交付给客户之后用签名来保证客户不能随意使用项目
默认校验了开始结束时间,可扩展增加mac地址校验等。
其中还有ftp的校验没有尝试,本文详细介绍的是本地校验

license授权机制的原理:

  1. 生成密钥对,方法有很多。
  2. 授权者保留私钥,使用私钥对包含授权信息(如使用截止日期,MAC地址等)的license进行数字签名。
  3. 公钥给使用者(放在验证的代码中使用),用于验证license是否符合使用条件。

使用keytool生成密钥对

以下命令在dos命令行执行,注意当前执行目录,最后生成的密钥对即在该目录下:

  1. 首先要用KeyTool工具来生成私匙库:(-alias别名 –validity 3650表示10年有效)
    keytool -genkey -alias privatekey -keystore privateKeys.store -validity 3650
  2. 然后把私匙库内的公匙导出到一个文件当中:
    keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store
  3. 然后再把这个证书文件导入到公匙库:
    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;
    }


 

来自为知笔记(Wiz)


     

     

     

    本文转载自:http://blog.csdn.net/luckymelina/article/details/22870665

    目录
    相关文章
    |
    前端开发 Java 数据库连接
    Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
    Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换
    |
    SQL Prometheus 监控
    数据库连接池选型 Druid vs HikariCP
    springboot 现在官方默认的数据库连接池是 HikariCP,HikariCP的性能从测试的数据上来看也是最高的。
    数据库连接池选型 Druid vs HikariCP
    |
    缓存 NoSQL Java
    什么是缓存?如何在 Spring Boot 中使用缓存框架
    什么是缓存?如何在 Spring Boot 中使用缓存框架
    917 0
    |
    Java 数据安全/隐私保护 开发者
    SpringBoot整合TrueLicense生成和验证License证书
    TrueLicense生成和验证License证书
    4180 1
    |
    11月前
    |
    人工智能 前端开发 Java
    DDD四层架构和MVC三层架构的个人理解和学习笔记
    领域驱动设计(DDD)是一种以业务为核心的设计方法,与传统MVC架构不同,DDD将业务逻辑拆分为应用层和领域层,更关注业务领域而非数据库设计。其四层架构包括:Interface(接口层)、Application(应用层)、Domain(领域层)和Infrastructure(基础层)。各层职责分明,避免跨层调用,确保业务逻辑清晰。代码实现中,通过DTO、Entity、DO等对象的转换,结合ProtoBuf协议,完成请求与响应的处理流程。为提高复用性,实际项目中可增加Common层存放公共依赖。DDD强调从业务出发设计软件,适应复杂业务场景,是微服务架构的重要设计思想。
    |
    机器学习/深度学习 人工智能 算法
    AI入门必读:Java实现常见AI算法及实际应用,有两下子!
    本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
    1996 3
    AI入门必读:Java实现常见AI算法及实际应用,有两下子!
    |
    Java Spring
    SpringBoot 项目打成 jar 后,如何加载外部的配置文件?
    SpringBoot 项目打成 jar 后,如何加载外部的配置文件?
    2254 0
    |
    JavaScript 前端开发 Java
    SpringBoot 引入 smart-doc 接口文档管理插件,以及统一接口返回,最后推送到 Torna,进行统一管理
    本文介绍了如何在SpringBoot项目中整合smart-doc接口文档管理插件,实现接口文档的生成和统一管理,并展示了如何将文档推送到Torna接口文档管理系统进行进一步的集中管理。
    1594 0
    SpringBoot 引入 smart-doc 接口文档管理插件,以及统一接口返回,最后推送到 Torna,进行统一管理
    |
    存储 Java Spring
    SpringBoot异步任务获取HttpServletRequest
    这样的操作对于保持异步操作中的请求上下文十分有用,特别是当你需要在日志记录、权限检查或者其他需要请求信息的场景中。确保上下文的正确传递和管理对于构建可靠的,异步处理能力很强的Spring Boot应用至关重要。
    960 3
    |
    SQL 机器学习/深度学习 XML
    mybatis-plus分页查询详解
    mybatis-plus分页查询详解
    11281 0
    mybatis-plus分页查询详解