0

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

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

4

1 回答 1

0

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

于 2013-08-20T14:38:50.243 回答