密碼隱藏 密碼加密 密碼

EAP 6設定檔中密碼加密做法

夏宏彰 2016/08/02 17:05:44
2406







主題

EAP 6設定檔中密碼加密

文章簡介

介紹EAP 6Password Vault利用加密機制將碼隱藏起來並以masked string代原密碼內容,樣設定檔中就會有明碼的碼了。

作者

宏彰

版本/產出日期

V1.0/2016.8.2




1. 前言

2. 目的

3. 開始前準備

4. EAP 6 Password Vault 的機制

5. Password Vault 的做法

6. 參考來源





1. 前言

在應用程式的配置檔中,我們常會看到許多的密碼設定在上面,這等於是直接將密碼提供給可以看到配置檔的所有人而平白增加安全上的風險。

本文件用來提供Java開發人員如何在EAP 6上安全的設定密碼欄位,將密碼洩漏的風險降到最低。

本文件適用於JBoss EAP 6.x設定。



2. 目的

了解EAP 6 Password Vault的機制與設定方法。

加強密碼的管理與安全。



3. 開始前準備

本架構建立於以下版本的環境:

JDK 1.7以上

EAP 6.4



4. EAP 6 Password Vault的機制


EAP6有一個Password Vault功能,說如下圖所:


Java Keytool立一加密用的Secret Key存放在Java Keystore是我們用來加密密碼用的的密鑰


之後Vault script我們的密碼(組字串)Keytool生的密鑰加密放在Vault Storage; 我們有多組密碼,則分別用Vault script依序將每一組密碼存入Vault Storage(當然,除了密碼,任何你覺敏感的字串可以用此方法存入Vault Storage) 入後Vault script顯示一組對碼的字串,功同主一樣例如" VAULT::sslvb::pwd::1"可以對到原密碼。


Maskedstandalone.xml (domain.xml),取代原碼的位置即可之後EAP 6要取到這字串,就會到Vault Storage對應密碼取出使而我們的設定檔就會有Masked字串,不會有明碼



5. Password Vault的做


5.1、 建立vault目錄: [EAP_HOME]/vault


例如C:\EAP-6.4.0>mdkir vault


5.2、 產生密鑰


用Java Keytool建立此密鑰,例如

>keytool -genseckey -alias vault -storetype jceks -keyalg AES -keysize 128 -storepass vault123 -keypass vault123 -validity 4000 -keystore C:\EAP-6.4.0\vault\vault.keystore

Keystore: "vault.keystore" //Java Keystore

Storetype: "jceks" //議使用的JCE Key Store; JKS

Keyalg: "AES" //議使用的加密演算法

Alias: "vault" //一個好記的名Secret Key

Validity: 4000 //Secret Key的有效天數,時間長一點較好到時SecretKey效,所有的密

    

列出Java Keystore中的密鑰

>keytool -list -keystore vault.keystore -storepass vault123 -storetype JCEKS -v


範例使用的JDK版本



5.3、 Password Vault初始化


初始化建立Vault Storage,可以將參數直接加在vault script後面執行:

>vault --keystore C:\EAP-6.4.0\vault\vault.keystore --keystore-password vault123 --alias vault --enc-dir C:\EAP-6.4.0\vault\ --iteration 120 --salt 1234abcd

或是依指示依序輸入參數: (如此則沒有password顯示問題)

directory to store encrypted files: Vault Storage案的位置

Keystore URL: 一步Keystore案的位置

Keystore password: 一步Keystore定的密碼

8 character salt: 密用個字元長的salt

iteration count:

Keystore Alias: 一步鑰的


完成後按下3 (Exit)。此時我們會看到一組Vault Configuration,可以直接將此配置剪貼到standalone.xml (或domain.xml)中如上顯示的位置中; 或是往下看步驟4,用CLI建立<vault>節點。


        

5.4、 在JBoss EAP 6中配置Password Vault


CLI執行方式如下:

(: windows格式)


完成後可以在standalone.xml (domain.xml)看到如下配置:



5.5、 將Password存進 Vault - 取得Masked字串


再次使用vault script,將我們的password加密後存入Vault Storage中。使用方式如下

EAP_HOME/bin/vault.bat --keystore KEYSTORE_URL --keystore-password KEYSTORE_PASSWORD --alias KEYSTORE_ALIAS --vault-block VAULT_BLOCK --attribute ATTRIBUTE --sec-attr SEC-ATTR --enc-dir ENC_FILE_DIR --iteration ITERATION_COUNT --salt SALT

例如:

>vault --keystore c:\EAP-6.4.0\vault\vault.keystore --keystore-password vault123 --alias vault --vault-block sslvb --attribute pwd --sec-attr xxxxxxxx --enc-dir c:\EAP-6.4.0\vault\ --iteration 120 --salt 1234abcd

同樣,我們亦可照指示依序輸入參數:

//注意: 前面初始化的設定內容需要重複輸入,最後選擇0 (Store a secured attribute)進行以下動作。


secured attribute value: 們的要加的密碼

Vault Block: 稱空間,方便分類使用

Attribute Name: 此密碼的名稱


! 得的Masked" VAULT::sslvb::pwd::1"錄下來。


們可直接選1 (Check whether a secured attribute exists)或是後用--check-sec-attr檢查該密碼是已存入Vault Storage


>vault --keystore c:\EAP-6.4.0\vault\vault.keystore --keystore-password vault123 --alias vault --check-sec-attr --vault-block sslvb --attribute pwd --enc-dir c:\EAP-6.4.0\vault\ --iteration 120 --salt 1234abcd

在時:

存在時:



5.6、 在standalone.xml (或是domain.xml)中貼上VAULT字串


字串的格式如下,用${…}表示是standalone.xml中的變數值:

${VAULT::VAULT_BLOCK::ATTRIBUTE_NAME::MASKED_STRING}

將上例的VAULT字串貼到standalone.xml (或domain.xml)中,如下所示:


再啟動JBoss即可生效,我們在Server log中會看到Password Vault生效的內容:


若VAULT字串不存在時,則Vault Storage返回NULL,出現以下錯誤:


若存入Vault Storage的Password不對時 (可能用錯名稱,或輸入時就打錯了!),則出現以下錯誤:



6. 參考來源

SECURE PASSWORDS

https://access.redhat.com/documentation/en/red-hat-jboss-enterprise-application-platform/version-6.4/how-to-configure-server-security/#secure_passwords

Java Keytool

http://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html#keytool_option_genseckey

夏宏彰