X509 WS-Security с использованием spring-ws, перехватчик XWS в WebSphere - PullRequest
1 голос
/ 06 декабря 2011

Мне тяжело с WS-Security на основе сертификатов X509 в WebSphere v7.

Вот небольшой фон: мы используем spring-ws в нашем приложении, и мы разрешаем безопасность профиля UsernameToken илиБезопасность X509.Они реализованы с использованием перехватчика Xws Security, который работает на платформе Xws Security Framework:

http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/XWS-SecurityIntro4.html

Мы реализуем безопасность как на стороне клиента, так и на стороне сервера,оба используют перехватчик XWSS.Есть две проблемы:

  1. Класс javax.xml.crypto, возвращенный из WebSphere для "http://www.w3.org/2001/10/xml-exc-c14n#", или любой метод CanonicalizationMethod не совместим с перехватчиком XWSS. Мы видим эту ошибку в журнале сообщений нана стороне сервера:

12/5/11 17: 26: 41: 098 EST 00000023 XwsSecurityIn W org.springframework.ws.soap.security.AbstractWsSecurityInterceptor handleValidationException Не удалось проверить запрос: com.sun.xml.wss.XWSSecurityException: javax.xml.crypto.MarshalException: java.security.NoSuchAlgorithmException: класс, настроенный для TransformService: com.ibm.xml.crypto.dsig.dom.transform.ExcC14nTransformer, не являющийся объектом преобразования.xml.wss.XWSSecurityException: com.sun.xml.wss.XWSSecurityException: javax.xml.crypto.MarshalException: java.security.NoSuchAlgorithmException: класс, настроенный для TransformService: com.ibm.xml.crypto.dsform .dom.ExcC14nTransformer, а не TransformService

Я думаю, что здесь лучше всегопереопределить, какая реализация используется для расшифровки этих типов.Мы включили xmldsig-1.0.jar в наш файл war (который развертывается с загрузчиком классов, установленным в parent-last).Кто-нибудь знает способ перезаписать это?Я попытался указать «org.jcp.xml.dsig.internal.dom.XMLDSigRI» в java.security в моей среде выполнения, но это не сработало.Мы включаем xmldsig-1.0.jar в наше приложение.

Это похоже на проблему совместимости между JRE IBM и Sun JRE от IBM.Перехватчик XWSS был написан Sun, поэтому они могли принять некоторые вещи как должное.

  1. Получаем исключение NullPointerException на стороне клиента, пытающегося вставить элементы заголовка, необходимые для подписания запроса.Мы используем xerces для нашей реализации DOM, но это похоже на SOAPFactory.Я попытался установить для свойства "javax.xml.soap.SOAPFactory" значение com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl ", но это, похоже, не решило проблему.Вот трассировка стека:

    [03.12.11 13: 39: 52: 560 EST] 00000027 XwsSecurityIn E org.springframework.ws.soap.security.AbstractWsSecurityInterceptor handleSecurementException Не удалось защитить ответ: java.lang.Исключение нулевого указателя;вложенное исключение: com.sun.xml.wss.XWSSecurityException: java.lang.NullPointerException org.springframework.ws.soap.security.xwss.XwsSecuritySecurementException: java.lang.NullPointerException;вложенное исключение: com.sun.xml.wss.XWSSecurityException: java.lang.NullPointerException

    ...

    Причина: com.sun.xml.wss.XWSSecurityException: java.lang.Исключение NullPointerException в com.sun.xml.wss.impl.misc.XWSSProcessor2_0Impl.secureOutboundMessage (XWSSProcessor2_0Impl.java:98) в org.springframework.ws.soap.security.xwss.XwsSecurityMessage.SecurityInser.SecuritySecureSecuritySecureSecureSecureSecureSecorSecureSecureSecureSceptorSceptorЕще 86 вызвано: java.lang.NullPointerException в com.sun.xml.wss.core.Timestamp.getAsSoapElement (Timestamp.java:265) в com.sun.xml.wss.core.SecurityHeader.insertHeaderBlock (SecurityHeader.java:90) в com.sun.xml.wss.impl.filter.TimestampFilter.process (TimestampFilter.java:149) в com.sun.xml.wss.impl.HarnessUtil.processWSSPolicy (HarnessUtil.java:87) в com.sun.xml.wss.impl.HarnessUtil.processDeep (HarnessUtil.java:237)в com.sun.xml.wss.impl.SecurityAnnotator.processMessagePolicy (SecurityAnnotator.java:162) в com.sun.xml.wss.impl.SecurityAnnotator.secureMessage (SecurityAnnotator.java:137) в com.sun.xml.wss.impl.misc.XWSSProcessor2_0Impl.secureOutboundMessage (XWSSProcessor2_0Impl.java:96) ... еще 87

Я попытался настроить конфигурацию своей политики, чтобы отключить метку времени, но затем я получилNPE на другом элементе.Я не верю, что виновата конфигурация, но она все равно есть:

<?xml version="1.0" encoding="UTF-8"?>
<SecurityConfiguration xmlns="http://java.sun.com/xml/ns/xwss/config" dumpMessages="true">
    <Sign includeTimestamp="false">
        <X509Token certificateAlias="1"/>
    </Sign>
</SecurityConfiguration>

Я проверил это на JBoss & Jetty, и оба сработали, как и ожидалось.Любая помощь будет принята с благодарностью ...

1 Ответ

1 голос
/ 07 декабря 2011

После долгих исследований я обнаружил, что XWS Security Interceptor несовместим с JRE IBM. Я смог заставить его работать с безопасностью профиля UsernameToken, но он не будет работать с безопасностью на основе сертификатов. Я решил переписать это, используя перехватчик WSS4J.

Для получения дополнительной информации, пожалуйста, смотрите главу 7.2:

http://static.springsource.org/spring-ws/site/reference/pdf/spring-ws-reference.pdf

...