Обратный вызов хранилища ключей клиента wsit никогда не вызывался

Я использую wsit для создания клиента веб-сервиса с некоторыми улучшениями безопасности. Чтобы оправдать некоторые особенности развертывания, мне пришлось использовать механизм обратного вызова для загрузки хранилища ключей:

<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)

2 ответа

Некоторые подсказки, как лучше проанализировать проблему:

  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.

Если вы предоставите вывод, возможно, мы сможем вам помочь.

Чтобы оправдать некоторые особенности развертывания, мне пришлось использовать механизм обратного вызова для загрузки хранилища ключей.

Вы используете механизм обратного вызова хранилища ключей, чтобы избежать предоставления ключа / пароля хранилища ключей в виде открытого текста.

  1. Узнайте о выбранном вами механизме безопасности и о том, используется ли хранилище ключей на сервере / клиенте:

    Keystore используется на сервере для следующих механизмов безопасности:

    • Имя пользователя Auth. с симметричными ключами
    • Взаимные сертификаты.
    • SAML Auth. через SSL
    • Подтверждая сертификат.
    • SAML Отправитель Ваучер с Cert.
    • SAML Держатель Ключа

    Keystore используется на клиенте для следующих механизмов безопасности:

    • Взаимные сертификаты.
    • Транспортная сек.
    • Аутентификация сообщения через SSL - токен имени пользователя
    • Аутентификация сообщения по SSL - токен X.509
    • SAML Auth. через SSL
    • Подтверждая сертификат.
    • SAML Отправитель Ваучер с Cert.
    • SAML Держатель Ключа
    • STS выдан токен
    • STS выдал токен с сервисным сертификатом.
    • STS выдан подтверждающий токен
  2. Узнайте, используется ли сервер приложений / контейнер и версия Java EE, используется ли Keystore:

  3. Узнайте о реализации клиента и о том, используется ли хранилище ключей:

Дальнейшие шаги могут быть добавлены, если предоставлена ​​дополнительная информация о вашей настройке / конфигурации.

Другие вопросы по тегам