2013-06-17 34 views
6

Tôi có thể xác thực Active Directory nếu chỉ cần cấu hình một máy chủ AD. Giải pháp được đưa ra là Active Directory authentication through ssl as anonymous user bởi tôi.Tắt xác thực chứng chỉ SSL cho máy chủ Active Directory bằng spring-ldap 1.3.1

Bây giờ tôi bị kẹt khi có nhiều AD chạy phía sau Trình cân bằng tải.

Vì Trình cân bằng tải nằm ở giữa, tôi sẽ chỉ nhận tên Máy chủ và IP của AD sẽ được thay thế bằng Tên máy chủ phía sau Trình cân bằng tải dựa trên tính khả dụng. Vì vậy, tôi sẽ không thể biết máy chủ Active Directory nào sẽ được sử dụng để xử lý yêu cầu xác thực của tôi. Vì vậy, tôi sẽ không thể tạo chứng chỉ trước. Ngoài ra, tôi không thể nhận được IP của ADs khách hàng của tôi đang sử dụng để cân bằng tải (vì lý do bảo mật). do đó không có điểm tạo ra jssecacert. Tất cả những gì tôi cần làm là tắt xác thực chứng chỉ. Tôi đang sử dụng LdapTemplate lớp (sử dụng spring-ldap 1.3.1) để xác thực người dùng. mùa xuân của tôi Config trông như thế này ...

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

Phương pháp xác thực:

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; 

    } 

Vì chúng ta không cần phải có giấy chứng nhận System.setProperty("javax.net.ssl.trustStore", .../jssecacerts"); sẽ không cần thiết.

Tôi cần thực hiện những thay đổi nào để vô hiệu xác thực chứng chỉ.

Tôi khá mới trong công cụ LDAP. , Vui lòng giúp đỡ với câu trả lời thích hợp.

+2

Đây không phải là thực sự LDAP cụ thể ở đây, điều này là khá liên quan đến TLS. – fge

+1

@fge Ya Tôi đồng ý khi SSL xuất hiện. –

+1

Tôi không thấy những gì OpenLDAP đã làm với nó hoặc. Được gắn thẻ lại vào LDAP và SSL. – EJP

Trả lời

7

Vâng, Cảm ơn Darren Hauge đã cung cấp một giải pháp khôn lanh mà sẽ không quan tâm đến chứng chỉ ssl. Viết lại các giải pháp ở đây:

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

}

Tất cả chúng ta cần phải tạo ra một lớp tiện ích và đưa phương pháp này bên trong đó. Gọi phương thức này bất cứ nơi nào bạn cần.

Bất kỳ nhận xét nào về giải pháp này đều được hoan nghênh.

Cảm ơn.

Các vấn đề liên quan