JBoss6 Datasource 数据源密码 加密解密机制

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

MySQL Datasource配置样例











  
  
  
  
    
  


  
    MSSQLDS
    jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase
    com.microsoft.sqlserver.jdbc.SQLServerDriver
    admin
    password
        
    

    

    
    
        MS SQLSERVER2000
    
  




不用担心,JBoss本身提供了对密码进行加密的工具org.jboss.resource.security.SecureIdentityLoginModule
可以在Windows下用如下命令拿到密码的加密字串:
D:\JBoss\jboss-6.1.0.Final>java -cp client\jboss-logging.jar;lib\jbosssx.jar org.jboss.resource.security.SecureIdentityLoginModule password

Encoded password: 5dfc52b51bd35553df8592078de921bc




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











  
  
  
  
    
  


  
    MSSQLDS
    jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyDatabase
    com.microsoft.sqlserver.jdbc.SQLServerDriver
    
    
    EncryptDBPassword
    
    
    

    

    
    
       MS SQLSERVER2000
    
  




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




	
	
		
			
				admin
				5dfc52b51bd35553df8592078de921bc
				jboss.jca:service=LocalTxCM,name=MSSQLDS
			
		
	

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


	
		META-INF/login-config.xml
		
		jboss.security:service=XMLLoginConfig
		
		jboss.security:service=JaasSecurityManager
	




三、最后给大家介绍一种解密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.javaPasswordDecoder.java

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

public class SecureIdentityLoginModule {
	private static String encode(String secret) {
		return secret;
	}

	private static char[] decode(String secret) {
		System.out.println("Input password: " + secret);
		return new char[] { '0', '1', '2', '3', '4', '5' };
	}
}

PasswordDecoder.java(利用 反射调用SecureIdentityLoginModule 里 private static char[] decode(String secret) 方法)
package org.jboss.resource.security;

import java.lang.reflect.Method;

/**
 * Decode the encoded password.
 * 
 * @author 酒樽舞曲
 * 
 */
public class PasswordDecoder {
	public static void main(String args[]) throws Exception {
		Class cla = SecureIdentityLoginModule.class;
		Method m = cla.getDeclaredMethod("decode", String.class);
		m.setAccessible(true);

		Object obj = m.invoke(null, args[0]);
		char[] chars = (char[]) obj;

		System.out.println("Decoded password: " + new String(chars));
	}
}

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

4. 解密
在Windows下用如下命令拿到密文的解密字串:
D:\JBoss\jboss-6.1.0.Final>java -cp client\jboss-logging.jar;lib\jbosssx.jar org.jboss.resource.security.PasswordDecoder 5dfc52b51bd35553df8592078de921bc

Decoded password: password


转载请标明出处:http://blog.csdn.net/w709854369/article/details/7642503





你可能感兴趣的:(JBoss)