JBoss下配置数据源加密

一、JBoss下配置数据源时,如果密码直接暴露给了系统的操作员或者维护人员,显然就增加了数据库不安全的因素。

MySQL Datasource配置样例

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- ===================================================================== -->
  3. <!--                                                                       -->
  4. <!--  JBoss Server Configuration                                           -->
  5. <!--                                                                       -->
  6. <!-- ===================================================================== -->
  7. <!-- See http://www.jboss.org/community/wiki/Multiple1PC for information about local-tx-datasource -->
  8. <!-- $Id: mssql-ds.xml 97536 2009-12-08 14:05:07Z jesper.pedersen $ -->
  9. <!-- ======================================================================-->
  10. <!-- New ConnectionManager setup for Microsoft SQL Server 2005  driver     -->
  11. <!-- Further information about the Microsoft JDBC Driver version 1.1      -->
  12. <!-- can be found here:                                                   -->
  13. <!-- http://msdn2.microsoft.com/en-us/library/aa496082.aspx               -->
  14. <!-- ===================================================================== -->
  15. <datasources>
  16. <local-tx-datasource>
  17. <jndi-name>MSSQLDS</jndi-name>
  18. <connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase</connection-url>
  19. <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
  20. <user-name>admin</user-name>
  21. <password>password</password>
  22. <!-- sql to call when connection is created
  23. <new-connection-sql>some arbitrary sql</new-connection-sql>
  24. -->
  25. <!-- sql to call on an existing pooled connection when it is obtained from pool
  26. <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
  27. -->
  28. <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
  29. <metadata>
  30. <type-mapping>MS SQLSERVER2000</type-mapping>
  31. </metadata>
  32. </local-tx-datasource>
  33. </datasources>

不用担心,JBoss本身提供了对密码进行加密的工具org.jboss.resource.security.SecureIdentityLoginModule

可以在Windows下用如下命令拿到密码的加密字串:

  1. D:\JBoss\jboss-6.1.0.Final>java -cp client\jboss-logging.jar;lib\jbosssx.jar org.jboss.resource.security.SecureIdentityLoginModule password
  2. Encoded password: 5dfc52b51bd35553df8592078de921bc

二、拿到加密的密码后就可以进行加密的数据源配置了
1. 配置 MySQL Datasource

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- ===================================================================== -->
  3. <!--                                                                       -->
  4. <!--  JBoss Server Configuration                                           -->
  5. <!--                                                                       -->
  6. <!-- ===================================================================== -->
  7. <!-- See http://www.jboss.org/community/wiki/Multiple1PC for information about local-tx-datasource -->
  8. <!-- $Id: mssql-ds.xml 97536 2009-12-08 14:05:07Z jesper.pedersen $ -->
  9. <!-- ======================================================================-->
  10. <!-- New ConnectionManager setup for Microsoft SQL Server 2005  driver     -->
  11. <!-- Further information about the Microsoft JDBC Driver version 1.1      -->
  12. <!-- can be found here:                                                   -->
  13. <!-- http://msdn2.microsoft.com/en-us/library/aa496082.aspx               -->
  14. <!-- ===================================================================== -->
  15. <datasources>
  16. <local-tx-datasource>
  17. <jndi-name>MSSQLDS</jndi-name>
  18. <connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase</connection-url>
  19. <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
  20. <!-- REPLACED WITH security-domain BELOW
  21. <user-name>admin</user-name>
  22. <password>password</password>
  23. -->
  24. <security-domain>EncryptDBPassword</security-domain>
  25. <!-- sql to call when connection is created
  26. <new-connection-sql>some arbitrary sql</new-connection-sql>
  27. -->
  28. <!-- sql to call on an existing pooled connection when it is obtained from pool
  29. <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
  30. -->
  31. <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
  32. <metadata>
  33. <type-mapping>MS SQLSERVER2000</type-mapping>
  34. </metadata>
  35. </local-tx-datasource>
  36. </datasources>

