2

私はこのコードで何が起こっているのかを理解しようとしています。

KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());        
FileInputStream instream = new FileInputStream(new File("my.keystore")); 
try {
    trustStore.load(instream, "nopassword".toCharArray());
} finally {
    instream.close();
}

SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
Scheme sch = new Scheme("https", socketFactory, 443);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);

私の質問:

trustStore.load(instream, "nopassword".toCharArray());正確に何をしていますか?ドキュメントを読むと、load()任意の「nopassword」を使用して、入力ストリーム(作成したばかりの空のファイル)からKeyStoreデータが読み込まれます。nullInputStreamパラメータとしてロードし、パスワードフィールドとして空の文字列をロードしてみませんか?

そして、この空のKeyStoreがSSLSocketFactoryコンストラクターに渡されるとどうなりますか?そのような操作の結果は何ですか?

または-これは、実際のアプリケーションで既存のキーストアファイル/パスワードへの参照を実際に配置する必要がある単なる例ですか?

4

2 に答える 2

2

この例では、独自のトラスト ストアをロードする方法を示します。この例を機能させるには、現在のディレクトリに「my.keystore」というファイルが必要で、キーストアのパスワードは「nopassword」です。

new File("my.keystore")必ずしも新しいファイルを作成するとは限らないことに注意してください。パスを指す File オブジェクトを作成するだけです。

于 2010-04-30T00:11:52.303 に答える
1

または-これは、実際のアプリケーションで既存のキーストアファイル/パスワードへの参照を実際に配置する必要がある単なる例ですか?

それは本当にそのように見えます。"my.keystore"HttpClient4.0.1のバイナリディストリビューションまたはソースディストリビューションのいずれにもファイルは配布されていません。これを実行するには、実際のキーストアを作成します。keytoolまたはPortecleのいずれかを使用できます。

この例は、JVMがこのインスタンスに対してデフォルトで使用するトラストストア($ JAVA_HOME / jre / lib / security / cacerts)とは異なるトラストストアを利用する方法を示していますDefaultHttpClient。これは、SSLサイトが独自の社内認証局によって署名された証明書を使用している場合に役立ちます。SSL接続は、サーバー証明書の署名者が認識された場合にのみ確立されます。TLSに関するウィキペディアのエントリは、概念に慣れていない場合は適切な紹介です。

于 2010-04-30T00:21:52.747 に答える