Colm, Thank you. That makes sense.
I just wonder if I am the only one trying to integrate CXF and Websphere. Mark -----Original Message----- From: Colm O hEigeartaigh [mailto:cohei...@apache.org] Sent: Wednesday, October 25, 2017 5:06 AM To: markfu...@yahoo.com Cc: users@cxf.apache.org Subject: Re: Websphere 9 and CXF The Basic Security Profile mandates that EncryptedData structures must come after EncryptedKey structures that reference them: http://www.ws-i.org/profiles/basicsecurityprofile-1.1.html#EncryptedKey_Precedes_EncryptedData Your best bet is to re-order the header on the receiving side so that the EncryptedKey comes before the EncryptedData, if this does not break signature verification. Colm. On Tue, Oct 24, 2017 at 2:58 PM, <markfu...@yahoo.com> wrote: > Hi Colm, > > The websphere support forum is telling me that the order of the > security header should not matter and there is no way to change the > order in websphere. > > Is there any workaround or facility for class > implementation/overriding we can do with CXF to support this? > > Mark > > -----Original Message----- > From: Colm O hEigeartaigh [mailto:cohei...@apache.org] > Sent: Wednesday, October 18, 2017 6:57 AM > To: users@cxf.apache.org > Subject: Re: Websphere 9 and CXF > > The problem here is that the EncryptedKey structure, which contains > the ReferenceList pointing to the first EncryptedData structure, is > below the EncryptedData structure. WSS4J parses the security header in > order, and so when it hits the first EncryptedData structure it does > not know how to decrypt it. This is a problem with websphere - the > ReferenceList or EncryptedKey/ReferenceList must be above the EncryptedData > element. > > Colm. > > On Tue, Oct 17, 2017 at 1:08 PM, <markfu...@yahoo.com.invalid> wrote: > > > Hi Colm, > > > > Thanks for the help. Please take a look at this xml generated by > > websphere 9 (with the exception of the ... where I replaced information) > > and let me know if you can think of any workaround. To me it seems that > > CXF does not parse the reference list for the EncryptedKey. > > > > Here is the error also: > > > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > > <soap:Body> > > <soap:Fault> > > <faultcode xmlns:ns1="http://ws.apache.org/wss4j > > ">ns1:SecurityError</faultcode> > > <faultstring>A security error was encountered when > > verifying the message Caused by: EncryptedKey/EncryptedData does not > > contain ds:KeyInfo</faultstring> > > <detail> > > <stackTrace > > xmlns="http://cxf.apache.org/fault">Caused > > by: org.apache.wss4j.common.ext.WSSecurityException: > > EncryptedKey/EncryptedData does not contain ds:KeyInfo > > #*#org.apache.wss4j.dom.processor.EncryptedDataProcessor!handleToken! > > EncryptedDataProcessor.java!75#*#org.apache.wss4j.dom. > > engine.WSSecurityEngine!processSecurityHeader!WSSecurityEngine.java! > > 34 > > 0#*# > > org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor! > handleMessageInternal! > > WSS4JInInterceptor.java!284#*#org.apache.cxf.ws.security. > > wss4j.WSS4JInInterceptor!handleMessage!WSS4JInInterceptor.java!175#* > > # org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor!handleMessage! > > WSS4JInInterceptor.java!86#*#org.apache.cxf.phase.PhaseInterceptorChain! > > doIntercept!PhaseInterceptorChain.java!308#*#org.apache.cxf.transport. > > ChainInitiationObserver!onMessage!ChainInitiationObserver.java! > > 121#*#org.apache.cxf.transport.http.AbstractHTTPDestination!invoke! > > AbstractHTTPDestination.java!267#*#org.apache.cxf.transport.servlet. > > ServletController!invokeDestination!ServletController.java!234#*# > > org.apache.cxf.transport.servlet.ServletController! > > invoke!ServletController.java!208#*#org.apache.cxf.transport.servlet. > > ServletController!invoke!ServletController.java!160#*# > > org.apache.cxf.transport.servlet.CXFNonSpringServlet! > > invoke!CXFNonSpringServlet.java!191#*#org.apache.cxf.transport.servlet. > > AbstractHTTPServlet!handleRequest!AbstractHTTPServlet.java!301#* > > #org.apache..cxf.transport.servlet.AbstractHTTPServlet! > > doPost!AbstractHTTPServlet.java!220#*#javax.servlet.http. > > HttpServlet!service!HttpServlet.java!648#*#org.. > > apache.cxf.transport.servlet.AbstractHTTPServlet!service! > > AbstractHTTPServlet.java!276#*#org.apache.catalina.core. > > ApplicationFilterChain!internalDoFilter!ApplicationFilterChain.java! > > 291#*#org.apache.catalina.core.ApplicationFilterChain!doFilter! > > ApplicationFilterChain.java!206#*#org.apache.tomcat. > > websocket.server.WsFilter!doFilter!WsFilter.java!52#*# > > org.apache.catalina.core.ApplicationFilterChain!internalDoFilter! > > ApplicationFilterChain..java!239#*#org.apache.catalina. > > core.ApplicationFilterChain!doFilter!ApplicationFilterChain.java! > > 206#*#org.apache.catalina.core.StandardWrapperValve! > > invoke!StandardWrapperValve.java!212#*#org.apache.catalina.core. > > StandardContextValve!invoke!StandardContextValve.java!106# > > *#org.apache.catalina..authenticator.AuthenticatorBase!invoke! > > AuthenticatorBase.java!502#*#org.apache.catalina.core. > > StandardHostValve!invoke!StandardHostValve.java!141#*# > > org.apache.catalina.valves.ErrorReportValve!invoke! > > ErrorReportValve.java!79#*#org.apache.catalina.valves. > > AbstractAccessLogValve!invoke!AbstractAccessLogValve.java! > > 616#*#org.apache.catalina.core.StandardEngineValve! > > invoke!StandardEngineValve.java!88#*#org.apache.catalina. > > connector.CoyoteAdapter!service!CoyoteAdapter.java! > > 521#*#org.apache.coyote.http11.AbstractHttp11Processor!process! > > AbstractHttp11Processor.java!1096#*#org.apache.coyote.AbstractProtoc > > ol $ AbstractConnectionHandler!process!AbstractProtocol.java! > > 674#*#org.apache.tomcat.util.net.NioEndpoint$SocketProcessor!doRun! > > NioEndpoint.java!1500#*#org.apache.tomcat.util.net. > > NioEndpoint$SocketProcessor!run!NioEndpoint.java!1456#*# > > java.util.concurrent.ThreadPoolExecutor!runWorker! > > ThreadPoolExecutor.java!1149#*#java.util.concurrent. > > ThreadPoolExecutor$Worker!run!ThreadPoolExecutor.java!624#*# > > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable!run! > > TaskThread.java!61#*#java.lang.Thread!run!Thread.java! > 748#*#</stackTrace> > > </detail> > > </soap:Fault> > > </soap:Body> > > > > Mark > > > > <soapenv:Envelope > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/ > > "> > > <soapenv:Header> > > <wsse:Security xmlns:wsse="http://docs.oasis- > > open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" > > soapenv:mustUnderstand="1"> > > <enc:EncryptedData xmlns:enc="http://www.w3.org/ > > 2001/04/xmlenc#" Id="wssecurity_encryption_id_24" Type=" > > http://www.w3.org/2001/04/xmlenc#Element"> > > <enc:EncryptionMethod Algorithm="http://www.w3.org/ > > 2001/04/xmlenc#aes128-cbc"></enc:EncryptionMethod> > > <enc:CipherData> > > <enc:CipherValue>...</enc:CipherValue> > > </enc:CipherData> > > </enc:EncryptedData> > > <wsse:BinarySecurityToken xmlns:wsu="http://docs.oasis- > > open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" > > wsu:Id="x509bst_22" > > EncodingType="http://docs.oasis-open.org/wss/2004/01/ > > oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType=" > > http://docs.oasis-open.org/wss/2004/01/oasis- > > 200401-wss-x509-token-profile-1.0#X509v3">...</wsse:BinarySecurityToken> > > <wsse:UsernameToken xmlns:wsu="http://docs.oasis- > > open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" > > wsu:Id="unt_20"> > > <wsse:Username>...</wsse:Username> > > <wsse:Password Type="http://docs.oasis-open. > > org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#Password > > Te > > xt > > ">...</wsse:Password> > > </wsse:UsernameToken> > > <enc:EncryptedKey > > xmlns:enc="http://www.w3.org/2001/04/xmlenc# > > "> > > <enc:EncryptionMethod Algorithm="http://www.w3.org/ > > 2001/04/xmlenc#rsa-1_5"></enc:EncryptionMethod> > > <ds:KeyInfo > > xmlns:ds="http://www.w3.org/2000/09/xmldsig# > "> > > <wsse:SecurityTokenReference> > > <ds:X509Data> > > <ds:X509IssuerSerial> > > <ds:X509IssuerName>...</ds: > X509IssuerName> > > <ds:X509SerialNumber>...</ds: > > X509SerialNumber> > > </ds:X509IssuerSerial> > > </ds:X509Data> > > </wsse:SecurityTokenReference> > > </ds:KeyInfo> > > <enc:CipherData> > > <enc:CipherValue>...</enc:CipherValue> > > </enc:CipherData> > > <enc:ReferenceList> > > <enc:DataReference URI="#wssecurity_encryption_ > > id_24"></enc:DataReference> > > <enc:DataReference URI="#wssecurity_encryption_ > > id_25"></enc:DataReference> > > <enc:DataReference URI="#wssecurity_encryption_ > > id_26"></enc:DataReference> > > </enc:ReferenceList> > > </enc:EncryptedKey> > > <enc:EncryptedData xmlns:enc="http://www.w3.org/ > > 2001/04/xmlenc#" Id="wssecurity_encryption_id_25" Type=" > > http://www.w3.org/2001/04/xmlenc#Element"> > > <enc:EncryptionMethod Algorithm="http://www.w3.org/ > > 2001/04/xmlenc#aes128-cbc"></enc:EncryptionMethod> > > <enc:CipherData> > > <enc:CipherValue>...</enc:CipherValue> > > </enc:CipherData> > > </enc:EncryptedData> > > </wsse:Security> > > </soapenv:Header> > > <soapenv:Body > > xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis- > > 200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="wssecurity_signature_ > > id_21"> > > <enc:EncryptedData xmlns:enc="http://www.w3.org/2001/04/xmlenc#" > > Id="wssecurity_encryption_id_26" Type="http://www.w3.org/2001/ > > 04/xmlenc#Content"> > > <enc:EncryptionMethod Algorithm="http://www.w3.org/ > > 2001/04/xmlenc#aes128-cbc"></enc:EncryptionMethod> > > <enc:CipherData> > > <enc:CipherValue>...</enc:CipherValue> > > </enc:CipherData> > > </enc:EncryptedData> > > </soapenv:Body> > > </soapenv:Envelope> > > > > -----Original Message----- > > From: Colm O hEigeartaigh [mailto:cohei...@apache.org] > > Sent: Tuesday, October 17, 2017 5:31 AM > > To: users@cxf.apache.org > > Subject: Re: Websphere 9 and CXF > > > > Can you give an example of the websphere request that CXF does not > > parse correctly? > > > > Colm. > > > > On Mon, Oct 16, 2017 at 10:14 PM, <markfu...@yahoo.com.invalid> wrote: > > > > > Hi, > > > > > > > > > > > > I am trying to get the websphere 9 container's built in security > > > engine to programmatically generate a soap JAX-WS secure client > > > request to a CXF web service. > > > > > > > > > > > > The problem is that websphere's engine is not repeating the > > > EncryptedKey under each EncryptedData element and is using a > > > reference list to minimize how many times this information is in > > > the > message. > > > > > > > > > > > > However CXF 3.2.0 and 3.1.7 do not seem to parse the EncryptedKey > > > Info from the reference list and replace them. So it reports the > > > EncryptedData has no keyInfo element. > > > > > > > > > > > > It seems to be an optimize on IBM's end that Apache CXF has not > > > implemented. > > > > > > > > > > > > Let me know if anyone has had this problem. > > > > > > > > > > > > Thanks in advance, > > > > > > > > > > > > Mark > > > > > > > > > > > > -- > > Colm O hEigeartaigh > > > > Talend Community Coder > > http://coders.talend.com > > > > > > > -- > Colm O hEigeartaigh > > Talend Community Coder > http://coders.talend.com > > -- Colm O hEigeartaigh Talend Community Coder http://coders.talend.com