使用已安装的java密钥库证书连接到ldap

时间:2018-03-01 15:17:00

标签: java ssl ldap

我认为这个问题可能已经在某些地方得到了回答,但到目前为止我找不到任何解决方案。我的问题是,我想连接到LDAP并从ldap目录中找到一个用户,但问题是,它是一个安全的LDAP,所以我必须通过ldap服务器验证我是谁,我是一个证书。所以,我使用以下命令安装了该证书

keytool -importcert -file D:\KSTLMRADD01.dev.chartercom.com.cer -keystore cacerts -alias KSTLMRADD01.dev.chartercom.com.cer

所以使用 system.setproperty 我正在设置 javax.net.ssl.truststore 位置密钥库密码,因为我在java密钥库中有大约100个证书,在建立连接时无法使用相应的证书,请看下面的代码,如果有任何错误或建议请告诉我。任何帮助都会非常充实。

public class TestLdap{
public static void main(String[] args){
System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files\\Java\\jdk1.8.0_152\\jre\\lib\\security\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");


    try {
        // use the service user to authenticate
        Hashtable<String, Object> serviceEnv = new Hashtable<String, Object>();
        serviceEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        serviceEnv.put(Context.PROVIDER_URL, ldapUrl);
        serviceEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
        serviceEnv.put(Context.SECURITY_PROTOCOL, "ssl");
        serviceEnv.put(Context.SECURITY_PRINCIPAL, serviceUserDN);
        serviceEnv.put(Context.SECURITY_CREDENTIALS, serviceUserPassword);
        LdapContext ctx = new InitialLdapContext(environment, null);
        ctx.setRequestControls(null);
        DirContect context = new InitialDirContext(environment);NamingEnumeration<?> namingEnum = ctx.search("ou=service_accounts,dc=com", "(objectclass=user)", getSimpleSearchControls());
while (namingEnum.hasMore ()) {
    SearchResult result = (SearchResult) namingEnum.next ();    
    Attributes attrs = result.getAttributes ();
    System.out.println(attrs.get("sn"));

}
namingEnum.close();
ctx.close();
}}

所以我尝试了DirContext和LdapContext,但两者都不适合我。

1 个答案:

答案 0 :(得分:1)

通过在代码中设置以下两行,我可以信任那些证书。

System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files\\Java\\jdk1.8.0_152\\jre\\lib\\security\\cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");