第 3 章 安全存储凭证
JBoss EAP 允许在配置文件外加密敏感字符串。这些字符串可以存储在密钥存储中,随后针对应用和验证系统解密。敏感字符串可存储在以下任一位置:
默认情况下,EAP _HOME/standalone/configuration/
和 EAP_HOME/domain/configuration/
中的所有配置文件都是全局可读的。强烈建议不要将纯文本密码存储在配置文件中,而是将这些凭证放在 凭证存储 或 密码库中。
如果您决定在配置文件中放置纯文本密码,则这些文件应只能被受限用户访问。至少,运行 JBoss EAP 7 的用户帐户需要读写访问权限。
3.1. 凭证存储 复制链接链接已复制到粘贴板!
凭据存储通过 elytron
子系统引入,允许安全存储和使用凭据。您可以在安全架构指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/security_architecture/#elytron_core_concepts_components 的核心概念和组件部分找到有关凭证存储和其他 Elytron 组件的更多背景信息。
使用凭据存储优先于使用密码库来存储密码和其他敏感字符串。借助凭据,可以在 JBoss EAP 管理 CLI 中轻松管理凭据,而不必使用外部工具。您还可以在 JBoss EAP 服务器中使用多个凭据存储,相比之下,每个 JBoss EAP 服务器仅有一个密码库的限制。
默认凭据存储实施使用 JCEKS 密钥存储文件来存储凭据。在创建新凭据存储时,默认的实施还允许您引用现有的密钥存储文件,或者让 JBoss EAP 自动为您创建该文件。目前,默认实施仅允许您存储明文密码。
elytron
子系统不提供使用与存储到多个凭据存储相同的文件的任何检查。强烈建议不要将同一文件用于多个凭据存储,甚至不要使用远程文件系统共享存储文件。
如果需要使用共享存储文件,请务必在凭据存储上设置访问该文件的 只读
标志。这将阻止修改文件。从外部更新文件后,必须重新加载每个凭据存储,以反映更改后的值。在使用受管域中的凭据存储时,需要遵循类似的流程。
由于凭据存储包含敏感信息,含有存储的目录应只能供受限用户访问。至少,运行 JBoss EAP 的用户帐户需要读写访问权限。
JBoss EAP 将凭据存储文件读取到内存中,并在不同时间写入更改。您必须确保运行 JBoss EAP 进程的用户具有存储文件的权限,并且在 JBoss EAP 运行期间您不会从外部修改存储文件。
如果文件外部修改,您可以使用凭据存储上的 reload()
操作,使 JBoss EAP 重新加载存储文件的内容。
3.1.1. 创建凭证存储 复制链接链接已复制到粘贴板!
要创建凭据存储,您必须定义新凭据存储文件的路径,并提供用于加密凭据存储的 master 密码。包含存储的目录应只能供受限用户访问。至少,运行 JBoss EAP 的用户帐户需要读写访问权限。
JCEKS 密钥存储实施因 Java 供应商而异,因此 JBoss EAP 实例必须从生成 JCEKS 密钥存储的同一供应商运行 JDK。
与在其他 JBoss EAP 配置中提供路径一样,您也可以使用 relative-to
属性来提供相对于另一个路径的路径。
为单机服务器创建凭证存储
使用以下管理 CLI 命令创建凭证存储:
/subsystem=elytron/credential-store=<store_name>:add(location="<path_to_store_file>", credential-reference={clear-text=<store_password>},create=true)
/subsystem=elytron/credential-store=<store_name>:add(location="<path_to_store_file>", credential-reference={clear-text=<store_password>},create=true)
例如,以下命令创建名为 my_store
的新存储,并创建文件 jboss.server.data.dir/cred_stores/my_store.jceks
:
/subsystem=elytron/credential-store=my_store:add(location="cred_stores/my_store.jceks", relative-to=jboss.server.data.dir, credential-reference={clear-text=<secret_store_password>},create=true)
/subsystem=elytron/credential-store=my_store:add(location="cred_stores/my_store.jceks", relative-to=jboss.server.data.dir, credential-reference={clear-text=<secret_store_password>},create=true)
如果要使用非 默认
实施,可以显式定义凭证存储的类型。如需更多信息,请参阅有关使用自定义凭证存储实现的章节。
在受管域中创建凭证存储
您可以在受管域中创建凭据存储,但您必须首先使用 WildFly Elytron Tool 使用凭据准备资源。如果受管域中存在多个主机控制器,您必须选择以下选项之一:
- 在每一主机控制器中创建凭据存储。
- 将凭据存储从一个主机控制器复制到所有其他主机控制器。
- 将存储文件放在网络文件系统(NFS)中,并将 文件用于所有创建的凭据存储资源。
或者,您也可使用主机控制器上的凭据创建凭据存储文件,而不使用 WildFly Elytron 工具。
您不需要在每个服务器上定义凭据存储资源。运行相同配置文件的服务器(为其创建资源)的每一服务器都包含您的凭据存储文件。您可以在服务器数据目录 relative-to=jboss.server.data.dir
中找到存储文件。
流程
- 使用 WildFly Elytron Tool 创建凭据存储存储文件。有关此信息,请参阅使用 WildFly Elytron 工具创建和修改凭证存储。
分发存储文件。例如,将 文件分发到每一主机控制器,例如使用
scp
,或者将它存储在 NFS 中,并将它用于所有创建的凭据存储资源。注意对于存储在 NFS 中并且由多个主机控制器的资源使用的凭据存储文件,您必须以只读模式使用凭据存储来维护一致性。此外,为凭据存储文件提供绝对路径。
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<absolute_path_to_store_keystore>,credential-reference={clear-text="<store_password>"},create=false,modifiable=false)
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<absolute_path_to_store_keystore>,credential-reference={clear-text="<store_password>"},create=false,modifiable=false)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 如果您需要在配置集中定义凭证存储资源,请使用存储文件来创建资源。
从存储文件创建凭据存储资源的示例:
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
/profile=<profile_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:为主机控制器创建凭据存储资源。
为主机控制器创建凭据存储资源的示例:
/host=<host_controller_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
/host=<host_controller_name>/subsystem=elytron/credential-store=<store_name>:add(location=<path_to_store_file>,credential-reference={clear-text="<store_password>"})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2. 将凭证添加到凭证存储 复制链接链接已复制到粘贴板!
要将新凭证添加到凭证存储中,请将别名与您要存储的敏感字符串相关联。
默认情况下,凭证存储别名不区分大小写。所有存储的别名都以小写显示,可以使用大写字母和小写字母的任何组合来引用。
如果使用自定义凭证存储,则由自定义实施决定大小写敏感度。
以下管理 CLI 命令在凭证存储中添加凭证:
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias=ALIAS, secret-value="SENSITIVE_STRING")
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias=ALIAS, secret-value="SENSITIVE_STRING")
例如,在上一节 中创建的存储中添加带有别名 database-pw
的密码:
/subsystem=elytron/credential-store=my_store:add-alias(alias=database-pw, secret-value="speci@l_db_pa$$_01")
/subsystem=elytron/credential-store=my_store:add-alias(alias=database-pw, secret-value="speci@l_db_pa$$_01")
有关将凭证添加到受管域中的凭证存储的信息,请参阅使用 WildFly Elytron 工具将凭证添加到凭证存储中。
使用管理控制台编辑凭证存储别名
- 登录管理控制台并单击 Runtime 选项卡。
-
选择服务器并选择 Security(Elytron)
Stores 并点 View。 - 选择凭据存储并单击 Aliases 以编辑别名。
3.1.3. 在配置中使用存储的凭据 复制链接链接已复制到粘贴板!
若要引用存储在凭据存储中的密码或敏感字符串,请在 JBoss EAP 配置中使用 credentials -reference
属性。您可以使用 凭据引用
作为替代方案,在 JBoss EAP 配置中的大多数位置提供密码或其他敏感字符串。
credential-reference={store=STORE_NAME, alias=ALIAS}
credential-reference={store=STORE_NAME, alias=ALIAS}
例如,要使用上 例中 添加到凭证存储的密码创建新数据源,您可以使用类似如下 的凭证首
选项:
data-source add --name=my_DS --jndi-name=java:/my_DS --driver-name=h2 --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE --user-name=db_user --credential-reference={store=my_store, alias=database-pw}
data-source add --name=my_DS --jndi-name=java:/my_DS --driver-name=h2 --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE --user-name=db_user --credential-reference={store=my_store, alias=database-pw}
在上面的示例中,将提供 包括存储名称和别名的凭证首选项
,而不是使用 --password
提供密码。如果检查生成的数据源配置,请注意未定义 密码
,并且定义了 credential-reference
属性。
3.1.4. 列出 Credential Store 中的凭据 复制链接链接已复制到粘贴板!
您可以使用以下命令列出凭证存储中包含的所有凭证的别名:
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
例如:
3.1.5. 从凭证存储中删除凭证 复制链接链接已复制到粘贴板!
您可以使用以下命令从凭证存储中删除凭证:
/subsystem=elytron/credential-store=STORE_NAME:remove-alias(alias=ALIAS)
/subsystem=elytron/credential-store=STORE_NAME:remove-alias(alias=ALIAS)
例如:
/subsystem=elytron/credential-store=my_store:remove-alias(alias=database-pw)
/subsystem=elytron/credential-store=my_store:remove-alias(alias=database-pw)
3.1.6. 从外部来源获取凭证存储的主密码 复制链接链接已复制到粘贴板!
您可以选择使用伪凭据存储提供该密码,而不是在明文中提供您的主密码。您有以下选项:
- EXT
使用
java.lang.Runtime#exec(java.lang.String)
的外部命令。如果需要参数,将使用空格分隔的字符串列表来提供它们。外部命令引用操作系统中的任何可执行文件,如 shell 脚本或可执行二进制文件。密码从已执行命令的标准输出中读取。示例
{EXT}/usr/bin/getTheMasterPasswordScript.sh par1 par2
{EXT}/usr/bin/getTheMasterPasswordScript.sh par1 par2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - CMD
使用
java.lang.ProcessBuilder
的外部命令.如果需要参数,将使用逗号分隔的字符串列表来提供它们。外部命令引用操作系统中的任何可执行文件,如 shell 脚本或可执行二进制文件。密码从已执行命令的标准输出中读取。示例
{CMD}/usr/bin/getTheMasterPasswordScript.sh par1,par2
{CMD}/usr/bin/getTheMasterPasswordScript.sh par1,par2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 掩码
使用 PBE 或基于密码的加密进行屏蔽密码.它必须采用以下格式,其中包含
SALT
和ITERATION
值:MASK-MASKED_VALUE;SALT;ITERATION
MASK-MASKED_VALUE;SALT;ITERATION
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
MASK-NqMznhSbL3lwRpDmyuqLBW==;12345678;123
MASK-NqMznhSbL3lwRpDmyuqLBW==;12345678;123
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
EXT
、CMD
和 MASK
提供与提供外部密码的传统安全库样式向后兼容性。对于 MASK
,您必须使用上述格式,其中包括 SALT
和 ITERATION
值。
您还可以将位于另一个凭据存储中的密码用作新凭据存储的 master 密码。
使用其他凭证存储中的密码创建凭证存储示例
/subsystem=elytron/credential-store=exampleCS:add(location="cred_stores/exampleCS.jceks", relative-to=jboss.server.data.dir, create=true, credential-reference={store=master-cred-store, alias=master-pw})
/subsystem=elytron/credential-store=exampleCS:add(location="cred_stores/exampleCS.jceks", relative-to=jboss.server.data.dir, create=true, credential-reference={store=master-cred-store, alias=master-pw})
3.1.7. 定义 FIPS 140-2 兼容凭证存储 复制链接链接已复制到粘贴板!
FIPS 140-2 兼容凭证存储可使用以下方法之一定义。
3.1.7.1. 使用 NSS 数据库定义 FIPS 140-2 兼容凭证存储 复制链接链接已复制到粘贴板!
要获取 FIPS 兼容密钥存储,请使用 Sun PKCS#11 供应商访问 NSS 数据库。有关定义数据库的说明,请参考 配置 NSS 数据库。
创建要在凭据存储中使用的 secret 密钥。
注意要使
keytool
命令正常工作,必须为nssDbMode
属性分配readWrite
值 innss_pkcsll_fips.cfg
文件。keytool -keystore NONE -storetype PKCS11 -storepass STORE_PASSWORD -genseckey -alias ALIAS -keyalg AES -keysize 256
$ keytool -keystore NONE -storetype PKCS11 -storepass STORE_PASSWORD -genseckey -alias ALIAS -keyalg AES -keysize 256
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建外部凭据存储。外部凭证存储在 PKCS#11 密钥存储中保存 secret 密钥,并使用上一步中定义的别名访问此密钥存储。然后,使用此密钥存储来解密 JCEKS 密钥存储中的凭据。除了
credential-store
属性 外,凭据存储
密钥存储CredentialStore
实施属性 也用于配置外部凭据存储。/subsystem=elytron/credential-store=STORE_NAME:add(modifiable=true, implementation-properties={"keyStoreType"=>"PKCS11","external"=>"true","keyAlias"=>"ALIAS", externalPath="/path/to/JCEKS_file"},credential-reference={clear-text="STORE_PASSWORD"}, create=true)
/subsystem=elytron/credential-store=STORE_NAME:add(modifiable=true, implementation-properties={"keyStoreType"=>"PKCS11","external"=>"true","keyAlias"=>"ALIAS", externalPath="/path/to/JCEKS_file"},credential-reference={clear-text="STORE_PASSWORD"}, create=true)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建之后,凭据存储可用于正常存储别名。
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
/subsystem=elytron/credential-store=STORE_NAME:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过从凭据存储读取来确认别名已成功添加。
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
/subsystem=elytron/credential-store=STORE_NAME:read-aliases()
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以下说明概述了如何使用 BouncyCastle
供应商获取 FIPS 兼容的密钥存储。
-
确保您的环境 已配置为使用
BouncyCastle
提供商。 创建要在凭据存储中使用的 secret 密钥。
keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
$ keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要密钥存储的
keypass
和 storepass
必须相同,才能在elytron
子系统中定义 FIPS 凭据。创建外部凭据存储。外部凭据存储将机密密钥保存在 BCFKS 密钥存储中,并使用上一步中定义的别名访问此密钥存储。然后,使用此密钥存储来解密 JCEKS 密钥存储中的凭据。
credential-store
KeyStoreCredentialStore
实施属性 用于配置外部凭据存储。/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add(relative-to=jboss.server.config.dir,credential-reference={clear-text=PASSWORD},implementation-properties={keyAlias=KEY_ALIAS,external=true,externalPath=CREDENTIAL_STORE,keyStoreType=BCFKS},create=true,location=KEYSTORE,modifiable=true)
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add(relative-to=jboss.server.config.dir,credential-reference={clear-text=PASSWORD},implementation-properties={keyAlias=KEY_ALIAS,external=true,externalPath=CREDENTIAL_STORE,keyStoreType=BCFKS},create=true,location=KEYSTORE,modifiable=true)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建之后,凭据存储可用于正常存储别名。
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:add-alias(alias="ALIAS", secret-value="SENSITIVE_STRING")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过从凭据存储读取来确认别名已成功添加。
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:read-aliases()
/subsystem=elytron/credential-store=BCFKS_CREDENTIAL_STORE:read-aliases()
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.8. 使用凭证存储的自定义实施 复制链接链接已复制到粘贴板!
使用凭证存储的自定义实施:
-
创建扩展服务提供商接口(SPI)
CredentialStoreSpi
抽象类的类。 -
创建实施 Java 安全
提供程序
的类。提供商必须添加自定义凭据存储类作为服务。 创建包含凭据存储和提供程序类的模块,并将其添加到 JBoss EAP 中,该模块依赖于
org.wildfly.security.elytron
。例如:module add --name=org.jboss.customcredstore --resources=/path/to/customcredstoreprovider.jar --dependencies=org.wildfly.security.elytron --slot=main
module add --name=org.jboss.customcredstore --resources=/path/to/customcredstoreprovider.jar --dependencies=org.wildfly.security.elytron --slot=main
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的供应商创建供应商加载程序。例如:
/subsystem=elytron/provider-loader=myCustomLoader:add(class-names=[org.wildfly.security.mycustomcredstore.CustomElytronProvider],module=org.jboss.customcredstore)
/subsystem=elytron/provider-loader=myCustomLoader:add(class-names=[org.wildfly.security.mycustomcredstore.CustomElytronProvider],module=org.jboss.customcredstore)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用自定义实施创建凭据存储。
注意确保您指定了正确的
供应商和
类型
值。type
的值是在您的供应商类中用于将自定义凭证存储类添加为服务。例如:
/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,如果您创建了多个供应商,您可以使用另一个供应商 loader 和
other-providers
指定额外的供应商。这可让您为新类型的凭证进行其他额外实施。这些指定的其他提供程序可在自定义凭据存储的初始化
方法中自动访问,作为Provider[]
参数。例如:/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,other-providers=myCustomLoader2,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
/subsystem=elytron/credential-store=my_store:add(providers=myCustomLoader,other-providers=myCustomLoader2,type=CustomKeyStorePasswordStore,location="cred_stores/my_store.jceks",relative-to=jboss.server.data.dir,credential-reference={clear-text=supersecretstorepassword},create=true)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.9. 使用 WildFly Elytron 工具创建和修改凭据存储 复制链接链接已复制到粘贴板!
您可以使用 WildFly Elytron 工具(您使用位于 EAP_HOME/bin/
中的 elytron-tool
脚本)为离线或已停止的 JBoss EAP 服务器创建和修改凭据存储。
JCEKS 密钥存储实施因 Java 供应商而异,因此 JBoss EAP 实例必须从生成 JCEKS 密钥存储的同一供应商运行 JDK。
使用 WildFly Elytron 工具修改正在运行的 JBoss EAP 服务器使用的凭据存储可能会导致存储更改丢失。取而代之,您应该使用管理 CLI 为正在运行的服务器创建和修改凭据存储,如前面的章节中所述。
以下命令显示使用 elytron-tool.sh
作为红帽企业 Linux 和 Solaris 系统:对于 Windows Server 系统,改为使用 elytron-tool.bat
脚本。
使用 WildFly Elytron 工具创建凭证存储
使用以下命令,使用 WildFly Elytron 工具创建凭证存储:
EAP_HOME/bin/elytron-tool.sh credential-store --create --location "path/to/store_file" --password STORE_PASSWORD
$ EAP_HOME/bin/elytron-tool.sh credential-store --create --location "path/to/store_file" --password STORE_PASSWORD
例如:
EAP_HOME/bin/elytron-tool.sh credential-store --create --location "../cred_stores/my_store.jceks" --password supersecretstorepassword
$ EAP_HOME/bin/elytron-tool.sh credential-store --create --location "../cred_stores/my_store.jceks" --password supersecretstorepassword
如果您不想在 命令中提供存储密码,可以省略该参数,系统会提示您使用标准输入手动输入密码。您还可以将 WildFly Elytron 工具生成的屏蔽密码用于存储密码。
使用 BouncyCastle
Provider 创建带有 WildFly Elytron 工具的凭证存储
以下流程概述了如何使用 WildFly Elytron 工具创建凭据存储。
-
确保您的环境 已配置为使用
BouncyCastle
提供商。 定义
BCFKS
密钥存储.如果此密钥存储已存在,请继续下一步。keytool -genkeypair -alias ALIAS -keyalg RSA -keysize 2048 -keypass PASSWORD -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD
$ keytool -genkeypair -alias ALIAS -keyalg RSA -keysize 2048 -keypass PASSWORD -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要密钥存储的
keypass
和 storepass
必须相同,才能在elytron
子系统中定义 FIPS 凭据。为凭据存储生成 secret 密钥。
keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
$ keytool -genseckey -alias KEY_ALIAS -keyalg AES -keysize 128 -keystore KEYSTORE -storetype BCFKS -storepass PASSWORD -keypass PASSWORD
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,使用 WildFly Elytron 工具定义凭证存储:
EAP_HOME/bin/elytron-tool.sh credential-store -c -a ALIAS -x ALIAS_PASSWORD -p PASSWORD -l KEYSTORE -u "keyStoreType=BCFKS;external=true;keyAlias=KEY_ALIAS;externalPath=CREDENTIAL_STORE"
$ EAP_HOME/bin/elytron-tool.sh credential-store -c -a ALIAS -x ALIAS_PASSWORD -p PASSWORD -l KEYSTORE -u "keyStoreType=BCFKS;external=true;keyAlias=KEY_ALIAS;externalPath=CREDENTIAL_STORE"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 WildFly Elytron 工具将凭证添加到凭证存储
使用以下命令,使用 WildFly Elytron 工具在凭证存储中添加凭证:
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --add ALIAS --secret SENSITIVE_STRING
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --add ALIAS --secret SENSITIVE_STRING
例如:
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --add database-pw --secret speci@l_db_pa$$_01
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --add database-pw --secret speci@l_db_pa$$_01
与提供凭证存储密码类似,如果您不想在 命令中提供 secret,可以省略该参数,系统会提示您使用标准输入手动输入 secret。
使用 WildFly Elytron 工具列出凭据存储中的所有凭据
使用以下命令,使用 WildFly Elytron 工具列出凭证存储中的凭证:
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --aliases
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --aliases
例如:
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --aliases
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --aliases
使用 Wildfly Elytron 工具检查凭据存储中的 Alias Exists
使用以下命令,使用 WildFly Elytron 工具检查凭证存储中是否存在别名:
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --exists ALIAS
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --exists ALIAS
例如:
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --exists database-pw
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --exists database-pw
使用 WildFly Elytron 工具从凭证存储中删除凭证
使用以下命令,使用 WildFly Elytron 工具从凭证存储中删除凭证:
EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --remove ALIAS
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "path/to/store_file" --password STORE_PASSWORD --remove ALIAS
例如:
EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --remove database-pw
$ EAP_HOME/bin/elytron-tool.sh credential-store --location "../cred_stores/my_store.jceks" --password supersecretstorepassword --remove database-pw
使用 WildFly Elytron 工具将创建凭据存储添加到 JBoss EAP 服务器
使用 WildFly Elytron 工具创建凭证存储后,使用以下管理 CLI 命令将它添加到正在运行的 JBoss EAP 服务器中:
/subsystem=elytron/credential-store=STORE_NAME:add(location="path/to/store_file",credential-reference={clear-text=STORE_PASSWORD})
/subsystem=elytron/credential-store=STORE_NAME:add(location="path/to/store_file",credential-reference={clear-text=STORE_PASSWORD})
例如:
/subsystem=elytron/credential-store=my_store:add(location="../cred_stores/my_store.jceks",credential-reference={clear-text=supersecretstorepassword})
/subsystem=elytron/credential-store=my_store:add(location="../cred_stores/my_store.jceks",credential-reference={clear-text=supersecretstorepassword})
在将凭据存储添加到 JBoss EAP 配置后,您可以使用 credentials -reference
属性 引用凭据存储中存储的密码或敏感字符串。
如需更多信息,请使用 EAP_HOME/bin/elytron-tool.sh credential-store --help
命令获取可用选项的详细列表。
3.1.9.1. 使用 WildFly Elytron 工具生成掩码加密字符串 复制链接链接已复制到粘贴板!
您可以使用 WildFly Elytron 工具生成兼容 PicketBox 的 MASK 加密
字符串,以将纯文本密码用于凭证存储。
要生成屏蔽的字符串,请使用以下命令并为 salt 和迭代计数提供值:
EAP_HOME/bin/elytron-tool.sh mask --salt SALT --iteration ITERATION_COUNT --secret PASSWORD
$ EAP_HOME/bin/elytron-tool.sh mask --salt SALT --iteration ITERATION_COUNT --secret PASSWORD
例如:
EAP_HOME/bin/elytron-tool.sh mask --salt 12345678 --iteration 123 --secret supersecretstorepassword
$ EAP_HOME/bin/elytron-tool.sh mask --salt 12345678 --iteration 123 --secret supersecretstorepassword
MASK-8VzWsSNwBaR676g8ujiIDdFKwSjOBHCHgnKf17nun3v;12345678;123
如果您不想在命令中提供 secret,可以省略该参数,系统会提示您使用标准输入手动输入 secret。
如需更多信息,请使用 EAP_HOME/bin/elytron-tool.sh mask --help
命令获取可用选项的详细列表。
3.1.9.2. 使用 WildFly Elytron 工具将密码 Vault 转换为凭证存储 复制链接链接已复制到粘贴板!
您可以使用 WildFly Elytron 工具将密码库转换为凭据存储。若要将密码库转换为凭据存储,您需要在初始化密码库时使用密码库的值。
在转换密码库时,新凭据存储中的别名根据等同的密码密码库块和属性名称命名: VAULT_BLOCK :: ATTRIBUTE_NAME
.
转换单密码 Vault
使用以下命令,将单个密码库转换为凭证存储:
EAP_HOME/bin/elytron-tool.sh vault --keystore "path/to/vault_file" --keystore-password VAULT_PASSWORD --enc-dir "path/to/vault_directory" --salt SALT --iteration ITERATION_COUNT --alias VAULT_ALIAS
$ EAP_HOME/bin/elytron-tool.sh vault --keystore "path/to/vault_file" --keystore-password VAULT_PASSWORD --enc-dir "path/to/vault_directory" --salt SALT --iteration ITERATION_COUNT --alias VAULT_ALIAS
例如,您还可以使用 --location
参数指定新凭证存储的文件名和位置:
EAP_HOME/bin/elytron-tool.sh vault --keystore ../vaults/vault.keystore --keystore-password vault22 --enc-dir ../vaults/ --salt 1234abcd --iteration 120 --alias my_vault --location ../cred_stores/my_vault_converted.cred_store
$ EAP_HOME/bin/elytron-tool.sh vault --keystore ../vaults/vault.keystore --keystore-password vault22 --enc-dir ../vaults/ --salt 1234abcd --iteration 120 --alias my_vault --location ../cred_stores/my_vault_converted.cred_store
您还可以使用 --summary
参数打印用于转换的管理 CLI 命令的摘要。请注意,即使使用了纯文本密码,也会在摘要输出中屏蔽。除非在 命令中指定,否则使用默认的 SALT
和 ITERATION
值。
批量转换多个密码 Vault
批量转换多个密码库:
以以下格式将您要转换的 vault 详情放在描述文件中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用上一步中的描述文件运行批量转换命令:
EAP_HOME/bin/elytron-tool.sh vault --bulk-convert vaultdescriptions.txt
$ EAP_HOME/bin/elytron-tool.sh vault --bulk-convert vaultdescriptions.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请使用 EAP_HOME/bin/elytron-tool.sh vault --help
命令获取可用选项的详细列表。
3.1.10. 在 Elytron 客户端中使用凭证存储 复制链接链接已复制到粘贴板!
连接 JBoss EAP 的客户端(如 EJB)可以使用 Elytron 客户端进行身份验证。无法访问正在运行的 JBoss EAP 服务器的用户可以使用 WildFly Elytron 工具创建和修改凭据存储,然后客户端可以使用 Elytron 客户端访问凭据存储内的敏感字符串。
以下示例演示了如何在 Elytron 客户端配置文件中使用凭据存储。
使用凭证存储 的 custom-config.xml
示例