5

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 を使用するとすべてが機能します。

4

1 に答える 1

3

Trust all tr​​ust manager が安全でないことは事実です。これはテスト目的には便利ですが、悪意のある人物が自分用に生成した証明書を使用して自分のサーバーをセットアップし、それを使用して実際のサーバーになりすましたり、中間者として操作したりして、サーバーを傍受して警告を発する可能性があります。クライアントと実サーバー間の通信。より厳密なトラスト マネージャーを配置すると、クライアントは、偽のサーバーが提示する偽の証明書を拒否する必要があります。

残念ながら、この場合に使用しようとしているトラスト マネージャーは、サーバーが提示している証明書が気に入らないようです。すべてのトラスト マネージャーを信頼すると接続を確立できるため、サーバーには証明書があり、SSL 通信を実行できますが、その証明書にはトラスト マネージャーが気に入らない点があります。同じ信頼ストアを使用している場合、他の LDAP API でも同じ問題が発生するはずなので、LDAP SDK の問題ではないことはほぼ確実です。

結果を見ると、「証明書パスのトラストアンカーが見つかりません」というメッセージが表示されています。これは、サーバーが使用している証明書もその発行者の証明書もトラスト ストアで見つからなかったことを意味します。サーバー証明書 (またはその発行者のいずれかの証明書) を、使用しているトラスト ストアにインポートする必要があります。あなたがそれをやろうとしたように聞こえますが、それがうまくいかないので、それが行われた方法に何かが正しくないに違いありません. ディレクトリ サーバー管理者と協力して、サーバー構成に基づいて適切な証明書をインポートしようとしていることを確認することをお勧めします。

于 2012-08-10T08:32:45.137 に答える