基於 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
- django專案基於鉤子驗證的註冊功能Django
- Spring Boot專案中使用 TrueLicense 生成和驗證License(伺服器許可)Spring Boot伺服器
- 基於CFSSL工具建立CA證書,服務端證書,客戶端證書服務端客戶端
- SSL證書是如何驗證的?驗證方式推薦
- Asp.net中基於Forms驗證的角色驗證授權ASP.NETORM
- 5.3. 驗證 Seam安全中的驗證特性是基於JAAS
- 手動驗證 TLS 證書TLS
- 驗證證書的正規表示式
- 自定義基於XML的驗證器XML
- Apache基於MySQL的身份驗證(轉)ApacheMySql
- JN專案-html驗證碼HTML
- 關於SSL證書之證書鏈
- iOS 對 HTTPS 證書鏈的驗證iOSHTTP
- 關於httpclient 請求https (如何繞過證書驗證)HTTPclient
- 【加解密】使用CFSSL生成證書並使用gRPC驗證證書解密RPC
- SSL證書域名驗證重大變更:2021年12月1日起,萬用字元證書不支援檔案驗證字元
- Kubernetes客戶端認證——基於CA證書的雙向認證方式客戶端
- Oracle基礎結構之OS驗證和口令檔案驗證Oracle
- SSL證書生成,完成HTTPS驗證HTTP
- iOS 中對 HTTPS 證書鏈的驗證iOSHTTP
- node實現基於token的身份驗證
- SSL證書屬於數字證書嗎?數字證書有哪些
- 基於Let's Encrypt生成免費證書-支援多域名泛域名證書
- 基於gRPC、API閘道器和身份驗證的Go微服務原始碼專案RPCAPIGo微服務原始碼
- DV證書和OV證書驗證過程有什麼不一樣
- 基於gin的golang web開發:模型驗證GolangWeb模型
- 基於Aviator的註解驅動驗證框架框架
- 關於 SSL 證書
- MVC驗證01-基礎、遠端驗證MVC
- JN專案-html驗證碼優化HTML優化
- HTTPS加密過程和TLS證書驗證HTTP加密TLS
- WCFNetTcpBindingTransport安全模式(8)ClientCredentialType證書驗證模式—-PeerOrChainTrust驗證模式TCP模式clientAIRust
- WCFNetTcpBindingTransport安全模式(7)ClientCredentialType證書驗證模式—-ChainTrust驗證模式TCP模式clientAIRust
- 實現基於JWT的Token登入驗證功能JWT
- 使用jdonframework+jboss配置基於jaas的url驗證Framework
- Laravel 專案實現郵箱驗證功能Laravel
- 記錄 openssl 證書驗證失敗的詭異問題