4.2. 密码 Vault
配置 JBoss EAP 和相关应用需要潜在的敏感信息,如用户名和密码。密码不以纯文本形式存储在配置文件中,可以使用密码 vault 功能来屏蔽密码信息并将其存储在加密的密钥存储中。密码存储之后,可将引用包含在管理 CLI 命令中或部署到 JBoss EAP 的应用中。
密码库使用 Java 密钥存储作为其存储机制。密码库由两个部分组成:存储和密钥存储。Java 密钥存储用于存储密钥,该密钥用于在 Vault 存储中加密或解密敏感字符串。
此步骤中使用了由 Java Runtime Environment(JRE)提供的 keytool 程序。找到 Red Hat Enterprise Linux 上文件的路径,它是 /usr/bin/keytool
。
JCEKS 密钥存储实施与 Java 供应商之间的不同,因此必须使用与所使用的 JDK 供应商中的 keytool 实用程序生成密钥存储。使用在 JDK 上运行的 JBoss EAP 7 实例中一个供应商的 JDK 生成的密钥存储会导致以下异常: java.io.IOException: com.sun.crypto.provider.provider.provider.provider.SealedObjectForKeyProtectorctor
4.2.1. 设置密码 Vault
按照以下步骤设置和使用密码 Vault。
创建用于存储密钥存储和其他加密信息的目录。
此流程的其余部分假定目录是
EAP_HOME/vault/
。由于该目录将包含敏感信息,因此只能被有限用户访问。至少运行 JBoss EAP 的用户帐户需要读写访问。确定要与 keytool 程序一起使用的参数。
决定以下参数的值:
- alias
- 别名是密码库或密钥存储中存储的其他数据的唯一标识符。别名不区分大小写。
- storetype
-
storetype 指定密钥存储类型。建议使用
jceks
值。 - keyalg
- 用于加密的算法。使用 JRE 和操作系统的文档来查看哪些其它选择。
- keysize
- 加密密钥的大小会影响通过 brute 解密的难度。有关适当的值的信息,请查看使用 keytool 程序发布的文档。
- storepass
- storepass 的值是用于向密钥存储进行身份验证的密码,以便可以读取该密钥。密码必须至少为 6 个字符,且必须在访问密钥存储时提供。如果省略此参数,则执行该命令后将提示输入 keytool 程序。
- keypass
- keypass 的值是用于访问特定密钥的密码,且必须与 storepass 参数的值匹配。
- 有效期
- 有效期的值是密钥有效的句点(以天为单位)。
- keystore
密钥存储的值是要存储密钥存储的值的文件路径和文件名。先将数据添加到它时创建密钥存储文件。确定使用正确的文件路径分隔符:用于 Red Hat Enterprise Linux 和类似操作系统的 / (正斜杠),\(反斜杠)用于 Windows Server。
keytool
程序有许多其他选项。如需了解更多详细信息,请参阅 JRE 或操作系统的文档。
运行 keytool 命令,确保
keypass
和storepass
包含相同的值。$ keytool -genseckey -alias vault -storetype jceks -keyalg AES -keysize 128 -storepass vault22 -keypass vault22 -keystore EAP_HOME/vault/vault.keystore
这将生成已在
EAP_HOME/vault/vault.keystore
中创建的密钥存储。它存储一个密钥,其别名为 vault,它将用于存储加密字符串(如密码)以用于 JBoss EAP。
4.2.2. 初始化密码 Vault
密码 vault 可以以交互方式初始化,其中会提示您每个参数的值,或者非交互方式进行,其中所有参数值均能在命令行中提供。每种方法都会出现相同的结果,因此可以使用其中任一个。
需要以下参数:
- Keystore URL(KEYSTORE_URL)
-
密钥存储文件的文件系统路径或 URI。示例使用
EAP_HOME/vault/vault.keystore
。 - keystore password (KEYSTORE_PASSWORD)
- 用于访问密钥存储的密码。
- Salt (SALT)
- salt 值是一个随机字符串,它使用八个字符以及迭代计数来加密密钥存储的内容。
- keystore Alias (KEYSTORE_ALIAS)
- 已知密钥存储的别名。
- Iteration Count (ITERATION_COUNT)
- 加密算法运行的次数。
- 用于存储加密文件的目录(ENC_FILE_DIR)
- 要存储加密的文件的路径。这通常是包含密码库的目录。它很方便,但不要强制将所有加密信息存储在与密钥存储相同的位置。该目录应只能被限制用户访问。至少运行 JBoss EAP 7 的用户帐户需要读写访问。该密钥存储应位于您设置密码 vault 时创建的目录中。请注意,需要在目录名上末尾的反斜杠或正斜杠。确定使用正确的文件路径分隔符:用于 Red Hat Enterprise Linux 和类似操作系统的 / (正斜杠),\(反斜杠)用于 Windows Server。
- Vault Block(VAULT_BLOCK)
- 在密码库中提供给此块的名称。
- 属性(ATTRIBUTE)
- 要给所存储属性的名称。
- 安全属性(SEC-ATTR)
- 存储在密码库中的密码。
要以非交互方式运行密码库命令,EAP_HOME/bin/
中的 vault
脚本可使用相关信息的参数来调用:
$ vault.sh --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
$ vault.sh --keystore EAP_HOME/vault/vault.keystore --keystore-password vault22 --alias vault --vault-block vb --attribute password --sec-attr 0penS3sam3 --enc-dir EAP_HOME/vault/ --iteration 120 --salt 1234abcd
示例:输出
========================================================================= JBoss Vault JBOSS_HOME: EAP_HOME JAVA: java ========================================================================= Nov 09, 2015 9:02:47 PM org.picketbox.plugins.vault.PicketBoxSecurityVault init INFO: PBOX00361: Default Security Vault Implementation Initialized and Ready WFLYSEC0047: Secured attribute value has been stored in Vault. Please make note of the following: ******************************************** Vault Block:vb Attribute Name:password Configuration should be done as follows: VAULT::vb::password::1 ******************************************** WFLYSEC0048: Vault Configuration in WildFly configuration file: ******************************************** </extensions> <vault> <vault-option name="KEYSTORE_URL" value="EAP_HOME/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="1234abcd"/> <vault-option name="ITERATION_COUNT" value="120"/> <vault-option name="ENC_FILE_DIR" value="EAP_HOME/vault/"/> </vault><management> ... ********************************************
要以互动方式运行 vault 命令,需要执行以下步骤:
以交互方式启动 password vault 命令。
在 Red Hat Enterprise Linux 和类似操作系统或EAP_HOME\bin
\vault.bat 上运行
。键入EAP_HOME /bin/vault.
sh0
(零)启动新的交互式会话。完成提示参数。
按照提示输入所需的参数。
记录已屏蔽的密码信息。
屏蔽的密码、salt 和迭代数将打印到标准输出。在安全的位置记录它们。它们需要将条目添加到 Password Vault 中。访问密钥存储文件,这些值可能允许攻击者获得密码 Vault 中敏感信息的访问权限。
退出交互式控制台
键入
2
(两)以退出交互式控制台。
示例:输入和输出
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:EAP_HOME/vault/ Enter Keystore URL:EAP_HOME/vault/vault.keystore Enter Keystore password: vault22 Enter Keystore password again: vault22 Values match Enter 8 character salt:1234abcd Enter iteration count as a number (Eg: 44):120 Enter Keystore Alias:vault Initializing Vault Nov 09, 2015 9:24:36 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="EAP_HOME/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="1234abcd"/> <vault-option name="ITERATION_COUNT" value="120"/> <vault-option name="ENC_FILE_DIR" value="EAP_HOME/vault/"/> </vault><management> ... ******************************************** Vault is initialized and ready for use Handshake with Vault complete
+ 密钥存储密码已被屏蔽,以用于配置文件和部署。此外,库会被初始化并可供使用。
4.2.3. 使用密码 Vault
在可以屏蔽并使用密码和其他敏感属性前,必须先了解 JBoss EAP 7 存储和解密它们的密码库。
以下命令可将 JBoss EAP 7 配置为使用密码 vault:
/core-service=vault:add(vault-options=[("KEYSTORE_URL" => PATH_TO_KEYSTORE),("KEYSTORE_PASSWORD" => MASKED_PASSWORD),("KEYSTORE_ALIAS" => ALIAS),("SALT" => SALT),("ITERATION_COUNT" => ITERATION_COUNT),("ENC_FILE_DIR" => ENC_FILE_DIR)]) /core-service=vault:add(vault-options=[("KEYSTORE_URL" => "EAP_HOME/vault/vault.keystore"),("KEYSTORE_PASSWORD" => "MASK-5dOaAVafCSd"),("KEYSTORE_ALIAS" => "vault"),("SALT" => "1234abcd"),("ITERATION_COUNT" => "120"),("ENC_FILE_DIR" => "EAP_HOME/vault/")])
如果使用 Microsoft Windows Server,请在文件路径中使用两个反斜杠(\\),而不是使用一个。例如: C:\\data\\vault\\vault.keystore
。这是因为单个反斜杠字符(\)用于字符转义。
4.2.4. 在 Password Vault 中存储敏感字符串
在纯文本配置文件中包括密码和其他敏感字符串存在安全风险。将这些字符串保存在 Password Vault 中以提高安全性,然后可以在配置文件中引用它们,使用其屏蔽的形式管理 CLI 命令和应用程序。
敏感字符串可以以互动方式存储在 Password Vault 中,其中工具会提示每个参数的值,或者非交互地在命令行中提供所有参数值。每种方法都会出现相同的结果,因此可以使用其中任一个。这两种方法均可使用 vault
脚本调用。
要以非交互方式运行 vault 命令,vault
脚本(位于 EAP_HOME/bin/
中)可以使用相关信息的参数来调用:
$ vault.sh --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.sh --keystore EAP_HOME/vault/vault.keystore --keystore-password vault22 --alias vault --vault-block vb --attribute password --sec-attr 0penS3sam3 --enc-dir EAP_HOME/vault/ --iteration 120 --salt 1234abcd
示例:输出
========================================================================= JBoss Vault JBOSS_HOME: EAP_HOME JAVA: java ========================================================================= Nov 09, 2015 9:24:36 PM org.picketbox.plugins.vault.PicketBoxSecurityVault init INFO: PBOX00361: Default Security Vault Implementation Initialized and Ready WFLYSEC0047: Secured attribute value has been stored in Vault. Please make note of the following: ******************************************** Vault Block:vb Attribute Name:password Configuration should be done as follows: VAULT::vb::password::1 ******************************************** WFLYSEC0048: Vault Configuration in WildFly configuration file: ******************************************** ... </extensions> <vault> <vault-option name="KEYSTORE_URL" value="../vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="1234abcd"/> <vault-option name="ITERATION_COUNT" value="120"/> <vault-option name="ENC_FILE_DIR" value="../vault/"/> </vault><management> ... ********************************************
在调用 vault
脚本后,消息会在标准输出中打印到标准输出,显示 vault 块、属性名称、屏蔽字符串以及配置中有关字符串的建议。在安全的位置记录此信息。示例输出的提取如下:
Vault Block:vb Attribute Name:password Configuration should be done as follows: VAULT::vb::password::1
要以互动方式运行 vault 命令,需要执行以下步骤:
以交互方式启动 Password Vault 命令。
启动操作系统命令行界面,并运行
EAP_HOME/bin/vault.sh
(在 Red Hat Enterprise Linux 和类似操作系统)或EAP_HOME\bin\vault.bat
(在 Microsoft Windows Server 上)。键入0
(零)启动新的交互式会话。完成提示参数。
按照提示输入所需的参数。这些值必须与创建密码 Vault 时提供的匹配。
注意密钥存储密码必须以纯文本形式提供,而不是屏蔽的格式。
完成有关敏感字符串的提示参数。
输入
0
(零)开始存储敏感字符串。按照提示输入所需的参数。记录有关已屏蔽字符串的信息。
条消息将打印到标准输出,显示 vault 块、属性名称、屏蔽字符串以及配置中使用字符串的建议。在安全的位置记录此信息。示例输出的提取如下:
Vault Block:ds_Example1 Attribute Name:password Configuration should be done as follows: VAULT::ds_Example1::password::1
退出交互式控制台。
键入
2
(两)退出交互式控制台。
示例:输入和输出
========================================================================= JBoss Vault JBOSS_HOME: EAP_HOME JAVA: 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:EAP_HOME/vault/ Enter Keystore URL:EAP_HOME/vault/vault.keystore Enter Keystore password: Enter Keystore password again: Values match Enter 8 character salt:1234abcd Enter iteration count as a number (Eg: 44):120 Enter Keystore Alias:vault Initializing Vault Nov 09, 2015 9:24:36 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="EAP_HOME/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="1234abcd"/> <vault-option name="ITERATION_COUNT" value="120"/> <vault-option name="ENC_FILE_DIR" value="EAP_HOME/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: Remove secured attribute 3: Exit 0 Task: Store a secured attribute Please enter secured attribute value (such as password): Please enter secured attribute value (such as password) again: Values match Enter Vault Block:ds_Example1 Enter Attribute Name:password Secured attribute value has been stored in vault. Please make note of the following: ******************************************** Vault Block:ds_Example1 Attribute Name:password Configuration should be done as follows: VAULT::ds_Example1::password::1 ******************************************** Please enter a Digit:: 0: Store a secured attribute 1: Check whether a secured attribute exists 2: Remove secured attribute 3: Exit
4.2.5. 在配置中使用加密敏感字符串
任何已加密的敏感字符串都可以以屏蔽的形式用于配置文件或管理 CLI 命令,从而提供表达式。
要确认特定子系统内是否允许表达式,请对该子系统运行以下管理 CLI 命令:
/subsystem=SUBSYSTEM:read-resource-description(recursive=true)
在运行此命令的输出中,查找 expressions -allowed 参数的值
。如果这是 true
,那么可在此子系统配置中使用表达式。
使用以下语法将任何纯文本字符串替换为掩码形式。
${VAULT::VAULT_BLOCK::ATTRIBUTE_NAME::MASKED_STRING}
示例:使用 Masked Form 中的密码的数据源定义
... <subsystem xmlns="urn:jboss:domain:datasources:5.0"> <datasources> <datasource jndi-name="java:jboss/datasources/ExampleDS" enabled="true" use-java-context="true" pool-name="H2DS"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> <driver>h2</driver> <pool></pool> <security> <user-name>sa</user-name> <password>${VAULT::ds_ExampleDS::password::1}</password> </security> </datasource> <drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem> ...
4.2.6. 在应用程序中使用加密敏感字符串
存储在密码 vault 中的加密字符串可以在应用程序的源代码中使用。以下示例是 servlet 的源代码的提取,说明在数据源定义中使用掩码的密码,而不是纯文本密码。纯文本版本已注释掉,以便您看到不同的差异。
示例:使用 Vault 密码的 Servlet
@DataSourceDefinition( name = "java:jboss/datasources/LoginDS", user = "sa", password = "VAULT::DS::thePass::1", className = "org.h2.jdbcx.JdbcDataSource", url = "jdbc:h2:tcp://localhost/mem:test" ) /*old (plaintext) definition @DataSourceDefinition( name = "java:jboss/datasources/LoginDS", user = "sa", password = "sa", className = "org.h2.jdbcx.JdbcDataSource", url = "jdbc:h2:tcp://localhost/mem:test" )*/
4.2.7. 检查敏感字符串是否在 Password Vault 中
在尝试存储或使用密码 Vault 中的敏感字符串之前,请先确认它是否已存储。
此检查可以交互方式完成,其中提示用户输入每个参数的值,或者非交互方式进行,其中所有参数的值都在命令行中都提供了。每种方法都会出现相同的结果,因此可以使用其中任一个。这两种方法均可使用 vault
脚本调用。
使用非操作方法一次性提供所有参数的值。有关所有参数的描述,请参阅 Initialize the Password Vault。要以非交互方式运行密码库命令,EAP_HOME/bin/
中的 vault
脚本可使用相关信息的参数来调用:
$ vault.sh --keystore KEYSTORE_URL --keystore-password KEYSTORE_PASSWORD --alias KEYSTORE_ALIAS --check-sec-attr --vault-block VAULT_BLOCK --attribute ATTRIBUTE --enc-dir ENC_FILE_DIR --iteration ITERATION_COUNT --salt SALT
使用实际值替换占位符值。KEYSTORE_URL、KEYSTORE_PASSWORD 和 KEYSTORE_ALIAS 的值必须与创建密码 vault 时提供的值匹配。
密钥存储密码必须以纯文本形式提供,而不是屏蔽的格式。
如果敏感字符串存储在指定 vault 块中,则会显示以下消息:
Password already exists.
如果值没有存储在指定块中,则会显示以下信息:
Password doesn't exist.
要以互动方式运行 vault 命令,需要执行以下步骤:
以交互方式启动 password vault 命令。
运行
EAP_HOME/bin/vault.sh
(在 Red Hat Enterprise Linux 和类似操作系统)或EAP_HOME\bin\vault.bat
(在 Windows Server 上)。键入0
(零)启动新的交互式会话。完成提示参数。按照提示输入所需的身份验证参数。这些值必须与创建密码库时提供的匹配。
注意提示输入身份验证时,密钥存储密码必须以纯文本形式提供,而不是屏蔽的形式。
-
输入
1
(一) 选择检查是否存在安全属性。 - 输入存储敏感字符串的 vault 块的名称。
- 输入要检查的敏感字符串的名称。
-
输入
如果敏感字符串存储在指定 vault 块中,类似以下内容的确认消息将输出:
A value exists for (VAULT_BLOCK, ATTRIBUTE)
如果敏感字符串不在指定块中,类似以下内容的消息将输出如下:
No value has been store for (VAULT_BLOCK, ATTRIBUTE)
示例:检查敏感字符串以主动的形式
========================================================================= JBoss Vault JBOSS_HOME: EAP_HOME JAVA: 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:EAP_HOME/vault Enter Keystore URL:EAP_HOME/vault/vault.keystore Enter Keystore password: Enter Keystore password again: Values match Enter 8 character salt:1234abcd Enter iteration count as a number (Eg: 44):120 Enter Keystore Alias:vault Initializing Vault Nov 09, 2015 9:24:36 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="EAP_HOME/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="1234abcd"/> <vault-option name="ITERATION_COUNT" value="120"/> <vault-option name="ENC_FILE_DIR" value="EAP_HOME/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: Remove secured attribute 3: Exit 1 Task: Verify whether a secured attribute exists Enter Vault Block:vb Enter Attribute Name:password A value exists for (vb, password) Please enter a Digit:: 0: Store a secured attribute 1: Check whether a secured attribute exists 2: Remove secured attribute 3: Exit
4.2.8. 从 Password Vault 中删除敏感字符串
出于安全考虑,最好在不再需要密码 Vault 时从密码 Vault 中删除敏感字符串。例如,如果应用程序被停用,在数据源定义中使用的任何敏感字符串都应同时删除。
作为先决条件,请先从密码 Vault 中删除敏感字符串,请确认它在 JBoss EAP 的配置中使用。
此操作可以交互方式完成,其中提示用户输入每个参数的值,或者非交互方式进行,其中所有参数的值都会在命令行中提供。每种方法都会出现相同的结果,因此可以使用其中任一个。这两种方法均可使用 vault
脚本调用。
使用非操作方法一次性提供所有参数的值。有关所有参数的描述,请参阅 Initialize the Password Vault。要以非交互方式运行 vault 命令,vault
脚本(位于 EAP_HOME/bin/
中)可以使用相关信息的参数来调用:
$ vault.sh --keystore KEYSTORE_URL --keystore-password KEYSTORE_PASSWORD --alias KEYSTORE_ALIAS --remove-sec-attr --vault-block VAULT_BLOCK --attribute ATTRIBUTE --enc-dir ENC_FILE_DIR --iteration ITERATION_COUNT --salt SALT
使用实际值替换占位符值。KEYSTORE_URL、KEYSTORE_PASSWORD 和 KEYSTORE_ALIAS 的值必须与创建密码 vault 时提供的值匹配。
密钥存储密码必须以纯文本形式提供,而不是屏蔽的格式。
如果成功删除了敏感字符串,则会显示类似如下的确认信息:
Secured attribute [VAULT_BLOCK::ATTRIBUTE] has been successfully removed from vault
如果没有删除敏感字符串,则会显示类似如下的消息:
Secured attribute [VAULT_BLOCK::ATTRIBUTE] was not removed from vault, check whether it exist
示例:输出
$ ./vault.sh --keystore EAP_HOME/vault/vault.keystore --keystore-password vault22 --alias vault --remove-sec-attr --vault-block vb --attribute password --enc-dir EAP_HOME/vault/ --iteration 120 --salt 1234abcd ========================================================================= JBoss Vault JBOSS_HOME: EAP_HOME JAVA: java ========================================================================= Dec 23, 2015 1:54:24 PM org.picketbox.plugins.vault.PicketBoxSecurityVault init INFO: PBOX000361: Default Security Vault Implementation Initialized and Ready Secured attribute [vb::password] has been successfully removed from vault
以交互方式删除敏感 String
要以互动方式运行密码 vault 命令,需要执行以下步骤:
以交互方式启动 password vault 命令。
运行
EAP_HOME/bin/vault.sh
(在红帽企业 Linux 和类似操作系统上)或EAP_HOME\bin\vault.bat
(在 Microsoft Windows Server 上)。键入0
(零)启动新的交互式会话。完成提示的参数。
按照提示输入所需的身份验证参数。这些值必须与创建密码库时提供的值匹配。
注意提示进行身份验证时,必须以纯文本形式提供密钥存储密码,而不是屏蔽的格式。
-
输入
2
(两),选择删除保护的属性。 - 输入存储敏感字符串的 vault 块的名称。
- 输入要删除的敏感字符串的名称。
-
输入
如果成功删除了敏感字符串,则会显示类似如下的确认信息:
Secured attribute [VAULT_BLOCK::ATTRIBUTE] has been successfully removed from vault
如果没有删除敏感字符串,则会显示类似如下的消息:
Secured attribute [VAULT_BLOCK::ATTRIBUTE] was not removed from vault, check whether it exist
示例:输出
********************************** **** 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:EAP_HOME/vault/ Enter Keystore URL:EAP_HOME/vault/vault.keystore Enter Keystore password: Enter Keystore password again: Values match Enter 8 character salt:1234abcd Enter iteration count as a number (Eg: 44):120 Enter Keystore Alias:vault Initializing Vault Dec 23, 2014 1:40:56 PM org.picketbox.plugins.vault.PicketBoxSecurityVault init INFO: PBOX000361: Default Security Vault Implementation Initialized and Ready Vault Configuration in configuration file: ******************************************** ... </extensions> <vault> <vault-option name="KEYSTORE_URL" value="EAP_HOME/vault/vault.keystore"/> <vault-option name="KEYSTORE_PASSWORD" value="MASK-5dOaAVafCSd"/> <vault-option name="KEYSTORE_ALIAS" value="vault"/> <vault-option name="SALT" value="1234abcd"/> <vault-option name="ITERATION_COUNT" value="120"/> <vault-option name="ENC_FILE_DIR" value="EAP_HOME/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: Remove secured attribute 3: Exit 2 Task: Remove secured attribute Enter Vault Block:vb Enter Attribute Name:password Secured attribute [vb::password] has been successfully removed from vault
4.2.9. 配置 Red Hat JBoss Enterprise Application Platform 平台,以使用密码 Vault 的自定义实施
除了使用提供的密码库实施外,还可以使用对 SecurityVault
的自定义实施。
作为前提条件,请确保已初始化密码库。如需更多信息,请参阅 Initialize the Password Vault。
对密码库使用自定义实施:
-
创建一个实施接口
SecurityVault
的类。 -
创建一个包含上一步中的类的模块,并指定接口为
SecurityVault
的 org.picketbox
的依赖关系。 通过添加 vault 元素及以下属性,在 JBoss EAP 配置中启用自定义密码库:
-
code - 实施
SecurityVault
的全限定类名称。 - module - 包含自定义类的模块名称。
-
code - 实施
(可选) vault-options
参数可用于初始化密码库的自定义类。
示例:使用 vault-options 参数初始化自定义类
/core-service=vault:add(code="custom.vault.implementation.CustomSecurityVault", module="custom.vault.module", vault-options=[("KEYSTORE_URL" => PATH_TO_KEYSTORE),("KEYSTORE_PASSWORD" => MASKED_PASSWORD), ("KEYSTORE_ALIAS" => ALIAS),("SALT" => SALT),("ITERATION_COUNT" => ITERATION_COUNT),("ENC_FILE_DIR" => ENC_FILE_DIR)])
4.2.10. 从外部源获取密钥存储密码
可在 vault 配置中使用 EXT
, EXTC
, CMD
, CMDC
或 CLASS
方法来获取 Java 密钥存储密码。
<vault-option name="KEYSTORE_PASSWORD" value="METHOD_TO_OBTAIN_PASSWORD"/>
方法的描述列为:
- {EXT}…
-
指的是确切的命令,其中
…
是确切的命令。例如:{EXT}/usr/bin/getmypassword --section 1 --query company
运行/usr/bin/getmypassword
命令,该命令可在标准输出上显示密码,并将它用作 Security Vault 的密钥存储的密码。在本例中,命令使用两个选项:第 1 部分
和--query company
。 - {EXTC[:expiration_in_millis]}…
-
指的是确切的命令,其中
…
是传递给Runtime.exec(String)
方法的确切命令行,以执行平台命令。命令输出的第一行用作密码。EXTC 变体缓存expiration_in_millis
毫秒的密码。默认缓存到期时间为0 = infinity
。例如:{EXTC:120000}/usr/bin/getmypassword --section 1 --query company
验证缓存是否包含/usr/bin/getmypassword
输出,如果它包含输出,然后将其使用。如果它不包含输出,请运行 命令将其输出到缓存并使用它。在本例中,缓存在 2 分钟后过期,该缓存为 120000 毫秒。 - {CMD}… or {CMDC[:expiration_in_millis]}…
-
常规命令是用
(
comma)分隔的字符串,其中第一部分是实际命令,而其他部分则表示参数。逗号可以反斜杠,使它成为 参数的一部分。例如:{CMD}/usr/bin/getmypassword,--section,1,--query,company
。 - {CLASS[@jboss_module_spec]}classname[:ctorargs]
-
其中
[:ctorargs]
是用以下分隔的可选字符串:(
冒号)将类名称传递到类名称器。
ctorargs
是一个以逗号分隔的字符串列表。例如{CLASS@org.test.passwd}org.test.passwd.ExternamPassworProvider
。在本例中,org.test.passwd.ExternamPassworProvider
类是从org.test.passwd
模块加载的,并使用toCharArray()
方法获取密码。如果toCharArray()
不可用,则使用toString()
方法。org.test.passwd.ExternamPassworProvider
类必须具有默认的构造器。