私は現在 SSL の水域をテストしており、SSL のことは初めてです。調査の一環として、Java 空間で SSL の 2 つの異なる実装に出くわしました。
まず、私の要件を述べさせてください。これは非常に単純です。必要なのは、https を使用して URL にデータを送信するプロセスだけです。
2 つのソリューションのうち、最初のソリューションは純粋な Java 実装 (コア Java クラスのみを使用) であり、もう 1 つのソリューションは Apache HTTPClient を使用して http.
最初に、テストの一環として、悪名高い「要求されたターゲットへの有効な証明書パスが見つかりません」という例外が発生しました。これは、(サーバーから受信した) 証明書が Java キーストアの一部ではない場合に発生すると考えました。証明書を Java キー ストアに追加すると、アプリケーションはどちらの場合も正常に動作します。しかし、HTTPClient を使用していると、SSLSocketFactory が使用されていることに気付きました。
次のコードで HttpClient をテストしたところ、
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(target);
postMethod.setQueryString("someQueryString");
try {
httpClient.executeMethod(postMethod);
System.out.println("Response code: " + postMethod.getStatusLine());
BufferedReader in = new BufferedReader (new InputStreamReader(postMethod.getResponseBodyAsStream()));
String temp;
while ((temp = in.readLine()) != null){
response += temp + "\n";
}
temp = null;
in.close ();
System.out.println("Server response:\n'" + response + "'");
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
postMethod.releaseConnection();
}
それは正常に機能したので、SSLSocketFactory 実装の使用方法がわかりませんか? キー ストアへの証明書の追加を自動化したい場合に、これは便利だと当初は考えていました。私はその分析で正しいですか?
私の分析が正しい場合、どの実装が優れていますか?
- 証明書を手動でインストールする方が良いですか? このアプローチの短所は何ですか?証明書の有効期限は切れますか?その場合、新しい証明書を再度インストールする必要がありますか?
- または、SSLSocketFactory を使用して、キー ストアの追加機能全体を自動化する必要がありますか?
ご意見をお待ちしております。ありがとうございました。