2013-06-17 1 views
6

Я могу выполнить аутентификацию в Active Directory, если необходимо настроить только один сервер AD. Решение дается как Active Directory authentication through ssl as anonymous user.Отключение проверки SSL-сертификата для сервера Active Directory с использованием spring-ldap 1.3.1

Теперь я застреваю, когда есть несколько AD, работающих за балансировщиком нагрузки.

Поскольку балансировка нагрузки находится между ними, я получаю только имя хоста, а IP-адрес AD будет заменен именем хоста за балансировщиком нагрузки на основе доступности. Поэтому я не буду знать, какой сервер Active Directory будет использоваться для обработки моего запроса на аутентификацию. Таким образом, я не смогу сгенерировать сертификат заранее. Кроме того, я не могу получить IP-адреса AD, которые мой клиент использует для балансировки нагрузки (по соображениям безопасности). поэтому нет смысла генерировать jssecacert. Все, что мне нужно сделать, это отключить проверку сертификата. Я использую LdapTemplate класс (используя spring-ldap 1.3.1) для аутентификации пользователя. Моя весна Config выглядит следующим образом ...

<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate"> 
    <property name="contextSource" ref="contextSource" /> 
    <property name="ignorePartialResultException" value="yes" /> 
</bean> 
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> 
    <property name="url" value="ldaps://xxx.xxx.xxx.xxx:636" /> 
</bean> 

Метод AUTHENTICATE:

public boolean login(String username, String password) { 

    System.setProperty("javax.net.ssl.trustStore", 
      .../jssecacerts"); 

    boolean authenticate=false; 

    AndFilter filter = new AndFilter(); 
    filter.and(new EqualsFilter("xyz","xyz")); 
    filter.and(new EqualsFilter("xyz", xyz)); 

    authenticate = this.ldapTemplate.authenticate(base, filter.encode(), password); 
    return authenticate; 

    } 

Поскольку мы не должны иметь сертификат System.setProperty("javax.net.ssl.trustStore", .../jssecacerts"); не будет нужна.

Какие изменения мне необходимо сделать, чтобы отключить проверку сертификата.

Я довольно новичок в материалах LDAP. , Просьба помочь с соответствующим ответом.

+2

Это не совсем то, что касается LDAP, это скорее связано с TLS. – fge

+1

@fge Я согласен, когда SSL приходит на место. –

+1

Я тоже не вижу, что с этим OpenLDAP. Retagged to LDAP и SSL. – EJP

ответ

7

Ну, спасибо Даррену Хауге за предоставление сложного решения, которое не заботится о сертификате ssl. Переписывая решение здесь:

public static void trustSelfSignedSSL() { 
try { 
    SSLContext ctx = SSLContext.getInstance("TLS"); 
    X509TrustManager tm = new X509TrustManager() { 

     public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException { 
     } 

     public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException { 
     } 

     public X509Certificate[] getAcceptedIssuers() { 
      return null; 
     } 
    }; 
    ctx.init(null, new TrustManager[]{tm}, null); 
    SSLContext.setDefault(ctx); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

}

Все, что нам нужно создать служебный класс и поместить этот метод внутри этого. Вызовите этот метод, где вам нужно.

Любые комментарии по этому решению приветствуются.

Спасибо.

Смежные вопросы