默認情況下,在jboss eap 6.2+ 管理控制臺創建datasource后,會在standalone.xml(獨立模式)或host.xml(域模式)中以明文保存相關敏感信息。
這會給服務器留下安全隱患,不過官方已經考慮到了這一點,給出了vault機制來進行加密,步驟如下:
1. 利用keytool生成keystore文件,參考命令如下:
keytool -genseckey -alias ctas -storetype jceks -keyalg AES -keysize 128 -storepass mypassword -keystore /Users/jimmy/vault/vault.keystore
解釋一下:keytool是jdk自帶的小工具
紅色的部分是大家要根據自身情況修改的,藍色的可改可不改。
-alias 后的ctas為別名,可以隨便改
-storepass 后的mypassword為訪問keystore文件的密碼
-keystore 后的/Users/jimmy/vault/vault.keystore為keystore文件的保存路徑,注:該文件jboss必須具有讀寫權限。
整個keystore相當于一個敏感信息的文件數據庫,可以把一些敏感信息,比如db連接密碼,ftp密碼,郵件密碼保存在這里。
藍色部分AES為加密算法,可以改成RSA之類,128為加密強度,具體可參考jboss文檔。
2. JBOSS_HOME/bin/vault.sh ,進入vault交互模式,會出現類似如下輸出:
==========================================
JBoss Vault
JBOSS_HOME: /Users/jimmy/Downloads/app/jboss-eap-6.2
JAVA: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java
==========================================
**********************************
**** JBoss Vault ***************
**********************************
Please enter a Digit:: 0: Start Interactive Session 1: Remove Interactive Session 2: Exit
輸入0,進入交互模式。
Starting an interactive session
Enter directory to store encrypted files:/Users/jimmy/vault/ 這里輸入keystore文件所在目錄
Enter Keystore URL:/Users/jimmy/vault/vault.keystore 這里輸入keystore文件完整路徑
Enter Keystore password: 這里輸入keystore的密碼,與剛才步驟1中的密碼要相同
Enter Keystore password again: 再次輸入密碼進行驗證
Values match
Enter 8 character salt:20150720 撒點鹽,大家根據需要修改(必須是8位字符)
Enter iteration count as a number (Eg: 44):43 加密的迭代次數(可以隨便改)
Enter Keystore Alias:cnblogs 別名,可以隨便改
這些弄完后,會輸出下面這一段:
Initializing Vault
Jul 20, 2015 11:37:09 PM org.picketbox.plugins.vault.PicketBoxSecurityVault init
INFO: PBOX000361: Default Security Vault Implementation Initialized and Ready
Vault Configuration in AS7 config file:
********************************************
...
</extensions>
<vault>
<vault-option name="KEYSTORE_URL" value="/Users/jimmy/vault/vault.keystore"/>
<vault-option name="KEYSTORE_PASSWORD" value="MASK-2W0YkkQmW8vbjUxlq79j/1"/>
<vault-option name="KEYSTORE_ALIAS" value="cnblogs"/>
<vault-option name="SALT" value="20150720"/>
<vault-option name="ITERATION_COUNT" value="43"/>
<vault-option name="ENC_FILE_DIR" value="/Users/jimmy/vault/"/>
</vault><management> ...
********************************************
Vault is initialized and ready for use
Handshake with Vault complete
Please enter a Digit:: 0: Store a secured attribute 1: Check whether a secured attribute exists 2: Exit
注意:紅色部分,意思是讓你把這一段,加到standalone.xml或host.xml的相應位置。(注:建議把這一段復制出來,等會兒再加到配置文件中)
3. 保持剛才的交互模式,不要退出,繼續:
輸入0,準備存儲敏感信息
Task: Store a secured attribute
Please enter secured attribute value (such as password): 這里輸入要存儲的敏感信息,比如mysql的連接密碼
Please enter secured attribute value (such as password) again: 再輸入一次
Values match
Enter Vault Block:ctasDS_PWD 容器別名,隨便起
Enter Attribute Name:password
Secured attribute value has been stored in vault.
Please make note of the following:
********************************************
Vault Block:ctasDS_PWD
Attribute Name:password
Configuration should be done as follows:
VAULT::ctasDS_PWD::password::1
********************************************
注意紅色部分,辛苦了半天,就是要這一行,最后按2退出,同時停止jboss(如果jboss在運行的話)
4.修改jboss配置文件,以standalone.xml為例
</extensions>
<vault>
<vault-option name="KEYSTORE_URL" value="/Users/jimmy/vault/vault.keystore"/>
<vault-option name="KEYSTORE_PASSWORD" value="MASK-2W0YkkQmW8vbjUxlq79j/1"/>
<vault-option name="KEYSTORE_ALIAS" value="cnblogs"/>
<vault-option name="SALT" value="20150720"/>
<vault-option name="ITERATION_COUNT" value="43"/>
<vault-option name="ENC_FILE_DIR" value="/Users/jimmy/vault/"/>
</vault>
<management>
在</extensions>與<management>先插入第2步中剛才高亮大段標紅的內容。如果是域(domain)模式,這一段要插入到host.xml文件的<management>之前,另外域模式下,每臺slave機器的host.xml里都要做同樣的處理,keystore文件也要復制到每臺slave機器上。
然后找到testDS的位置(域模式下datasource是在master機器的domain.xml里),把密碼換成:
<datasource jta="false" jndi-name="java:/testDS" pool-name="testDS" enabled="true" use-ccm="false">
...
<security>
<user-name>root</user-name>
<password>${VAULT::ctasDS_PWD::password::1}</password>
</security>
...
</datasource>
重啟jboss,搞定。
文章列表