403 запрещено использование wss4jOutInterceptor с верблюдом и cxf

Перво-наперво:

  • Война с camel и cxf (пробовал последние версии и на самом деле пытался с 2.12.0 и 2.7.6 соответственно).
  • Простой верблюжий маршрут без процесса, просто от - лог - до.
  • Конечная цель — добавить WS-Security в сообщение SOAP.

Конфигурация:

приложение-context.xml

<!-- Import for camel config and beans -->    
<import resource="./cxf-beans-testws.xml" />
<import resource="./camel-testws.xml" />

верблюд-testws.xml

<!-- CAMEL CONTEXT -->
<camelContext id="camelContextTest" xmlns="http://camel.apache.org/schema/spring">
    <!-- CAMEL ROUTE -->
    <route id="TestWSRoute">
        <description>
            Camel route for testws
        </description>
        <from uri="cxf:bean:serviceTestProvider" />
        <log message="Process" loggingLevel="DEBUG" />
        <to uri="cxf:bean:serviceTestClient" />
    </route>
</camelContext>

cxf-beans-testws.xml (только соответствующая часть)

<bean id="wss4JOutInterceptorRea" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
    <constructor-arg>
        <map>
            <entry key="action" value="Encrypt Signature"/>
            <entry key="useSingleCertificate" value="true" />
            <entry key="user" value="xxxx" />
            <entry key="signaturePropRefId" value="signaturePropertiesBean" />
            <entry key="signaturePropertiesBean" value-ref="signaturePropertiesTest" />
            <entry key="signatureUser" value="${test.signature.certificate.alias}" />
            <entry key="passwordCallbackRef" value-ref="clientCallbackTest" />
            <entry key="signatureAlgorithm" value="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <entry key="signatureKeyIdentifier" value="DirectReference" />
            <entry key="signatureParts" value="{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body" />
            <entry key="encryptionUser" value="${test.encryption.certificate.alias}" />
            <entry key="encryptionPropRefId" value="encryptionPropertiesBean" />
            <entry key="encryptionPropertiesBean" value-ref="encryptionPropertiesTest" />
        </map>
    </constructor-arg>
</bean>

Когда я вызываю открытую веб-службу (serviceTestProvider), приходит сообщение SOAP, появляется журнал и размещается конфигурация WSS. Затем сообщение отправляется в конечную точку... и всегда возвращает:

HTTP response '403: Forbidden' when communicating with http://...

Если я удалю wss4jOutInterceptor, то будет ответ, что безопасность wss отсутствует (ожидаемый ответ).

Но если я поставлю уровень журнала в DEBUG, возьму исходящее сообщение из журнала после всей обработки цепочки перехватчиков и отправлю его вручную из консоли REST или SoapUI... тогда все будет нормально, нет 403. Таким образом, кажется, что сообщение правильно сформировано . Оба вызова осуществляются с одного и того же компьютера и без прокси и т.п.

2016-06-17 08:59:12 INFO  WSTestCXFService:234 - Outbound Message
---------------------------
ID: 4
Address: http://correct-ws-url
Http-Method: POST
Content-Type: text/xml;charset=UTF-8
Headers: {Accept=[text/xml;charset=UTF-8], accept-encoding=[gzip,deflate], breadcrumbId=[ID-MACHINENAME-55387-1466145154908-1-4], Cache-Control=[No-Cache], Connection=[Keep-Alive], host=[correct-host], SOAPAction=[method], User-Agent=[Apache-HttpClient/4.1.1 (java 1.5)]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1">...</wsse:Security></SOAP-ENV:Header><soap:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-5"><xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" Id="ED-4" Type="http://www.w3.org/2001/04/xmlenc#Content">...</xenc:EncryptedData></soap:Body></soap:Envelope>

Нет https, только конечная точка http. Попытался с каналом добавить заголовки только для соответствия необработанным сообщениям REST Console или SoapUI, но безуспешно. Есть предположения?


person jakinho    schedule 17.06.2016    source источник
comment
Вы проверяли серверные журналы сервера, отвечающего 403, чтобы выяснить, в чем причина этого? Однажды у меня было подобное поведение из-за отсутствующего SOAPAction-заголовка.   -  person Frank    schedule 17.06.2016
comment
В настоящее время я не могу получить доступ к журналам на стороне сервера или запросить их. Я попытался указать на HTTP-монитор в SoapUI, и заголовок в сообщении: soapaction: method.   -  person jakinho    schedule 17.06.2016
comment
Вы можете попробовать использовать прокси-сервер, такой как fiddler или burp, для перехвата запросов от SoapUI и верблюда на ваш сервер, чтобы просмотреть полные данные запроса и выяснить точную разницу между двумя способами, которыми вы вызываете веб-сервис.   -  person Frank    schedule 17.06.2016
comment
Вы решили это? Не могли бы вы опубликовать весь cxf-beans-testws.xml?   -  person npeder    schedule 08.08.2016


Ответы (1)


Наконец, это была проблема с Windows/сетью. Через несколько дней (2-3) никаких изменений... все заработало.

person jakinho    schedule 07.12.2016