2. 配置login-config.xml(一般放到 src\main\resources\META-INF 目录下)

  1. <?xml version=‘1.0‘?>
  2. <!DOCTYPE policy PUBLIC
  3. "-//JBoss//DTD JBOSS Security Config 3.0//EN"
  4. "http://www.jboss.org/j2ee/dtd/security_config.dtd">
  5. <policy>
  6. <!-- Example usage of the SecureIdentityLoginModule -->
  7. <application-policy name="EncryptedMySQLDbRealm">
  8. <authentication>
  9. <login-module code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
  10. <module-option name="username">admin</module-option>
  11. <module-option name="password">5dfc52b51bd35553df8592078de921bc</module-option>
  12. <module-option name="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=MSSQLDS</module-option>
  13. </login-module>
  14. </authentication>
  15. </application-policy>
  16. </policy>

3. 配置jboss-service.xml(一般放到 src\main\resources\META-INF 目录下。我是通过EJB实现DynamicLoginConfig,希望各位提供更便捷的方案)


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <server>
  3. <mbean code="org.jboss.security.auth.login.DynamicLoginConfig" name="jboss:service=Test.DynamicLoginConfig">
  4. <attribute name="AuthConfig">META-INF/login-config.xml</attribute>
  5. <!-- The service which supports dynamic processing of login-config.xml configurations. -->
  6. <depends optional-attribute-name="LoginConfigService">jboss.security:service=XMLLoginConfig</depends>
  7. <!-- Optionally specify the security mgr service to use when this service
  8. is stopped to flush the auth caches of the domains registered by this service. -->
  9. <depends optional-attribute-name="SecurityManagerService">jboss.security:service=JaasSecurityManager</depends>
  10. </mbean>
  11. </server>

三、最后给大家介绍一种解密JBoss加密工具加密的密码
1. 找到SecureIdentityLoginModule所在的包 D:\JBoss\jboss-6.1.0.Final\lib\jbosssx.jar
找到SecureIdentityLoginModule.class,反编译一下就全明白了
加密使用的是: private static String encode(String secret)
自然解密的到是:private static char[] decode(String secret)

注:推荐反编译工具 JDGUI

2. 在Eclipse下新建包 org.jboss.resource.security,新建SecureIdentityLoginModule.java 和PasswordDecoder.java

SecureIdentityLoginModule.java(这个类只是为了能让 PasswordDecoder 编译通过,没有实际意义)


  1. package org.jboss.resource.security;
  2. public class SecureIdentityLoginModule {
  3. private static String encode(String secret) {
  4. return secret;
  5. }
  6. private static char[] decode(String secret) {
  7. System.out.println("Input password: " + secret);
  8. return new char[] { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘ };
  9. }
  10. }

PasswordDecoder.java(利用反射调用SecureIdentityLoginModule 里 private static char[] decode(String secret) 方法)


  1. package org.jboss.resource.security;
  2. import java.lang.reflect.Method;
  3. /**
  4. * Decode the encoded password.
  5. *
  6. * @author 酒樽舞曲
  7. *
  8. */
  9. public class PasswordDecoder {
  10. public static void main(String args[]) throws Exception {
  11. Class<SecureIdentityLoginModule> cla = SecureIdentityLoginModule.class;
  12. Method m = cla.getDeclaredMethod("decode", String.class);
  13. m.setAccessible(true);
  14. Object obj = m.invoke(null, args[0]);
  15. char[] chars = (char[]) obj;
  16. System.out.println("Decoded password: " + new String(chars));
  17. }
  18. }

3. 将编译好的 PasswordDecoder.class 放到 D:\JBoss\jboss-6.1.0.Final\lib\jbosssx.jar 中 \org\jboss\resource\security\ 下 (做坏事前先备份)

4. 解密
在Windows下用如下命令拿到密文的解密字串:


  1. D:\JBoss\jboss-6.1.0.Final>java -cp client\jboss-logging.jar;lib\jbosssx.jar org.jboss.resource.security.PasswordDecoder 5dfc52b51bd35553df8592078de921bc
  2. Decoded password: password
时间: 2024-08-02 11:05:15

JBoss下配置数据源加密的相关文章

Tomcat环境下配置数据源

