如何在 jndi 中启用 ldap over ssl

Posted

技术标签:

【中文标题】如何在 jndi 中启用 ldap over ssl【英文标题】:how to enable ldap over ssl in jndi 【发布时间】:2013-08-18 06:44:24 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何在 jndi 中启用 ldap over ssl的主要内容,如果未能解决你的问题,请参考以下文章

6-java安全基础——JNDI和LDAP利用

6-java安全基础——JNDI和LDAP利用

如何在 Coherence 12.2.1 中启用缓存服务器 JNDI 查找支持?

如何通过 LDAP over TLS 对 Active Directory 进行身份验证?

如何在 LDAP ODSEE 中查看帐户是不是启用/禁用、锁定/解锁

java - 如何使用给定的LdapContext检查ldap中的用户密码?