如何在jndi中通过ssl启用ldap

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

我在solaris机器上有一个sun LDAP服务器,我的web应用程序可以通过389端口连接到LDAP。现在我想使用636端口通过SSL连接到LDAP。在我的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);

我做错了什么?请更正。

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