基于 TrueLicense 的项目证书验证

使用场景

1、 开发的软件产品在交付使用的时候,往往有一段时间的试用期,这期间我们不希望自己的代码被客户二次拷贝,这个时候 license 就派上用场了,license 的功能包括设定有效期、绑定 ip、绑定 mac 等。

2、 授权方直接生成一个 license 给使用方使用,如果需要延长试用期,也只需要重新生成一份 license 即可,无需手动修改源代码。

原理简介

1、TrueLicense 是一个开源的证书管理引擎,详细介绍见 https://truelicense.java.net/

2、license 授权机制的原理

  • 生成密钥对,包含私钥和公钥。

  • 授权者保留私钥,使用私钥对授权信息诸如使用截止日期,mac 地址等内容生成 license 签名证书。

  • 公钥给使用者,放在代码中使用,用于验证 license 签名证书是否符合使用条件

生成证书

利用jdk keytool工具制作证书

keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "deepglint_store_pwd123" -keypass "deepglint_key_pwd123" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"

利用jdk keytool工具导出证书文件

keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "deepglint_store_pwd123" -file "certfile.cer"

利用jdk keytool工具将证书文件导入到证书库中

keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "deepglint_store_pwd123"

两个子项目说明


  • lic-auth-server:用于开发者给客户生成License证书的示例代码
  • lic-auth-client:模拟需要给客户部署的业务项目

获取服务器信息

http://127.0.0.1:10000/license/getServerInfos

给客户机生成license


http://127.0.0.1:10000/license/generateLicense

headerContent-Type application/json;charset=UTF-8

{ "subject": "license_sub",    #证书subject "privateAlias": "privateKey",  #秘钥别名        "keyPass": "deepglint_key_pwd123",    #秘钥口令 "storePass": "deepglint_store_pwd123",   #秘钥库口令 "licensePath": "/Users/mengfanxiao/Documents/work/license/cert/license.lic",   #存放license文件位置 "privateKeysStorePath": "/Users/mengfanxiao/Documents/work/license/cert/privateKeys.keystore",     #秘钥库文件文件 "issuedTime": "2020-11-25 00:00:01",  #license有效期起始时间   "expiryTime": "2020-11-25 22:00:00",   #license有效期截止时间  "licenseCheckModel": {  "ipAddress": ["192.168.5.121"],       #客户机ip  "macAddress": ["A4-83-E7-BE-3D-D9"],  #客户机mac地址     "cpuSerial": "",         #客户机cpu序列号  "mainBoardSerial": ""    #客户机主板序列号 }}

在客户机使用license


在项目启动的时候安装证书


访问接口进行测试

http://127.0.0.1:10001/auth/api/1.0/getUserInfo

header

Content-Type application/json;charset=UTF-8


如果证书过期


源码

https://gitee.com/pingfanrenbiji/lic-auth

基于 TrueLicense 的项目证书验证相关推荐

  1. keytool生成证书_基于 TrueLicense 的项目证书验证

    使用场景 1. 开发的软件产品在交付使用的时候,往往有一段时间的试用期,这期间我们不希望自己的代码被客户二次拷贝,这个时候 license 就派上用场了,license 的功能包括设定有效期.绑定 i ...

  2. java程序license验证_基于TrueLicense实现产品License验证功能

    受朋友所托,需要给产品加上License验证功能,进行试用期授权,在试用期过后,产品不再可用. 通过研究调查,可以利用Truelicense开源框架实现,下面分享一下如何利用Truelicense实现 ...

  3. TrueLicense实现产品License验证

    技术:apache-maven-3.3.9 +jdk1.8.0_102 运行环境:ideaIC-2020.1.3 + apache-maven-3.3.9+ jdk1.8.0_102 家精品内容,核心 ...

  4. Android https 自签名和CA证书验证(基于OkHttp)

    Android HTTPS自签名和CA证书验证(基于OkHttp) HTTPS介绍 CA证书 自签名证书 问题描述 域名校验 OkHttp设置 总结 HTTPS介绍 HTTPS是一种通过计算机网络进行 ...

  5. 【基于物联网的智能草莓种植系统的设计与实现系列教程】8.项目整体验证(课程设计、毕设项目、树莓派、yolov5、物联网)

    [基于物联网的智能草莓种植系统]BH1750 光照度传感器验证与参考代码 项目各章节跳转 树莓派环境说明 硬件连接 猜你需要 项目各章节跳转 可点击跳转到对应章节 ==> 努力更新中... 0. ...

  6. .NET Core微服务之基于IdentityServer建立授权与验证服务(续)

    上一篇<.NET Core微服务之基于IdentityServer建立授权与验证服务>我们基于IdentityServer4建立了一个AuthorizationServer,并且继承了Qu ...

  7. glassfish hk2_使用GlassFish 3.1.2.2和Primefaces 3.4的JDBC领域和基于表单的身份验证

    glassfish hk2 我的博客上最受欢迎的帖子之一是有关JDBC安全领域和带有Primefaces的GlassFish上基于表单的身份验证的简短教程. 在收到有关它不再适用于最新的GlassFi ...

  8. 使用GlassFish 3.1.2.2和Primefaces 3.4的JDBC领域和基于表单的身份验证

    我的博客上最受欢迎的帖子之一是有关JDBC安全领域和带有Primefaces的GlassFish上基于表单的身份验证的简短教程. 在收到有关它不再适用于最新的GlassFish 3.1.2.2的评论后 ...

  9. 密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书

    Req指令介绍 功能概述和指令格式 req指令一般来说应该是提供给证书申请用户的工具,用来生成证书请求以便交给CA验证和签发证书.但是,OpenSSL的req指令的功能远比这样的要求强大得多,它不仅可 ...

最新文章

  1. MacOS无法登录App Store修复
  2. 昵图网学校计算机教室制度,ClassIn在线教室
  3. Unity3D 游戏引擎之平面小球重力感应详解【转】
  4. python代码该怎么简化_Python开发简化代码的六大技巧
  5. Mybatis配置文件参数定义
  6. C语言 显示器键盘io
  7. 实战:配置内网DNS实现内部域名解析
  8. Spring和Mybatis整合-原生dao开发
  9. 如何在没有原工程的情况下,利用vivado将bit文件转化成bin文件
  10. AQS框架原文翻译 - The java.util.concurrent Synchronizer Framework
  11. 重装系统win7教程
  12. PS实用小技巧--修改图片上的文字
  13. 简单图像滤镜功能的Java实现
  14. mysql可重复读概念_Mysql可重复读原理
  15. 编写程序描述影视歌三栖艺人
  16. 基于qt与mupdf库的pdf阅读器开发
  17. 如何把语音转文字转换
  18. 用PGP实现加密和解密全过程
  19. 从小数据量 MySQL 迁移数据到 TiDB
  20. unity 虚线 无视透视 近大远小

热门文章

  1. 解决Nacos无法连接Mysql8.0+的问题(坑爹的阿里官方文档,已无力吐槽)
  2. winsock使用java编写_利用Socket进行Java网络编程(一)
  3. #react 之ant design Pro 学习研究#----启动项目
  4. Radware LP 增加线路接口操作
  5. DotText源码学习——从配置文件Web.config入手(一)
  6. SQL Server -- 如何书写优雅、漂亮的SQL脚本?
  7. 七人のオンラインゲーマーズ 全年龄正式汉化补丁
  8. python 38day--CSS简介
  9. 多商铺购物车查询 排除重复商家
  10. 程序清单4.1_talkback.c程序_《C Primer Plus》P60