2013-06-17 14 views
6

Sono in grado di autenticarsi in Active Directory se è necessario configurare un solo server AD. La soluzione è data come Active Directory authentication through ssl as anonymous user da me.Disabilitazione della convalida del certificato SSL per il server Active Directory utilizzando spring-ldap 1.3.1

Ora sono bloccato quando sono presenti più annunci in esecuzione dietro Load Balancer.

Poiché Load Balancer è in mezzo, otterrò solo il nome host e l'IP di AD verrà sostituito con il nome host dietro Load Balancer in base alla disponibilità. Pertanto, non sarà in grado di sapere quale server Active Directory verrà utilizzato per elaborare la mia richiesta di autenticazione. Quindi, non sarò in grado di generare il certificato in anticipo. Inoltre, non riesco a ottenere gli IP delle AD che il mio cliente sta utilizzando per bilanciare il carico (per ragioni di sicurezza). quindi non ha senso generare jssecacert. Tutto quello che devo fare è disabilitare la convalida del certificato. Sto usando la classe LdapTemplate (usando spring-ldap 1.3.1) per autenticare l'utente. La mia primavera Config si presenta così ...

<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> 

Il metodo di autenticazione: ce ne sarà bisogno

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; 

    } 

Dal momento che non è necessario aver certificato System.setProperty("javax.net.ssl.trustStore", .../jssecacerts"); .

Quali modifiche devo apportare per disabilitare la convalida del certificato.

Sono piuttosto nuovo in roba LDAP. , Si prega di aiutare con una risposta appropriata.

+2

Questo non è proprio specifico per LDAP qui, è piuttosto correlato a TLS. – fge

+1

@fge Ya Sono d'accordo quando SSL entra in vigore. –

+1

Non vedo nemmeno che cosa abbia a che fare OpenLDAP. Ricodificato su LDAP e SSL. – EJP

risposta

7

Bene, grazie a Darren Hauge per aver fornito una soluzione difficile a cui non interessa il certificato SSL. Riscrivere la soluzione qui:

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(); 
} 

}

Tutti abbiamo bisogno di creare una classe di utilità e mettere questo metodo all'interno di quella. Chiama questo metodo ovunque ti serva.

Qualsiasi commento su questa soluzione è il benvenuto.

Grazie.

Problemi correlati