Tag Archives: ldaps

Java 连接 ldaps 的简单代码

前面一篇文章写到了java连接ldap的问题,其实java连接ldaps也不是很难,多出了一步而已。

请参考本站文章获取SSL证书: http://php-yhjhoo.rhcloud.com/?p=569

代码如下package yhjhoo;


import static org.junit.Assert.*;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.InitialDirContext;

import org.junit.Test;

public class LdapTest {

	@Test
	public void testLdap(){
		LdapTest test = new LdapTest();
		assertTrue(test._authLdap("domain\\admin, "secret"));
	}
	
	private boolean _authLdap(String userName, String password){
		String ldapHost = "ldaps://localhost:10636";
		Properties props = new Properties();
		props.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.ldap.LdapCtxFactory");

		props.put(Context.SECURITY_AUTHENTICATION, "simple"); // use simple
																// authentication
																// mechanism
		props.put(Context.SECURITY_PROTOCOL, "ssl");
		props.put(Context.SECURITY_PRINCIPAL, ""+userName);
		props.put(Context.SECURITY_CREDENTIALS, "" + password);
		props.put(Context.PROVIDER_URL, ldapHost);
		try {
//			DirContext ctx = new InitialDirContext(props);
			new InitialDirContext(props);
			return true;
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (Exception e){
			e.printStackTrace();
		}
		
		return false;
	}
}

连接windows AD的ldaps 时略有些不同,请参考http://support.microsoft.com/kb/321051http://support.microsoft.com/kb/321051

java获取ldaps 的证书(certs)

连接ldap或者windows AD时,使用普通的连接是不安全的。 怎么不安全呢?是因为连接没有加密咯!所以用ldaps就可以解决了。 在做ldaps连接之前要先获取ldap 服务器端的SSL 证书, 使用Firefox就可以解决这个问题。 首先打开Firefox,浏览https://localhost:10636 localhost 是ldap的域名     10636是ldaps 的端口, 一般默认为636 点击 I Understand the Risks 点击 Add Exception  ->  Get Certificate -> View ->  Export. 选择保存类型为 X.509 Certificate (DER). -> 保存在本地 ldaps.der 最后一步,导入到java的security 里面:
[java]# cd JAVA_HOME/lib/security
# keytool -import -file ldaps.der -keystore jssecacerts[/java]