2011-08-22 9 views
1

私は現在、SSLの水域をテストしており、SSLの新しいものです。私の研究の一環として、私はJava空間内でSSLの2つの異なる実装に出くわしました。私はどのようなSSL実装を行っていますか?

まず、私の要求は非常にシンプルですが、httpsを使用してURLにデータを送信するプロセスが必要です。

2つのソリューションのうち、最初のJava実装はコアJavaクラスのみを使用し、もう1つはApache HTTPClientを使用してhttpを実行します。

当初、私のテストの一部として、悪名高い「要求されたターゲットへの有効な証明書パスを見つけることができません」という例外が発生しました。この証明書は(サーバから受信した)証明書がJavaキーストア。 Javaキーストアに証明書を追加すると、アプリケーションはどちらの場合も正常に動作します。 しかし、私のHTTPClientの使用では、私はSSLSocketFactoryの使用に気付きました。私は、次のコードで

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(); 
     } 

をHttpClientをテストしたとき

それがうまく働いたので、私はのSSLSocketFactory実装の使用が何であるかわかりませんか?私は当初、鍵ストアへの証明書の追加を自動化したいときに便利だと考えました。私はその分析を正しくしていますか?

私の分析が正しい場合、どの実装が良いですか?

  • 証明書を手動でインストールする方がよいでしょうか?このアプローチの欠点は何ですか?証明書は期限切れになりますか?もしそうであれば、もう一度新しい証明書をインストールする必要がありますか?
  • SSLSocketFactoryを使用してキーストアの追加機能全体を自動化する必要がありますか?

あなたのご意見をいただければ幸いです。ありがとうございました。

答えて

2

どちらも実行しないでください。これには既存の解決策があります。

From the docs

当社 貢献パッケージで利用可能ないくつかのカスタムソケットファクトリがあります。彼らは そのアプリケーションの特定のニーズに テーラーにHTTPSプロトコルの動作を求める人のための良いスタートになります

  • EasySSLProtocolSocketFactoryはにターゲットサーバを許可するSSL 接続を作成するために使用することができ

    自己署名証明書で認証してください。

  • StrictSSLProtocolSocketFactoryは、必要に応じて攻撃のman-in-the-middleタイプのを防止するのに役立つ ために、ホスト名検証を行うことができますSSL 接続を作成するために使用することができます。

  • AuthSSLProtocolSocketFactoryを使用して、任意で 相互クライアント/サーバー認証を強制することができます。これはプロトコルソケットファクトリの最も柔軟な 実装です。 は、すべてではないにしてもほとんどのSSL認証の側面をカスタマイズすることができます。

+0

ええと、私が知る限り、SSLのカスタマイズは必要ありません。私がHTTPClientをそのまま使用しようとしたとき、唯一のエラーは「要求されたターゲットへの有効な証明書パスを見つけることができませんでした」でした。これはサーバー証明書をJava Key Storeの一部にすることで解決しました。だから、この実装は私のための最善の選択肢ですか? – Seagull

1

私は、JavaのスペースでSSLの二つの異なる実装に出くわしました。

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

私が知っているJSSE自体の他の実装は、IBM JVMだけです。

関連する問題