1

私は現在 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 を使用して、キー ストアの追加機能全体を自動化する必要がありますか?

ご意見をお待ちしております。ありがとうございました。

4

2 に答える 2

1

Java 空間で SSL の 2 つの異なる実装に出くわしました。

いいえ、しませんでした。組み込みの JSSE と、Apache がそれを中心に構築したいくつかのものに出くわしました。たとえば、「要求されたターゲットへの有効な証明書パスが見つかりません」というメッセージは、JSSE、実際には JCE からのものです。

私が認識している JSSE 自体の他の唯一の実装は、IBM JVM にあります。

于 2011-08-23T00:36:58.450 に答える