通过ssl作为匿名用户进行Active Directory身份验证

时间:2013-06-13 10:16:03

标签: java spring active-directory openldap

我可以使用Spring-ldap为使用为ContextSource生命周期配置的用户验证Active Directory。我的Spring xml配置看起来像lilke:

<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
    <property name="contextSource" ref="contextSource" />
</bean>


<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
    <property name="url" value="ldap://xxx.xxx.xxx.xxx:389" />
    <property name="userDn" value="myName@xxx.xxx" />
    <property name="password" value="password" />

</bean>

用于验证用户身份的java代码是:

public boolean login(String username, String password) {
    AndFilter filter = new AndFilter();
    this.ldapTemplate.setIgnorePartialResultException(true); // Active Directory doesn’t transparently handle referrals. This fixes that.
    filter.and(new EqualsFilter("objectCategory","****"));
    filter.and(new EqualsFilter("objectClass","****"));
    filter.and(new EqualsFilter("sAMAccountName", username));
    return this.ldapTemplate.authenticate("OU=myBaseOu,DC=xyz,DC=def", filter.encode(), password);

    }

即使我没有在 contextSource bean中设置 userDn 密码属性,也可以使用Linux打开Ldap v3。

我需要的是配置这个xml,以便我可以作为匿名用户访问Active Directory(不设置userDn和密码)。

另外,我需要通过SSL验证用户身份。为此我用了

<property name="url" value="ldaps://xxx.xxx.xxx.xxx:636" /> 

但我有例外:

Exception in thread "main" org.springframework.ldap.CommunicationException: simple bind failed: 192.168.0.13:636; nested exception is javax.naming.CommunicationException: simple bind failed: 192.168.0.13:636 [Root exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]

在搜索时,我得到了解决方案,我需要指出存储证书的密钥库。在这里,我不知道在哪里(在java类或xml文件中)。

您的快速回复将不胜感激。 感谢。

2 个答案:

答案 0 :(得分:2)

我做了一些研究,发现其他应用程序有类似的问题。

  1. 确保已根据“通过SSL连接到LDAP或其他服务”说明将证书导入密钥库。
  2. 确保已将任何证书导入正确的密钥库;你可能有多个JDK。

答案 1 :(得分:1)

在我的SSL问题上对 DevZer0 的答案进行了一些补充。

只需按照此链接中的说明获取证书并将其放入jre \ lib \ security \文件夹。

http://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification-path-to-requested-target/