Hey all, I’ve a problem to communicate from a java client with a secured .Net ASMX service “signature and encryption using user name token” .NET example is in the follow link http://www.codeproject.com/Articles/12189/Custom-WSE-3-0-Policy-Assertions-for-Signing-and-E
the return is like this Caused by: org.apache.cxf.binding.soap.SoapFault: The signature or decryption was invalid ---> WSE523: The CipherData contents are invalid. at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84) at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51) at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113) at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:140) at org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAPHandlerInterceptor.java:71) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:800) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1592) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1490) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1309) at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622) at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:133) ... 3 more Java Result: 1 The java message Handler that sends request to the web service is like this private void handleOUTBOUNDMessage(SOAPMessageContext messageContext) { try { System.out.println("Handle Message handleOUTBOUNDMessage..."); SOAPPart soapPart = messageContext.getMessage().getSOAPPart();//.addMimeHeader(null, null); SOAPEnvelope soapEnvelope = messageContext.getMessage().getSOAPPart().getEnvelope(); soapEnvelope.addNamespaceDeclaration("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); soapEnvelope.addNamespaceDeclaration("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); soapEnvelope.addNamespaceDeclaration("wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing"); WSAddressingFeature ws = new WSAddressingFeature(); ws.setUsingAddressingAdvisory(true); ws.setAddressingRequired(true); WSSecHeader secHeader = new WSSecHeader(); Document doc = messageContext.getMessage().getSOAPHeader().getOwnerDocument(); secHeader.insertSecurityHeader(doc); WSSecUsernameToken builder = new WSSecUsernameToken(); String password = convertBase64("admin"); builder.setUserInfo("admin", "admin"); builder.addCreated(); builder.addNonce(); builder.prepare(doc); builder.build(doc, secHeader); WSSecurityUtil.setNamespace(builder.getUsernameTokenElement(), WSConstants.WSU_NS, WSConstants.WSU_PREFIX); String outputString = org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(doc); WSSecSignature sign = new WSSecSignature(); sign.setCustomTokenValueType(WSConstants.USERNAMETOKEN_NS + "#UsernameToken"); sign.setCustomTokenId(builder.getId()); sign.setSecretKey(builder.getSecretKey()); sign.setKeyIdentifierType(WSConstants.CUSTOM_SYMM_SIGNING); sign.setSignatureAlgorithm(WSConstants.HMAC_SHA1); WSAddressingFeature wsws = new WSAddressingFeature(); WSEncryptionPart wsen = new WSEncryptionPart(builder.getId()); sign.prepare(doc, null, secHeader); Document signedDoc = sign.build(doc, null, secHeader); WSSecTimestamp secTimestamp = new WSSecTimestamp(); secTimestamp.prepare(doc); secTimestamp.build(doc, secHeader); Reference ref = new Reference(doc); ref.setURI("#" + builder.getId()); ref.setValueType("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken"); SecurityTokenReference secRef = new SecurityTokenReference(doc); secRef.setReference(ref); WSSecurityUtil.setNamespace(secRef.getElement(), WSConstants.WSSE_NS, WSConstants.WSSE_PREFIX); WSSecEncrypt secEncrypt = new WSSecEncrypt(); secEncrypt.setKeyIdentifierType(WSConstants.EMBED_SECURITY_TOKEN_REF); secEncrypt.setSecurityTokenReference(secRef); byte[] b = new byte[256]; ByteBuffer by = ByteBuffer.wrap(builder.getSecretKey()); by.put(builder.getSecretKey()); secEncrypt.setKey(by.array()); byte[] keyBytes = new byte[16]; byte[] parameterKeyBytes = password.getBytes("utf-8"); System.arraycopy(parameterKeyBytes, 0, keyBytes, 0, Math.min(parameterKeyBytes.length, keyBytes.length)); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); secEncrypt.setSymmetricKey(secretKeySpec); secEncrypt.setKey(keyBytes); secEncrypt.setKeyEnc(new String(keyBytes)); secEncrypt.setKeyEncAlgo(WSConstants.AES_256); secEncrypt.setSymmetricEncAlgorithm(WSConstants.AES_256); // secEncrypt.setCustomEKTokenId(builder.getId()); secEncrypt.setDocument(doc); secEncrypt.build(doc, null, secHeader); /** * to remove password tag* */ boolean passwordRemoved = false; NodeList nodeList = builder.getUsernameTokenElement().getChildNodes(); Node node = null; for (int i = 0; i < nodeList.getLength(); i++) { node = builder.getUsernameTokenElement().getChildNodes().item(i); if (node.getLocalName().equalsIgnoreCase("Password")) { builder.getUsernameTokenElement().removeChild(node); passwordRemoved = true; } } if (!passwordRemoved) { throw new Exception("Error removing UsernameToken password"); } WSSecurityUtil.prependChildElement( secHeader.getSecurityHeader(), builder.getUsernameTokenElement()); outputString = org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(doc); System.out.println("handleOUTBOUNDMessage outputstring: " + outputString); } catch (Exception ex) { ex.printStackTrace(); } } -- View this message in context: http://cxf.547215.n5.nabble.com/consuming-secured-net-asmx-web-service-tp5734806.html Sent from the cxf-dev mailing list archive at Nabble.com.