1

wsit を使用して、セキュリティが強化された Web サービス クライアントを作成しています。いくつかの展開仕様を正当化するために、キーストアの読み込みにコールバック メカニズムを使用する必要がありました。

<wsp:Policy wsu:Id="WSPortBindingPolicy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
    <wsp:ExactlyOne>
        <wsp:All>
            <!-- define a keystore and truststore with the ith certificates for ssl encrypted connections -->
            <sc:KeyStore wspp:visibility="private" callbackHandler="webservice.auth.KeyStoreHandler" />
            <sc:TrustStore wspp:visibility="private" callbackHandler="webservice.auth.KeyStoreHandler"/>

私のログファイルによると、KeyStore ハンドラーは正しくインスタンス化されますが、キーストアの作成のために呼び出されることはありません。つまり、コールバック メソッド 'handle(Callback[] callbacks)' は呼び出されません。問題をよりよく分析するためのヒントを誰かに教えてください。

インスタンス化のコール スタックは、ポリシーが正しく解析され、設定されていることを示します。ただし、SSL ハンドシェイク中はコールバックはトリガーされません。

INFO: WSP5018: WSIT-Konfiguration wurde aus Datei geladen: jar:file:/C:/app.jar!/META-INF/wsit-client.xml.
11:22:08,753 DEBUG [AWT-EventQueue-0] webservice.auth.KeyStoreHandler () : instantiate KeyStoreHandlerjava.lang.Exception
at webservice.auth.KeyStoreHandler.<init>(KeyStoreHandler.java:60)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sun.xml.wss.impl.misc.DefaultCallbackHandler.initNewInstances(DefaultCallbackHandler.java:2022)
at com.sun.xml.wss.impl.misc.DefaultCallbackHandler.<init>(DefaultCallbackHandler.java:344)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.configureClientHandler(SecurityClientTube.java:823)
at com.sun.xml.wss.jaxws.impl.SecurityClientTube.<init>(SecurityClientTube.java:180)
at com.sun.xml.wss.provider.wsit.SecurityTubeFactory.createTube(SecurityTubeFactory.java:275)
at com.sun.xml.ws.assembler.TubeCreator.createTube(TubeCreator.java:85)
at com.sun.xml.ws.assembler.MetroTubelineAssembler.createClient(MetroTubelineAssembler.java:137)
at com.sun.xml.ws.client.Stub.createPipeline(Stub.java:328)
at com.sun.xml.ws.client.Stub.<init>(Stub.java:297)
at com.sun.xml.ws.client.Stub.<init>(Stub.java:239)
at com.sun.xml.ws.client.Stub.<init>(Stub.java:254)
at com.sun.xml.ws.client.sei.SEIStub.<init>(SEIStub.java:92)
at com.sun.xml.ws.client.WSServiceDelegate.getStubHandler(WSServiceDelegate.java:746)
at com.sun.xml.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:724)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:408)
at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:384)
at javax.xml.ws.Service.getPort(Service.java:175)
4

2 に答える 2

3

問題をよりよく分析するためのヒント:

  1. ロガーの Level.FINE を有効にすると、次のようなcom.sun.xml.wss.logging役立つメッセージが表示されます。DefaultCallbackHandler

  2. メソッドにブレークポイントを設定しDefaultCallbackHandler#getKeyStoreUsingCallback(Map runtimeProps)ますgetPrivateKey(Map runtimeProps, String alias)。私は彼らがまったく呼び出されていないと思います。SSLがまったく初期化されていない可能性がありますか?

  3. SSL をデバッグするには、システム プロパティを設定しますjavax.net.debug=ssl。次に、正確に何が起こるかを確認します。詳細については、 SSL/TLS 接続のデバッグを参照してください。

出力を提供していただければ、私たちがお手伝いできるかもしれません。

于 2013-06-23T15:40:26.747 に答える