Android アプリで LDAP サーバーに接続しようとしていて、UnboundID SDK を使用しています。最近、非セキュア LDAP からセキュア LDAP に変更されたため、それに応じてアプリを変更する必要があります。検証する SSL 証明書ファイルが提供されました。here で説明されているように、ファイルを使用してキーストアを作成しました。アプリのアセット フォルダーにこのキーストア ファイルがあり、そこから取得しています。以下のコードは現在機能せず、例外をスローします。
LDAPException(resultCode=01 (接続エラー), errorMessage=('サーバーへの接続試行中にエラーが発生しました place.myserver.com:636: javax.net.ssl.SSLHandShakeException: java.security.cert.CertPathValidatorException: Trust anchor for認証パスが見つかりません
// 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 を使用するとすべてが機能します。