2013-08-18 30 views
0

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

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); 

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

回答

0

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