1

次のコードに出くわしました(継承しました):

String ksType = KeyStore.getDefaultType();
KeyStore ks   = KeyStore.getInstance(ksType);
ks.load(null, null);
SSLSocketFactory sockFactory = new SSLSocketFactory(ks);

メソッドの呼び出しに混乱していますKeyStore load。このコードはどのキーストアを使用していますか? 私は KeyStore のドキュメントを調べましたが、これが正当であると言える限りでは.

ただし、コードは機能しません。アプリは、サーバーが接続する URL を受け取ります。javax.net.ssl.SSLPeerUnverifiedException: No peer certificateサイトに有効な SSL 証明書がある場合でも、アプリはエラーをスローします。

デバッグ、次の行を追加しました。

Log.v(TAG,"ks has " + String.valueOf(ks.size()) + " entries.");

キーストア内のアイテムの数を取得します。ゼロを返します。

KeyStores についてひどく誤解しているように感じます。

このコードは機能しますか? それは何をすることになっていますか?

EDIT コードが(Webサイトを認証するために)どのように使用されているかに基づいて、キーストアではなくトラストストアとして使用されていると思います。SSLSocketFactoryから使用されているorg.apache.http.conn.ssl。アプリのリソースを見ると、アプリにキーストア ファイルが含まれていないようです。私には不可解です。

4

1 に答える 1

1

キーストアとして使用されている場合は機能する可能性がありますが、「null」になります。トラストストアとして使用されている場合は機能しません。呼び出されている SSLSocketFactory のコンストラクターを投稿できますか?

編集: SSL クライアントは、安全にするために空でないトラストストアを必要とします。ほとんどの場合、Java で提供されるもので十分です。

于 2012-11-13T22:34:44.823 に答える