Обратный вызов хранилища ключей клиента 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 ответа
Некоторые подсказки, как лучше проанализировать проблему:
включить Level.FINE для логгера
com.sun.xml.wss.logging
Вы должны увидеть некоторые полезные сообщения отDefaultCallbackHandler
установить точку останова на
DefaultCallbackHandler#getKeyStoreUsingCallback(Map runtimeProps)
а такжеgetPrivateKey(Map runtimeProps, String alias)
методы. Я предполагаю, что они не вызваны вообще. Может SSL вообще не инициализируется?Для отладки SSL установите системное свойство
javax.net.debug=ssl
, Тогда вы увидите, что именно происходит. Вы можете найти больше информации здесь: Отладка соединений SSL/TLS.
Если вы предоставите вывод, возможно, мы сможем вам помочь.
Чтобы оправдать некоторые особенности развертывания, мне пришлось использовать механизм обратного вызова для загрузки хранилища ключей.
Вы используете механизм обратного вызова хранилища ключей, чтобы избежать предоставления ключа / пароля хранилища ключей в виде открытого текста.
Узнайте о выбранном вами механизме безопасности и о том, используется ли хранилище ключей на сервере / клиенте:
Keystore используется на сервере для следующих механизмов безопасности:
- Имя пользователя Auth. с симметричными ключами
- Взаимные сертификаты.
- SAML Auth. через SSL
- Подтверждая сертификат.
- SAML Отправитель Ваучер с Cert.
- SAML Держатель Ключа
Keystore используется на клиенте для следующих механизмов безопасности:
- Взаимные сертификаты.
- Транспортная сек.
- Аутентификация сообщения через SSL - токен имени пользователя
- Аутентификация сообщения по SSL - токен X.509
- SAML Auth. через SSL
- Подтверждая сертификат.
- SAML Отправитель Ваучер с Cert.
- SAML Держатель Ключа
- STS выдан токен
- STS выдал токен с сервисным сертификатом.
- STS выдан подтверждающий токен
Узнайте, используется ли сервер приложений / контейнер и версия Java EE, используется ли Keystore:
Узнайте о реализации клиента и о том, используется ли хранилище ключей:
Дальнейшие шаги могут быть добавлены, если предоставлена дополнительная информация о вашей настройке / конфигурации.