3

作業するSOAP WSが与えられました。クライアント スタブを作成できる wsdl ファイルを提供してくれました (cxf 内で wsdl2java ユーティリティを使用しました)。

そのwsdlで.keystoreファイルも提供されましたが、それをkeytoolに追加する方法を知っています(これは正しい方法ですか?)。

クライアントをテストするために実行するjunitテストを作成しましたが、常に

HTTP 転送エラー: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました: sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりません

この .keystore ファイルをどうするかについての簡単なガイドはどこにありますか?

ありがとう

4

3 に答える 3

4

このエラーは、トラストストアでサーバー証明書が見つからなかったことを意味します。.keystore ファイルの内容を調べて、サーバー証明書 (トラストストアで trustedEntry としてリストされている) が含まれているかどうかを確認します。はいの場合は、次のシステム プロパティを設定します (-D JVM パラメータまたは System.setProperty() を使用)。

javax.net.ssl.trustStore=<<your .keystore>>
javax.net.ssl.trustStorePassword=<<keystore password>>

これらのプロパティが設定されていない場合、デフォルトの場所からデフォルトのプロパティが取得されます。[$JAVA_HOME/lib/security/jssecacerts, $JAVA_HOME/lib/security/cacerts]

キーストア ファイルの内容を表示するには、次を使用します。

keytool -list -v -keystore file.keystore -storepass mypassword

SSL ハンドシェーク プロセスをデバッグして証明書を表示するには、VM パラメータ-Djavax.net.debug=allを設定します。

Web サービスが双方向 SSL を必要とする場合、クライアントはその ID を送信する必要があります (キーストアからピックアップ)。この場合、.keystore には、ハンドシェイク プロセス中にサーバーに送信される privateKeyEntry が含まれます。これを構成するには、JVMM プロパティー javax.net.ssl.keyStore および javax.net.ssl.keyStorePassword を設定して、キーストアを指すようにします。

于 2013-06-27T15:56:32.853 に答える
2

次は私のために働きます:

  1. アプリケーション サーバーの構成。アパッチ トムキャット/7.0.52server.xml : https コネクタでclientAuth="true"を設定します。

  2. アプリケーション サーバーの構成。アパッチ トムキャット/7.0.52tomcat-users.xml :証明書 (サブジェクト) に表示されるユーザーの DN でユーザーをクレートします。

  3. Web サービスJAX-WS Web サービス Eclipse チュートリアル. ありがとうアーピット!デプロイメント記述子 (web.xml) にセキュリティ制約を追加します。

  4. クライアント。apache-cxf maven プラグインで生成されます。

  5. メインクラス:

    HelloWorldImplService helloWorldImplService = new HelloWorldImplService();
    HelloWorld helloWorld = helloWorldImplService.getHelloWorldImplPort();
    SayHelloWorld parameters = new SayHelloWorld();
    parameters.setArg0("World");
    SayHelloWorldResponse helloWorldResponse = helloWorld.sayHelloWorld(parameters);
    System.out.println(helloWorldResponse.getReturn());
    
  6. クライアント JVM オプション:

    -Djavax.net.ssl.trustStore=/xxxx/cacerts.jks -Djavax.net.ssl.trustStorePassword=xxxx -Djavax.net.ssl.keyStore=/xxx/user.jks -Djavax.net.ssl.keyStorePassword=xxxx
    

ここで見ることができます:証明書認証を使用した Java SOAP クライアント

于 2014-06-30T09:24:48.563 に答える
0

HTTPS SSL ハンドシェイクに必要なキーストアと証明書のインポートを理解するのに役立つ優れたブログ:

http://ruchirawageesha.blogspot.in/2010/07/how-to-create-clientserver-keystores.html

Web サービスを呼び出すために、クライアント キーストアを正しくセットアップするのに役立つことを願っています。幸運を!

于 2013-06-27T15:41:55.233 に答える