2012-08-09 3 views
4

Android 앱에서 LDAP 서버에 연결하려고하고 UnboundID SDK를 사용하고 있습니다. 최근에 비보안 LDAP에서 보안 LDAP로 변경되었으므로 그에 따라 앱을 변경해야합니다. 유효성을 검사 할 SSL 인증서 파일이 제공되었습니다. 나는 이미 파일을 사용하여 here과 같이 키 저장소를 만들었습니다. 나는이 키 스토어 파일을 내 앱의 assets 폴더에 가지고 있는데, 그걸 가져오고있다. 아래 코드는 현재 작동하지 않으며 예외를 throw합니다.SSL 인증서 파일과 함께 UnboundID SDK를 사용하여 Android 앱의 LDAP 서버에 연결

LDAPException (resultCode = 01 (연결 오류), errorMessage = (''place.myserver.com:636 : javax 서버에 연결하는 동안 오류가 발생했습니다. net.ssl.SSLHandShakeException : java.security.cert.CertPathValidatorException은 : 인증 경로에 대한 신뢰 앵커는, 그러나 코드 세그먼트를

// code from above link 
AssetManager assetManager = getApplicationContext().getAssets(); 
InputStream keyStoreInputStream = assetManager.open("yourapp.store"); 
KeyStore trustStore = KeyStore.getInstance("BKS"); 
trustStore.load(keyStoreInputStream, "myPassword".toCharArray()); 
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); 
tmf.init(trustStore); 
// my code 
SSLUtil sslUtil = new SSLUtil(tmf.getTrustManagers()); 
LDAPConnection connection = new LDAPConnection(sslUtil.createSSLSocketFactory()); 
connection.connect("place.myserver.com", 636); 

를 찾을 수 없습니다

SSLUtil sslUtil = new SSLUtil(new TrustAllTrustManager()); 
LDAPConnection connection = new LDAPConnection(sslUtil.createSSLSocketFactory()); 
connection.connect("place.myserver.com", 636); 

않는 나는에 의해 통보되었지만 작업 (이것이 안전하지 않은 상향식) 정확히 내가 여기서 잘못하고있는 것이 무엇인지 확신 할 수 없으므로 도움이 될 것입니다. 또한, 내가 이것을 수행하려고 시도하는 것보다 더 좋은 방법이 있다면, 알려 주시기 바랍니다 :) 나머지 코드는 이미 작성되었으므로 UnboundID 라이브러리를 사용하고 싶습니다. 그뿐 아니라 TrustAllTrustManager를 사용하면 모든 것이 작동합니다.

답변

3

트러스트의 모든 트러스트 관리자가 안전하지 않은 것은 사실입니다. 테스트 목적으로는 편리하지만 악의적 인 사람이 자신이 생성 한 인증서로 자신의 서버를 설정하고 실제 서버를 가장하거나 중간에 사람으로 작동하고 모든 사람을 가로 채고 잠재적으로 경고하는 데 사용할 수 있습니다 클라이언트와 실제 서버 간의 통신 보다 엄격한 트러스트 관리자를 사용하면 클라이언트는 가짜 서버가 제공하는 가짜 인증서를 거부해야합니다.

그러나이 경우에 사용하려는 트러스트 관리자는 서버가 제시하는 인증서가 마음에 들지 않는 것처럼 보입니다. trust all trust manager를 사용하면 연결을 설정할 수 있기 때문에 서버에 인증서가 있고 SSL 통신을 수행 할 수 있지만 신뢰 관리자가 싫어하는 인증서에 대한 정보가 있습니다. 동일한 신탁 저장소를 사용하는 경우 다른 LDAP API에서도 동일한 문제가 발생하므로 거의 확실히 LDAP SDK의 문제는 아닙니다.

결과를 보면 "인증 경로를 찾을 수 없음"이라는 메시지가 표시됩니다. 이는 서버가 사용중인 인증서도 아니고 해당 발급자의 인증서도 신뢰 저장소에서 발견되지 않았 음을 의미합니다. 사용중인 트러스트 스토어로 서버 인증서 (또는 발급자 중 하나의 인증서)를 가져와야합니다. 당신이 그 일을 시도한 것처럼 들리지만 작동하지 않으므로 그 일이 끝나면 뭔가 옳지 않아야합니다. 디렉터리 구성 관리자를 사용하여 서버 구성을 기반으로 올바른 인증서를 가져 오도록하십시오.