Hi,

You are mixing up the two different ways of configuring WS-Security in CXF.
The "action" based approach involves defining WSS4JOutInterceptor +
WSS4JInInterceptors + explicitly adding them to the interceptor chain.
However, when you have a security policy, you don't need to do any of this
as CXF will take care of configuring WSS4J for you. In this case, you just
need to define some JAX-WS properties (keystores etc.). For example, see
the following test configuration:

https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob_plain;f=systests/ws-security-examples/src/test/resources/org/apache/cxf/systest/wssec/examples/x509/client/client.xml;hb=refs/heads/2.7.x-fixes

e.g.

 <jaxws:client 
name="{http://www.example.org/contract/DoubleIt}DoubleItAsymmetricSignEncryptPort";
                  createdFromAPI="true">
       <jaxws:properties>
           <entry key="ws-security.callback-handler"

value="org.apache.cxf.systest.wssec.examples.common.CommonPasswordCallback"/>
           <entry key="ws-security.encryption.properties"
value="bob.properties"/>
           <entry key="ws-security.encryption.username" value="bob"/>
           <entry key="ws-security.signature.properties"
value="alice.properties"/>
           <entry key="ws-security.signature.username" value="alice"/>
       </jaxws:properties>
    </jaxws:client>

Colm.


On Sat, Jul 19, 2014 at 4:38 PM, Puneet Gupta <[email protected]>
wrote:

