11

HTTPS経由でWebサービスに接続しています。それを機能させるために必要だと思うことはすべて実行しましたが、最終的にはハンドシェイクに失敗します。

私は、新しいユーザーとして、「スパム保護」のために2つ以上のリンクを投稿できないことを知りました-たくさんのstackoverflowに感謝します...とにかくここにすべてのリンクが綴られたペーストビン投稿へのリンクがあります...私はここに「link#1」と書きます。これはこれらのリンクへの参照です:http://pastebin.com/y4zGNRC7

  • HttpClient(サービスURLのGET)を使用して同じ動作を確認し、実際にCXFプロキシを介してWebサービスを呼び出しました
  • キーストアとトラストストアの両方を設定しています-「コード内」の方法(リンク#1)とシステムプロパティの設定の両方を試しました-つまり、System.setProperty( "javax.net.ssl.keyStore"、 "mykeystore.jks" );
  • SSLデバッグがオンになっています(javax.net.debug = all)
  • SSLデバッグは、キーストアとトラストストアの両方の内容をぼかします(つまり、Javaが「それらについて知っている」ように見えます)-link#2
  • クライアント/サーバー通信が行われているようですが、何らかの理由でクラッシュしますlink#3
  • ブラウザ(Chrome)とopenssl s_clientの両方でクライアントとCA証明書を使用して、サーバーに正常に接続しました
  • wiresharkは、たとえばChrome(link#5)よりもjava(link#4)からのクライアント/サーバートークが少ないことを示しています。

もう1つの奇妙なことは、キーストアを設定したときと設定しないときで同じ動作が発生するように見えることです(唯一の違いは、キーストアの内容がコンソールに出力されることですが、それだけです)。

問題をグーグルで調べてみたところ、stackoverflowで同様の投稿が多数見られましたが、何も役に立ちませんでした。プロトコルバージョン(「TLSv1」、「SSLv3」、さらには奇妙なv2 Hello)を変更してみました。助けていただければ幸いです-私が見落としていたかもしれないいくつかの基本的なことがあるかもしれません...私はここで必死になっています...ありがとう

PS私はFedoraCore15(64ビット)でjava 1.6update30を実行しています

4

3 に答える 3

5

問題は、キーストアとトラストストアが設定されていても、Javaがクライアント証明書をサーバーに送信しないことを決定したことでした。この理由は、サーバーがRootCA機関によって署名された証明書を要求したが、クライアント証明書はSubCA機関(RootCAによって発行された)によって署名されているという事実でした。

元々、キーストアにはクライアント証明書とトラストストアのSubCA証明書のみが含まれていました。次に、SubCA証明書もキーストアに追加しようとしましたが、Javaはそれを無視しました。

したがって、これはハンシェイクの失敗の謎を解決しますが、私の問題は解決しません。

そのために別の質問を作成しました...ため息:-( SSLハンドシェイク中にJavaがクライアント証明書を送信しないのはなぜですか?

于 2012-02-15T18:35:37.727 に答える
4

CAが含まれていないトラストストアが最も可能性の高い問題だと思います。Javaを使用して、次のような方法keytoolでサイトの証明書をファイルにインポートできます。cacerts

keytool -keystore pathtocacerts -import -trustcacerts -v -alias aliasName -file root.crt

デフォルトのcacertsキーストアパスワードはですchangeitcacertsファイルは通常、jre/lib/securityディレクトリの下にあります。

于 2012-02-12T20:48:56.207 に答える
2

十分な情報を提供していませんが、クライアントのトラストストアが適切に構成されていないと思います。トラストストアには、他の証明書に署名するために使用される信頼できる証明書が含まれており、サーバーおよびクライアントの証明書チェーンのルート証明書が含まれている必要があります。クライアントキーストアには、クライアントSSL証明書と秘密キーが含まれています。

于 2012-02-12T19:56:11.880 に答える