2013-06-17 7 views
6

का उपयोग कर सक्रिय निर्देशिका सर्वर के लिए SSL प्रमाणपत्र सत्यापन अक्षम करना मैं केवल एक एडी सर्वर को कॉन्फ़िगर करने की आवश्यकता होने पर सक्रिय निर्देशिका को प्रमाणित करने में सक्षम हूं। समाधान Active Directory authentication through ssl as anonymous user मेरे द्वारा दिया गया है।स्प्रिंग-एलडीएपी 1.3.1

अब लोड हो गया है जब लोड बैलेंसर के पीछे कई एडी चल रहे हैं।

चूंकि लोड बैलेंसर बीच में है, इसलिए मुझे केवल होस्ट का नाम मिलेगा और उपलब्धता के आधार पर लोड बैलेंसर के पीछे होस्ट नाम के साथ एपी का आईपी बदल दिया जाएगा। इसलिए, मैं यह नहीं जान पाऊंगा कि प्रमाणीकरण के मेरे अनुरोध को संसाधित करने के लिए कौन सी सक्रिय निर्देशिका सर्वर का उपयोग किया जाएगा। इसलिए, मैं प्रमाण पत्र अग्रिम में उत्पन्न नहीं कर पाऊंगा। साथ ही, मुझे एडी के आईपी नहीं मिल सकते हैं जो मेरा क्लाइंट भार को संतुलित करने के लिए उपयोग कर रहा है (सुरक्षा कारणों से)। तो जेएससीएसीएआर उत्पन्न करने का कोई मतलब नहीं है। प्रमाण पत्र सत्यापन को अक्षम करने के लिए मुझे बस इतना करना है। मैं उपयोगकर्ता को प्रमाणीकृत करने के लिए LdapTemplate कक्षा (वसंत-एलडीएपी 1.3.1 का उपयोग करके) का उपयोग कर रहा हूं। मेरे वसंत कॉन्फ़िग इस तरह दिखता है ...

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

प्रमाणित विधि:

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"); है की जरूरत नहीं है की आवश्यकता नहीं होगी।

प्रमाणपत्र सत्यापन को अक्षम करने के लिए मुझे क्या परिवर्तन करने की आवश्यकता है।

मैं एलडीएपी सामान में काफी नया हूं। कृपया उचित उत्तर के साथ मदद करें।

+2

यह वास्तव में यहां एलडीएपी विशिष्ट नहीं है, यह टीएलएस से संबंधित है। – fge

+1

@fge Ya मैं एसएसएल जगह में आता है जब मैं सहमत हूँ। –

+1

मुझे नहीं पता कि OpenLDAP को इसके साथ क्या करना है। एलडीएपी और एसएसएल के लिए retagged। – EJP

उत्तर

7

ठीक है, एक मुश्किल समाधान प्रदान करने के लिए डैरेन हौज के लिए धन्यवाद जो एसएसएल प्रमाण पत्र की परवाह नहीं करेगा। यहाँ समाधान पुनर्लेखन:

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

}

हम सभी एक उपयोगिता वर्ग बना सकते हैं और है कि अंदर इस विधि डाल करने के लिए की जरूरत है। जहां चाहें इस विधि को कॉल करें।

इस समाधान पर कोई टिप्पणी स्वागत है।

धन्यवाद।

संबंधित मुद्दे

 संबंधित मुद्दे