What does the generated request look like?

Colm.


On Tue, Oct 8, 2013 at 1:05 PM, pop-sa <ehab.abdelwhab.atal...@gmail.com>wrote:

> 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.
>



-- 
Colm O hEigeartaigh

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

Reply via email to