Jasypt 為 Java 的套件,提供開發人員用簡單的方法將加解密功能加入專案裡,而開發人員也不需要對密碼學有深入的理解。
要使用 Jasypt CLI Tools 需先於網站中下載檔案:Download
使用 bin/listAlgorithms.sh
查看可使用的演算法清單。
使用 bin/encrypt.sh
來進行加密,執行此檔案可看到應填入的欄位有哪些。
input
與 password
兩個欄位。
input
為要加密的文字。
password
為加解密使用的 Key。
algorithm
為使用哪種演算法來加密。
這樣就完成了加密,而加密過後的密碼為 31wLpRHWtqh0XQOSLgLBLo2Rt2wDz4zj
,網站中就可以使用這組已加密的密碼。
可使用 bin/decrypt.sh
進行解密,執行此檔案可看到應填入的欄位有哪些,基本上與加密相同。
那現在將剛剛加密過後的密碼進行解密,input 為 31wLpRHWtqh0XQOSLgLBLo2Rt2wDz4zj,password 為 CAT,演算法為 PBEWithMD5AndDES。
輸出結果得到 password123,成功進行解密。
於 pom.xml
新增套件,
套件版本的選擇若為 Spring3.0 或 3.1 使用 jasypt-spring31
版本,
若為 Spring 4.0 使用 jasypt-spring4
版本,本文以使用 4.0 版本。
其他版本可於網站中尋找:網站
設定環境變數與套件相關配置。
這邊設定 Key 的方法有兩種,
第一種是直接寫在設定檔案裡,name 設定 password,value 給予 Key,
第二種是設定在 Server 的環境變數裡,name 設定 passwordEnvName,value 給予環境變數名稱。
最後將 properties 檔案裡面需要加密的部分使用 ENC(<已加密的密碼>)
包起來,就大功告成啦!
若將 Key 直接設定在 xml 裡,這樣假若系統程式被駭,Key 會直接也被取得的話根本功虧一簣,
這邊講解在配置中使用 passwordEnvName 來把 Key 設定在環境變數,伺服器應該怎麼做設定。
設定環境變數其實不難,假若是設定 passwordEnvName = WEB_PASSWORD,環境變數設定為 WEB_PASSWORD,
那只要在 /<tomcat>/bin/setenv.sh
檔案中新增一行:
可能會覺得這樣不是只是換個地方放嗎,若伺服器檔案都被竊取了,這個環境變數也是會被知道的? 對的
但是讀取環境變數僅會在伺服器啟動時讀取一次,所以可以啟動伺服器後將檔案移除,
下次要再重啟時再將檔案放置回去,重啟完再移除檔案,
雖然動作會較繁瑣,但可以確保密碼不被竊取。
執行 encrypt.sh 時若發生 java.lang.ExceptionInInitializerError,原因可能為 JDK 版本過新,可參考此回答。
此時可確認一下本機是否有舊版 JDK 使用,使用以下指令查看,若沒有可去下載 JKD 8 261 版本(或更舊)。
由上清單確認後,我有一個舊版本的 1.8.0_172-zulu-8.30.0.1
可使用,若想固定本機的 JAVA 版本可以設定在 ~/.
bash_profile
裡面,但若只是執行此程式時需要使用此版本,可以在指令前方新增指定 JAVA 版本的設定。