> Hi All,
>
> I am migrating from Axis2 Web Services to Apache CXF. In axis2, I had
> configured security using Rampart and I have configured it using following
> policy settings:
>
> *<wsp:Policy wsu:Id="SigEncr"*
> *
> xmlns:wsu="
> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
> <
> 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
> <http://schemas.xmlsoap.org/ws/2004/09/policy>">*
> * <wsp:ExactlyOne>*
> * <wsp:All>*
> * <sp:AsymmetricBinding*
> * xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <wsp:Policy>*
> * <sp:InitiatorToken>*
> * <wsp:Policy>*
> * <sp:X509Token*
> *
> sp:IncludeToken="
> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
> <
> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
> >">*
> * <wsp:Policy>*
> * <sp:RequireKeyIdentifierReference />*
> * <sp:WssX509V3Token10 />*
> * </wsp:Policy>*
> * </sp:X509Token>*
> * </wsp:Policy>*
> * </sp:InitiatorToken>*
> * <sp:RecipientToken>*
> * <wsp:Policy>*
> * <sp:X509Token*
> *
> sp:IncludeToken="
> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never
> >">*
> * <wsp:Policy>*
> * <sp:RequireKeyIdentifierReference />*
> * <sp:WssX509V3Token10 />*
> * </wsp:Policy>*
> * </sp:X509Token>*
> * </wsp:Policy>*
> * </sp:RecipientToken>*
> * <sp:AlgorithmSuite>*
> * <wsp:Policy>*
> * <sp:TripleDesRsa15 />*
> * </wsp:Policy>*
> * </sp:AlgorithmSuite>*
> * <sp:Layout>*
> * <wsp:Policy>*
> * <sp:Strict />*
> * </wsp:Policy>*
> * </sp:Layout>*
> * <sp:IncludeTimestamp />*
> * <sp:OnlySignEntireHeadersAndBody />*
> * </wsp:Policy>*
> * </sp:AsymmetricBinding>*
> * <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <wsp:Policy>*
> * <sp:MustSupportRefKeyIdentifier />*
> * <sp:MustSupportRefIssuerSerial />*
> * </wsp:Policy>*
> * </sp:Wss10>*
> * <sp:SignedParts*
> * xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <sp:Body />*
> * </sp:SignedParts>*
> * <sp:EncryptedParts*
> * xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <sp:Body />*
> * </sp:EncryptedParts>*
>
> * <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy
> <http://ws.apache.org/rampart/policy>">*
> * <ramp:user>service</ramp:user>*
> * <ramp:encryptionUser>client</ramp:encryptionUser>*
> *
>
> <ramp:passwordCallbackClass>com.test.webservice.PWCBHandler</ramp:passwordCallbackClass>*
>
> * <ramp:signatureCrypto>*
> * <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">*
> * <ramp:property*
> *
>
> name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>*
> * <ramp:property
>
> name="org.apache.ws.security.crypto.merlin.file">service.jks</ramp:property>*
> * <ramp:property*
> *
>
> name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>*
> * </ramp:crypto>*
> * </ramp:signatureCrypto>*
> * <ramp:encryptionCypto>*
> * <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin">*
> * <ramp:property*
> *
>
> name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property>*
> * <ramp:property
>
> name="org.apache.ws.security.crypto.merlin.file">service.jks</ramp:property>*
> * <ramp:property*
> *
>
> name="org.apache.ws.security.crypto.merlin.keystore.password">password</ramp:property>*
> * </ramp:crypto>*
> * </ramp:encryptionCypto>*
> * </ramp:RampartConfig>*
> * </wsp:All>*
> * </wsp:ExactlyOne>*
> * </wsp:Policy>*
>
> In Apache CXF, I am trying to configure the security following below steps:
>
> 1. I have created as ws-policy.xml file and is placed under WEB-INF/classes
> folder. I am providing this policy file to service class using @Policies
> annotation. Ex:
>
>
> *@Policy(uri = "ws-policy.xml")*
> *@WebService(targetNamespace = "http://webservice.test.com
> <http://webservice.test.com>", name = "WSServicePortType")*
> *public class WSService {*
> *//Service method goes here.*
> *}*
>
> Contents of ws-policy.xml is as follows:
>
> *<wsp:Policy*
> *
> xmlns:wsu="
> http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd
> <
> 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
> <http://schemas.xmlsoap.org/ws/2004/09/policy>">*
>
> * <sp:AsymmetricBinding*
> * xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <wsp:Policy>*
> * <sp:InitiatorToken>*
> * <wsp:Policy>*
> * <sp:X509Token*
> *
> sp:IncludeToken="
> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
> <
> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
> >">*
> * <wsp:Policy>*
> * <sp:RequireIssuerSerialReference />*
> * </wsp:Policy>*
> * </sp:X509Token>*
> * </wsp:Policy>*
> * </sp:InitiatorToken>*
> * <sp:RecipientToken>*
> * <wsp:Policy>*
> * <sp:X509Token*
> *
> sp:IncludeToken="
> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
> <
> http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient
> >">*
> * <wsp:Policy>*
> * <sp:RequireIssuerSerialReference />*
> * </wsp:Policy>*
> * </sp:X509Token>*
> * </wsp:Policy>*
> * </sp:RecipientToken>*
> * <sp:AlgorithmSuite>*
> * <wsp:Policy>*
> * <sp:TripleDesRsa15 />*
> * </wsp:Policy>*
> * </sp:AlgorithmSuite>*
> * <sp:Layout>*
> * <wsp:Policy>*
> * <sp:Strict />*
> * </wsp:Policy>*
> * </sp:Layout>*
> * </wsp:Policy>*
> * </sp:AsymmetricBinding>*
>
> * <sp:Wss10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <wsp:Policy>*
> * <sp:MustSupportRefKeyIdentifier />*
> * <sp:MustSupportRefIssuerSerial />*
> * </wsp:Policy>*
> * </sp:Wss10>*
> * <sp:SignedParts
> xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <sp:Body />*
> * </sp:SignedParts>*
> * <sp:EncryptedParts*
> * xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy
> <http://schemas.xmlsoap.org/ws/2005/07/securitypolicy>">*
> * <sp:Body />*
> * </sp:EncryptedParts>*
> *</wsp:Policy>*
>
> 2. To configure WSS4J, I am using following snippet in cxf-servlet.xml:
>
> *         <jaxws:endpoint address="/WSService">*
> * <jaxws:implementor>*
> * <bean id="WSService"*
> * class="com.test.webservice.WSService" />*
> * </jaxws:implementor>*
> * <jaxws:inInterceptors>*
> * <ref bean="wss4jInConfiguration" />*
> * <bean class="com.test.webservice.AuthHandler">*
> * </bean>*
> * </jaxws:inInterceptors>*
> * <jaxws:outInterceptors>*
> * <ref bean="wss4jOutConfiguration" />*
> * <bean class="com.test.webservice.LogHandler">*
> * </bean>*
> * </jaxws:outInterceptors>*
> * <jaxws:properties>*
> * <entry key="ws-security.is-bsp-compliant" value="false" />*
> * </jaxws:properties>*
> * </jaxws:endpoint>*
>
> * <bean id="wss4jInConfiguration"
> class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">*
> * <constructor-arg>*
> * <map>*
> * <entry key="action" value="Signature Encrypt Timestamp" />*
> * <entry key="signaturePropFile" value="service.properties" />*
> * <entry key="decryptionPropFile" value="service.properties" />*
> * <entry key="encryptionPropFile" value="service.properties" />*
> * <entry key="passwordCallbackClass"
> value="com.test.webservice.PWCBHandler" />*
> * </map>*
> * </constructor-arg>*
> * </bean>*
>
> * <bean id="wss4jOutConfiguration"
> class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">*
> * <constructor-arg>*
> * <map>*
> * <entry key="action" value="Timestamp Signature Encrypt" />*
> * <entry key="passwordCallbackClass"
> value="com.test.webservice.PWCBHandler" />*
> * <entry key="signaturePropFile" value="service.properties" />*
> * <entry key="encryptionPropFile" value="service.properties" />*
> * <entry key="decryptionPropFile" value="service.properties" />*
> * </map>*
> * </constructor-arg>*
> * </bean>*
>
> service.properties is also present in WEB-INF/classes folder. Its content
> are as below:
>
>
> *org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin*
> *org.apache.ws.security.crypto.merlin.keystore.type=jks*
> *org.apache.ws.security.crypto.merlin.keystore.password=password*
> *org.apache.ws.security.crypto.merlin.file=service.jks*
>
> Using above configuration I am getting below mentioned exception when I am
> trying to access web service through client which is configured using same
> security setting which I used while I was in axis2:
>
> 20:49:21,744  WARN [ws.security.wss4j.WSS4JInInterceptor              ] -
> org.apache.ws.security.WSSecurityException: The signature or decryption was
> invalid
> at
>
> org.apache.ws.security.processor.SignatureProcessor.verifyXMLSignature(SignatureProcessor.java:450)
> at
>
> org.apache.ws.security.processor.SignatureProcessor.handleToken(SignatureProcessor.java:231)
> at
>
> org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:396)
> at
>
> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:270)
> at
>
> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:95)
> at
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> at
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
> at
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)
> at
>
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
> at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
> at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
> at
>
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
> at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
> at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
> at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> at
>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
> at
>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
> at
>
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> at
>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
> at
>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
> at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
> at
>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
> at
>
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
> at
>
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
> at
>
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
> 20:49:21,745  WARN [apache.cxf.phase.PhaseInterceptorChain            ] -
> Interceptor for {http://webservice.test.com
> }WSAmandaSecurityServiceService#{
> http://webservice.test.com}authenticateUser has thrown exception,
> unwinding
> now
> org.apache.cxf.binding.soap.SoapFault: The signature or decryption was
> invalid
> at
>
> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.createSoapFault(WSS4JInInterceptor.java:850)
> at
>
> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:327)
> at
>
> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:95)
> at
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> at
>
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
> at
>
> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:241)
> at
>
> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
> at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
> at
>
> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
> at
>
> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
> at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
> at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
> at
>
> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> at
>
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> at
>
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> at
>
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
> at
>
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
> at
>
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> at
>
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
> at
>
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
> at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
> at
>
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
> at
>
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
> at
>
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
> at
>
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
> Caused by: org.apache.ws.security.WSSecurityException: The signature or
> decryption was invalid
> at
>
> org.apache.ws.security.processor.SignatureProcessor.verifyXMLSignature(SignatureProcessor.java:450)
> at
>
> org.apache.ws.security.processor.SignatureProcessor.handleToken(SignatureProcessor.java:231)
> at
>
> org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:396)
> at
>
> org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:270)
> ... 28 test
>
>
> Can anyone help me identify if I am missing anything while configuring
> WSS4J in apache cxf, so that I can use same client to access cxf web
> service?
>
> Thanks for your time and help.
>
> Regards, Puneet.
>



-- 
Colm O hEigeartaigh

Talend Community Coder
http://coders.talend.com

Reply via email to