基於 TrueLicense 的專案證書驗證

平凡人筆記發表於2020-11-25

基於 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

header
Content-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

相關文章