Wildfly:加密数据库的密码和用户名

int*_*net 0 encryption wildfly

我想将Web应用程序移交给某些人,但是不应允许这些人使用某些工具访问数据库。使用webapplicaton,在后台数据库就可以了。

Wildfly具有使用以下代码的配置:

<xa-datasource jndi-name="java:jboss/datasources/ExampleXADS" pool-name="ExampleXADS">
       <driver>h2</driver>
       <xa-datasource-property name="URL">jdbc:h2:mem:test</xa-datasource-property>
       <xa-pool>
            <min-pool-size>10</min-pool-size>
            <max-pool-size>20</max-pool-size>
            <prefill>true</prefill>
       </xa-pool>
       <security>
            <user-name>sa</user-name>
            <password>sa</password>
       </security>
    </xa-datasource>
Run Code Online (Sandbox Code Playgroud)

如您所见,还有用户名和密码。如何排除/加密这些密码,所以只有管理员知道数据库的密码。整个应用程序服务器也是如此-还有用户和密码。我怎样才能做到这一点?

编辑:“客户”将获得整个应用程序,包括Web服务器配置。(Wilfly和.war文件)仅用于将软件密钥保存在数据库中。如果“客户”第一次启动Web应用程序,则会提示他,因此请输入许可证密钥。输入许可证密钥后,将调用Web服务。返回代码为“ false”或“ true”(密钥有效或密钥无效)我的第一个想法是将标志存储在数据库中。但是,如果用户有权访问数据库,则可以自己操作此标志。还有其他设置“软件密钥有效”标志的可能性,而不是将标志保存在数据库中。有任何想法吗?

mod*_*mod 5

您可以使用安全域来解决此问题,Wildfly可能会有一些特定的更改,但是对于JBoss 7.1.1,这是您需要做的。

  1. 在您的JBoss / Widlfy服务器中找到jboss-logging-3.1.0.GA.jar的位置。对于JBoss 7.1.1,它应该类似于-modules \ org \ jboss \ logging \ main \ jboss-logging-3.1.0.GA.jar

  2. 找到picketbox-4.0.7.Final.jar的位置

  3. 检查Picketbox Jar是否具有org.picketbox.datasource.security.SecureIdentityLoginModule类。

  4. 从JBoss服务器根文件夹运行以下命令来加密您的数据源连接密码

    java -cp modules \ org \ jboss \ logging \ main \ jboss-logging-3.1.0.GA.jar; modules \ org \ picketbox \ main \ picketbox-4.0.7.Final.jar org.picketbox.datasource.security。 SecureIdentityLoginModule密码XYZ

  5. 获取输出文本,并在standalone.xml中的元素下添加以下安全域:

                <security-domain name="encrypted-ds-WASM2" cache-type="default">
                    <authentication>
                        <login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
                            <module-option name="username" value="WASM2"/>
                            <module-option name="password" value="89471a19022f8af"/>
                            <module-option name="managedConnectionFactoryName" value="jboss.jca:service=LocalTxCM,name=MySqlDS_Pool"/>
                        </login-module>
                    </authentication>
                </security-domain>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 如下所示在数据源元素中使用此安全域:

                <datasource jta="false" jndi-name="java:jboss/jdbc/JNDIDS" pool-name="OFS1" enabled="true" use-ccm="false">
                    <connection-url>jdbc:oracle:thin:@x.x.x.x:1521:xxxx</connection-url>
                    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                    <driver>oracle</driver>
                    <security>
                        <security-domain>encrypted-ds-WASM2</security-domain>
                    </security>
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                        <background-validation-millis>1</background-validation-millis>
                    </validation>
                    <statement>
                        <prepared-statement-cache-size>0</prepared-statement-cache-size>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </datasource>
    
    Run Code Online (Sandbox Code Playgroud)

参考链接:http : //middlewaremagic.com/jboss/?p=1026

  • 毫无用处-用固定的密码加密,您可以从此处获得解密器(https://raw.githubusercontent.com/usefulfor/usefulfor/master/security/JBoss.java)。有一个[JBOSS的开放错误](https://issues.jboss.org/browse/JBAS-4460),它被标记为“ wont fix”,因为“ *“ encrypt the database”密码用于通过愚蠢的安全审核最终,某个地方会存在某种密码,因为系统需要解密该密码才能将其发送到数据库。相对有经验的程序员总是很容易破解该密码。*“ (3认同)