如何在jndi中启用ldap over ssl

时间:2013-08-18 06:44:25

标签: ssl ldap solaris jndi

我在solaris机器上有一个sun LDAP服务器,我的Web应用程序可以通过389端口连接到LDAP。现在我想使用636端口连接到LDAP over SSL。在我的LDAP服务器中,我已经安装了证书。现在,我已使用LDAP服务器中的密钥导出证书,以便我可以将此证书与我的Web应用程序一起使用。在同一台机器上,我的glassfish服务器也已安装。我将证书复制到/ usr / java / jre / lib / security /文件夹中。现在,在我的Web应用程序中,我使用此代码通过sll连接到LDAP,但无法连接到LDAP。

 Hashtable ht = new Hashtable();
 ht.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
 ht.put(Context.PROVIDER_URL,"ldap://ldapserver:636");
 ht.put(Context.SECURITY_AUTHENTICATION, "EXTERNAL");
 // ht.put(Context.SECURITY_AUTHENTICATION, "simple");
 System.setProperty("javax.net.ssl.keyStore","/usr/java/jre/lib/security/cert");
 System.setProperty("javax.net.ssl.keyStorePassword",certpass);
 ht.put(Context.SECURITY_PRINCIPAL,binddn);
 // Specify SSL
 ht.put(Context.SECURITY_PROTOCOL, "ssl");
 ht.put(Context.SECURITY_CREDENTIALS,bindpass);

我做错了什么?请纠正我。

1 个答案:

答案 0 :(得分:0)

如果您在LDAP服务器上安装的SSL / TLS证书是自签名证书,或者您的JVM的lib/security/cacerts信任库中不存在其签名者证书,则需要将证书导入信任库并指定信任库的位置是设置系统属性javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword。您似乎已将证书导入JKS文件(假设它是JKS格式)。您需要将javax.net.ssl.trustStore指向该文件并指定其密码,以便JVM可以访问它。