在本教程中,我们将学习如何在WildFly数据源中加密数据源密码。
为了做到这一点,我们可以使用一个名为SecureIdentityLoginModule的类,它是PictteBox库的一部分。启动将要加密的文本作为参数传递的类名,如
以下示例:
$ cd $JBOSS_HOME/modules/system/layers/base/org/picketbox/main
$ java -classpath picketbox-5.0.3.Final.jar org.picketbox.datasource.security.SecureIdentityLoginModule postgres
Encoded password: 1d5bcec446b79907df8592078de921bc
现在记下上面的编码密码。
现在,在安全子系统中创建一个安全域,并将其命名为“ds-encrypted”。此安全域将基于 SecureIdentityLoginModule,该模块将用户名、加密密码和一些选项(如数据库池名称(作为托管连接工厂名称的一部分)作为输入。以下 CLI 命令集将创建 ds 加密的安全域:
/subsystem=security/security-domain=ds-encrypted:add(cache-type="default")
/subsystem=security/security-domain=ds-encrypted/authentication="classic":add()
/subsystem=security/security-domain=ds-encrypted/authentication="classic"/login-module="org.picketbox.datasource.security.SecureIdentityLoginModule":add(code="org.picketbox.datasource.security.SecureIdentityLoginModule",flag="required",module-
options={"username" => "postgres","password" =>"1d5bcec446b79907df8592078de921bc","managedConnectionFactoryName" =>"jboss.jca:service=LocalTxCM,name=java:/PostGreDS"})
生成的 XML(也可以直接包含在服务器配置中,前提是在此之前执行了服务器关闭):
<security-domain name="ds-encrypted" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="postgres"/>
<module-option name="password" value="1d5bcec446b79907df8592078de921bc"/>
<module-option name="managedConnectionFactoryName"
value="jboss.jca:service=LocalTxCM,name=java:/PostGreDS"/>
</login-module>
</authentication>
</security-domain>
现在是时候更新数据源配置,使用 ds 加密的安全域了。为此,您需要首先取消定义与安全域设置不兼容的用户名和密码属性:
batch
/subsystem=datasources/data-source=PostgrePool:undefine-attribute(name=user-name)
/subsystem=datasources/data-source=PostgrePool:undefine-attribute(name=password)
/subsystem=datasources/data-source=PostgrePool:write-attribute(name=security-domain,value=ds-encrypted)
run-batch
下面是生成的数据源配置:
<datasource jndi-name="java:/PostGreDS2" pool-name="PostgrePool2">
<connection-url>jdbc:postgresql://172.17.0.2/postgres</connection-url>
<driver>postgres</driver>
<security>
<security-domain>ds-encrypted</security-domain>
</security>
</datasource>
您应该重新加载配置,以便看到上述更改得到反映。接下来,您可以从管理控制台或 CLI 验证连接池是否能够连接到数据库。例:
/subsystem=datasources/data-source=PostgrePool:test-connection-in-pool
{
"outcome" => "success",
"result" => [true]
}