Использование UnboundID SDK с файлом сертификата SSL для подключения к серверу LDAP в приложении Android

Я пытаюсь подключиться к серверу LDAP в своем приложении для Android и использую SDK UnboundID. Недавно было внесено изменение с незащищенного на защищенный LDAP, и я должен соответствующим образом изменить приложение. Мне дали файл сертификатов SSL для проверки. Я уже использовал этот файл для создания хранилища ключей, как описано здесь . У меня есть этот файл хранилища ключей в папке активов моего приложения, и я извлекаю из него. Приведенный ниже код в настоящее время не работает и выдает исключение :

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

5
задан Terry Gardner 10 August 2012 в 00:23
поделиться