两种方式,图形化和字符型配置,图形化需要部署一个应用,字符型配置如下: 需要文件 mysql-connector-java-5.1.16-bin.jar Oracle需要classes12.jar文件拷贝到$CATALINA_HOME/lib下面. 在Tomcat的Server.xml,找到需要采用数据池的Context一段,加入Resource内容,配置内容如下:<Resource name="jdbc/TestJavaWeb" auth="Container&quo

Springmvc +JNDI 在Tomcat下 配置数据源(转)

一.             简介 jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用名称访问对象.目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性. 二.             tomcat配置jndi有三种方式. 第一种:单个应用独享数据源 在Tomcat的server.xml找到工程的Context节点,添加一个私有数据源 <

LINUX终端下配置WPA2加密无线网络

生成配置文件模版 wpa_passphrase <yourAPssid> <yourpassphrase> > /etc/wpa_supplicant/wpa_supplicant.conf 参考下面的配置将上面的配置补充完整 For WPA2-Personal ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=0 ap_scan=1 network={ ssid="my_network"

JBoss5.x下配置Log4j简记

最近在学习JBoss下配置Log4j,JBoss的各个版本的目录.JBoss和Log4j集成的文件名每次都有变化, 在JBoss5.x下配置了log4j.xml文件,但是配置没有生效.如果你在项目中没有指定使用的log4j的配置文件,最好使用JBoss自带的配置文件,文件名为jboss-log4j.xml.该文件在Jboss容器的目录为:${JBOSS_HOME}\server\default\conf下.下面就是基于log4j默认配置的一些基本修改和注释: <span style="fo

JBOSS数据源加密

1 引言 1.1 编写目的 加强安全管理规范,对用户密码加密. 2 Jboss数据源加密 2.1 生产加密串 1. 生产Jboss密码串 Jboss 服务器执行,生产目录 server 的上一级目录 /home/jboss/jboss-eap-4.3/jboss-as 2. 执行命令,生产加密串,同时修改对应的部署名称,黄色标注 [[email protected] jboss-as]$ java -cp lib/jboss-common.jar:lib/jboss-jmx.jar:server

jboss配置数据源

http://blog.csdn.net/jyy208/article/details/5820893 jboss使用xml文件配置数据源,在JBOSS_HOME/docs/examples/jca文件夹下可以找到各种数据库的数据源配置文件的实例,jboss数据源配置文件的文件名格式是:*-ds.xml,文件中的内容如下(mysql): [xhtml] view plaincopy <?xml version="1.0" encoding="UTF-8"?&g

hibernate 在tomcat7.X 下配置mysql数据源

先说一点题外话,LZ最近学习java web.今天刚看到hibernate,发现在hibernate配置数据源时网上的资料都太久远了,一般以tomcat 5 版本下的配置居多.而tomcat 7下的配置略有变化,新手找资料困难,可能会略受打击,故整理资料与大家共享,也可作备忘之用!若有不当之处,还请不吝赐教! 1.添加数据库驱动包mysql-connector-java-5.1.13-bin.jar加入到tomcat目录下的lib包中. 注意:网上几乎所有版本都说需要添加commons-dbcp

eclipse下jdbc数据源与连接池的配置及功能简介

今天在做四则运算网页版的时候遇到了一个困惑,由于需要把每个产生的式子存进 数据库,所以就需要很多次重复的加载驱动,建立连接等操作,这样一方面写程序不方便,加大了程序量,另一方面,还有导致数据库的性能急剧下降,那么怎么解决这个问题呢? 我所学到的方法就是通过JDBC数据源和连接池的方式来解决这个问题.利用DataSource来建立数据库的连接不需要加载JDBC驱动,也不需要DriverManager类,通过向一个JNDI服务器查询来得到DataSource对象,然后调用DataSource对象的g

1. 配置win7下odbc数据源找不到数据库驱动的问题

win7下ODBC数据源DB2的链接 直接在控制面板---管理工具----数据源(ODBC) 打开数据源配置,发现只有SQLServer的驱动,其他的都没有了. 解决方法是C:\Windows\SysWOW64在这个目录下找到:odbcad32.exe这个文件,双击打开. 里面有很多可用个数据源驱动,然后就可用添加连接DB2copy1的ODBC的数据源了.