基於 TrueLicense 的專案證書驗證
基於 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
相關文章
- 基於 CNN 的驗證碼破解實戰專案CNN
- Spring Boot專案中使用 TrueLicense 生成和驗證License(伺服器許可)Spring Boot伺服器
- django專案基於鉤子驗證的註冊功能Django
- 基於CFSSL工具建立CA證書,服務端證書,客戶端證書服務端客戶端
- SSL證書是如何驗證的?驗證方式推薦
- Spring Security 6.3基於JWT身份驗證與授權開源專案SpringJWT
- 手動驗證 TLS 證書TLS
- Kubernetes客戶端認證——基於CA證書的雙向認證方式客戶端
- SSL證書域名驗證重大變更:2021年12月1日起,萬用字元證書不支援檔案驗證字元
- 關於SSL證書之證書鏈
- SSL證書生成,完成HTTPS驗證HTTP
- 證書-雙證書請求檔案
- 【加解密】使用CFSSL生成證書並使用gRPC驗證證書解密RPC
- 基於gRPC、API閘道器和身份驗證的Go微服務原始碼專案RPCAPIGo微服務原始碼
- node實現基於token的身份驗證
- curl 設定https 不驗證證書HTTP
- SSL證書屬於數字證書嗎?數字證書有哪些
- 基於Let's Encrypt生成免費證書-支援多域名泛域名證書
- 基於gin的golang web開發:模型驗證GolangWeb模型
- HTTPS加密過程和TLS證書驗證HTTP加密TLS
- DV證書和OV證書驗證過程有什麼不一樣
- 關於 SSL 證書
- Laravel 專案實現郵箱驗證功能Laravel
- 實現基於JWT的Token登入驗證功能JWT
- SpringBoot SpringSecurity 介紹(基於記憶體的驗證)Spring BootGse記憶體
- Linux基礎命令---驗證組檔案grpckLinuxRPC
- 如何基於Java解析國密數字證書Java
- jq驗證檔案
- 記錄 openssl 證書驗證失敗的詭異問題
- 程式碼簽名證書是如何進行驗證工作的
- 關於laravel上傳的檔案驗證或者的表示?Laravel
- 【驗證碼逆向專欄】某多多驗證碼逆向分析
- nginx 代理伺服器配置雙向證書驗證Nginx伺服器
- 如何驗證獲取S/MIME郵件安全證書
- 自簽名的SSL證書與專業的SSL證書有哪些區別?
- 基於YOLO實現滑塊驗證碼破解YOLO
- JN專案-時間查詢條件驗證
- 在非Laravel專案中使用Validator驗證器Laravel