關於sentinel LDK加密war包實現應用加密的使用方法

Franson發表於2017-02-17

經過一週多時間的研究,終於對sentinel產品的使用有個基本的掌握。其中走了不少的彎路,特此記錄一下,以備後面回顧。

開發前的用料準備:

windows 10 x64位, tomcat7 x64bit(這裡筆者前面在64bit的windows10中使用32bit的tomcat,加密之後執行不成功,可能與sentinel成品本身缺陷有關)

jdk1.7.80 64bit

sentinel加密的大致流程如下:

1.在windows中安裝sentinel產品。安裝好之後開啟套件出現如下圖所示的主介面:

2.在上圖的其他工具中使用sentinel主鎖嚮導匯入主鎖。匯入主鎖過程中需要下載很多api檔案,如果網路不好,可以向銷售商索要離線檔案匯入;

匯入主鎖成功後會生成一個開發商程式碼(開發號),注意這個開發號是與主鎖一一對應的。

 

3.點選上圖中的EMS,進入EMS系統,在此係統中規劃定義系統功能(product id,feature id),其實在EMS中主要是為客戶鎖燒製一個功能id(feature id),

注意這個feature id 很重要,後面在envelop工具中為應用加密時需要用到。

4.在envelop工具中為應用加密。

 

 

sentinel加密產品有如下幾種加密方案(針對於java開發的jar,war或class檔案,對於exe檔案加密則不用這麼麻煩);

方案1.加密jar或war包中某個class檔案的某些method實現功能模組的授權使用。其實不推薦這種方案(對於jdk和java某些函式使用上有限制),對於功能模組授權,軟體開發者會在系統中開發功能授權模組,完全沒必要使用第三方的。

方案2.加密java.exe和需要被保護的war,jar或dll或class檔案。這種方案其實也有弊端。java.exe作為jre中核心檔案,此檔案被加密,將會影響其他非加密web應用的正常執行,即拔掉客戶鎖之後,凡事依賴此jre的java應用執行都會報錯。

方案3.加密tomcat.exe和需要被保護的war,jar或dll或class檔案。這是我後期將會採用的方案,雖然也有弊端(被加密的tomcat正常執行必須客戶鎖插上計算機),但是可以在一臺計算機上部署多個tomcat解決這個弊端。本章著重講解這個方案。

方案4.呼叫sentinel的api進行二次開發(使用api可對客戶鎖進行一系列的操作,如讀取feature id,讀寫客戶鎖中的記憶體資訊)。本章先不介紹這個方案。

 

 

5.在對tomcat和demo-nosec.war(暫以此war包為例講解)加密後生成如下檔案:

其中,被加密的war包使用解壓工具解壓會提示壓縮包已損壞,因為此時已經被加密了,所以不能解壓,tomcat7.exe檔案大小會比原tomcat7.exe大些,因為sentinel像此exe中附加了些解密演算法檔案包;

6.將壓縮版的tomcat安裝為windows服務(如果你下載的是windows安裝包,則忽略此步)。注意啟動tomcat有兩種獨立的方式,一是雙擊執行startup.bat指令碼,將會以dos模式執行tomcat;二是以管理員身份開啟cmd視窗,cd到

tomcat的bin目錄,執行命令: service.bat install MyTomcat7  安裝tomcat為windows服務(service.bat remove MyTomcat7 解除安裝tomcat服務),安裝成功後,啟動服務如果失敗,如下圖,多半是沒有為tomcat設定jvm等引數。

以管理員身份執行tomcat7w.exe,在彈出的窗體中找到java也籤,填寫如下圖所示的引數。

(java classpath完整值為:G:\software\apache-tomcat-7.0.75-x64\bin\bootstrap.jar;G:\software\apache-tomcat-7.0.75-x64\bin\tomcat-juli.jar)

 

 

 

按照如上圖所示填寫引數點選應用後,再次在windows服務中啟動tomcat7服務,如果還是失敗,則在tomcat的bin目錄中直接雙擊tomcat7.exe檔案,即可彈出tomcat的啟動介面。

7.將第五步加密後生成的tomcat7.exe,hasp_rt.exe和haspvlib_103268.dll檔案拷貝至tomcat的bin目錄下,將第五步加密生成的demo-nosec.war包放在tomcat的webapps目錄下,雙擊bin目錄中的tomcat7.exe檢視啟動情況。

插上客戶鎖和程式中有tomcat7.exe的情況下是能夠正確解密war包並部署應用的。

 

部署成功後在瀏覽器中訪問:

這裡需要說明的是,一定要保證任務程式中存在被加密的tomcat7.exe程式。

簡單說一下sentinel加密使用原理:一個主鎖擁有一個開發號,在EMS系統中使用此開發號為客戶鎖燒製一個功能id,在加密工具中為tomcat.exe附加上解密演算法A和被加密的war包檔名稱列表B,

tomcat的啟動依賴於客戶鎖是否插上。在tomcat啟動後,在webapps中查詢應用名稱是否存在於B中,如果有C存在於列表B中,則不管該C加密與否,都會強制使用A對C包進行解密,如果C沒有加密,則會給出開啟壓縮包錯誤的提示從而造成未加密的war應用部署失敗。如果C加密,則tomcat.exe正好使用A正確解密C從而成功部署應用。

 

相關文章