Keystore、httpclient、およびhttps:誰かがこのコードを私に説明できますか?
-
02-10-2019 - |
質問
何が起こっているのか理解しようとしています このコード.
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」を使用して、入力ストリーム(私たちが作成したばかりの空のファイルです)からキーストアデータをロードします。単にロードしてみませんか null
inputstreamパラメーターとして、および空の文字列としてパスワードフィールドとして?
そして、この空のキーストアがSSLSocketFactoryコンストラクターに渡されているときに何が起こっているのでしょうか?そのような操作の結果は何ですか?
または - これは単に実際のアプリケーションで、既存のキーストアファイル /パスワードに実際に参照を入れる必要がある例ですか?
解決
または - これは単に実際のアプリケーションで、既存のキーストアファイル /パスワードに実際に参照を入れる必要がある例ですか?
それは本当にそのように見えます。ありません "my.keystore"
httpclient 4.0.1のバイナリまたはソース分布のいずれかで配布されたファイル。これを実行すると、実際のキーストアが作成されます。どちらかを使用できます keytool また portecle.
この例では、このインスタンスのためにJVMがデフォルトで使用しているもの($ java_home/jre/lib/cacerts)よりも異なる信頼ストアを使用する方法を示しています。 DefaultHttpClient
. 。これは、SSLサイトが自分の社内で署名された証明書を使用している場合に役立ちます 証明する機関. 。 SSL接続は、サーバー証明書の署名者が認識されている場合にのみ確立されます。ウィキペディアのエントリ TLS コンセプトに不慣れな場合は、まともな紹介です。
他のヒント
この例は、独自の信頼ストアをロードする方法を示しようとします。この例を機能させるには、現在のディレクトリに「my.keystore」というファイルが必要で、キーストアのパスワードは「nopassword」です。
ご注意ください new File("my.keystore")
必ずしも新しいファイルを作成するわけではありません。パスを指すファイルオブジェクトを作成するだけです。