我正在尝试在 Wildfly (8.2.1) 中配置安全域以绑定(bind)到我们的 Active Directory。我需要尝试找到一种方法来加密bindCredential密码。 我可以使用 Picketbox 很好地加密数据源密码。 我只能找到对 JBoss V6.x 或更早版本进行这种加密,并且所采用的方法似乎在 Wildfly 中不再存在。 有没有人这样做过并愿意分享如何实现它。
这是我的安全域:
<security-domain name="ADDomain" cache-type="default">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required" >
<module-option name="java.naming.provider.url" value="ldap://ad.mycompany.com:389/"/>
<module-option name="bindDN" value="cn=myuserid"/>
<module-option name="bindCredential" value="mypassword"/> <--- I want to encrypt this.
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.security.authentication" value="simple"/>
<module-option name="baseCtxDN" value="dc=mycompany,dc=com"/>
<module-option name="baseFilter" value="(uid={0})"/>
<module-option name="rolesCtxDN" value="dc=mycompany,dc=com"/>
<module-option name="roleFilter" value="(uniqueMember={1})"/>
<module-option name="roleAttributeID" value="cn"/>
<module-option name="roleNameAttributeID" value="cn"/>
<module-option name="roleRecursion" value="0"/>
<module-option name="throwValidateError" value="true"/>
<module-option name="java.naming.referral" value="follow"/>
<module-option name="referralUserAttributeIDToCheck" value="uniqueMember"/>
</login-module>
</authentication>
</security-domain>
最佳答案
使用安全库。您可以找到chapter about Password Vaults在 JBoss EAP 文档中 - WildFly 的配置应该相同。
一般来说,您需要执行以下步骤。
- 使用 secret key 创建 JCEKS keystore
keytool -genseckey -alias vault -storetype jceks -keyalg AES -keysize 128 \
-storepass vault22 -keypass vault22 \
-dname "CN=vault, O=ACME, C=CZ" \
-keystore /path/to/vault.keystore
- 创建保管库目录,创建保管库本身并将您的密码放入其中
mkdir /path/to/vault-data-dir
${JBOSS_HOME}/bin/vault.sh -a passa -b LdapLogin \
-e /path/to/vault-data-dir \
-i 22 -k /path/to/vault.keystore -p vault22 -s 87654321 -v vault \
-x mypassword
- 在 WildFly 中配置保管库:
${JBOSS_HOME}/bin/jboss-cli.sh \
-c '/core-service=vault:add(vault-options=[("KEYSTORE_URL" => "/path/to/vault.keystore"), ("KEYSTORE_PASSWORD" => "MASK-Ci5JS1kjxPX"), ("KEYSTORE_ALIAS" => "vault"), ("SALT" => "87654321"),("ITERATION_COUNT" => "22"), ("ENC_FILE_DIR" => "/path/to/vault-data-dir/")])'
- 在登录模块中使用保管密码
<module-option name="bindCredential" value="${VAULT::LdapLogin::passa::1}"/>
关于encryption - 如何在 Wildfly 中加密 bindCredential 密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32191742/