WildFly 安全 - 加密配置文件

本文演示使用不同的方法加密 WildFly 的配置文件:

  • 使用 property 文件保存配置信息
  • 加密敏感配置属性
  • 使用 vault 加密敏感配置属性

使用 property 文件保存配置信息

WildFly 默认提供 property 替换的功能,配置文件( standalone.xml, domain.xml, host.xml)中如果使用 {your.property}, 则它转化成相对应的系统属性。基于此,我们可以通过使用 property 文件保存配置信息的方法来在一定程度上加密 WildFly 的配置文件。

示例.1 使用 property 文件保存 WildFly 绑定的 IP 地址

  • 在 WILDFLY_HOME 在创建 wildfly.properties 文件且添加如下内容
jboss.bind.address=10.0.0.1

10.0.0.1 为绑定的 IP 地址,Linux 下 ifconfig em1:1 10.0.0.1 netmask 255.255.255.0 可用于创建一个虚拟地址.

  • 启动 WildFly
$ ./bin/standalone.sh -P wildfly.properties
  • 测试

查看日志确保启动完成,通过 http://10.0.0.1:8080 访问 WildFly 欢迎页面.

示例.2 使用 property 文件保存数据库链接属性

  • 在 WILDFLY_HOME 在创建 mysql.properties 文件且添加如下内容
db.prod.conn.url=jdbc:mysql://10.0.0.1:3306/store
db.prod.uid=username
dp.prod.pwd=password

properties 属性 db.prod.conn.url, db.prod.uid, db.prod.pwd 分别指向 Mysql 数据库的 URL, 用户名, 密码

  • 配置 Mysql DataSource 如下
<subsystem xmlns="urn:jboss:domain:datasources:1.1">
    <datasources>
	<datasource jndi-name="java:jboss/MySqlDS" pool-name="MySqlDS">
		<connection-url>${db.prod.conn.url}</connection-url>
		<driver>mysql</driver>
		<security>
			<user-name>${db.prod.uid}</user-name>
			<password>${db.prod.pwd}</password>
		</security>
	</datasource>
	<drivers/>
    </datasources>
</subsystem>
  • 启动 WildFly
$ ./bin/standalone.sh -P mysql.properties
  • 测试

查看日志确保启动完成,使用 CLI 命令测试 MySqlDS 是否创建成功

加密敏感配置属性

通常我们可以使用加密算法(AES, RSA, Blowfish)来加密配置文件中的敏感配置属性,本处演示使用 therm hash 加密 DataSource 的配置属性。

示例.3 使用 therm hash 加密 DataSource 密码

  • 生成加密串
$ java -cp modules/system/layers/base/org/picketbox/main/picketbox-4.9.2.Final.jar org.picketbox.datasource.security.SecureIdentityLoginModule password
Encoded password: 5dfc52b51bd35553df8592078de921bc

5dfc52b51bd35553df8592078de921bc 即为生成的加密串

  • 创建 security-domain

使用 CLI 命令创建 security-domain encrypted-security-domain:

/subsystem=security/security-domain=encrypted-security-domain:add(cache-type=default)
/subsystem=security/security-domain=encrypted-security-domain/authentication=classic:add
/subsystem=security/security-domain=encrypted-security-domain/authentication=classic/login-module=DataSource:add(code=org.picketbox.datasource.security.SecureIdentityLoginModule, flag=required,module-options={username=username, password=5dfc52b51bd35553df8592078de921bc}

Note the password in CLI should match to above step generated string.

  • 创建 DataSource
<subsystem xmlns="urn:jboss:domain:datasources:1.1">
    <datasources>
        <datasource jndi-name="java:jboss/MySqlDS" pool-name="MySqlDS">
                <connection-url>jdbc:mysql://10.0.0.1:3306/store</connection-url>
                <driver>mysql</driver>
                <security>
                        <security-domain>encrypted-security-domain</security-domain>
                </security>
        </datasource>
        <drivers/>
    </datasources>
</subsystem>

使用 vault 加密敏感配置属性

// coming soon