To do it programmatically on the server side you use
the WSSecurityEngine. Feed the SOAP message (as document)
and the relevant parameters into one of the process*()
methods and when it returns the document (SOAP envelope)
is decrypted and verified (if it contains a Signature).
The return data contains information about the processed
contents.

Regards,
Werner

> -----Ursprüngliche Nachricht-----
> Von: Alessandro Gilardoni [mailto:[EMAIL PROTECTED] 
> Gesendet: Freitag, 10. Februar 2006 08:17
> An: Emanuel Haisiuc
> Cc: [email protected]
> Betreff: Re: Exception: General security error (Unexpected 
> number of X509Data: for Signature)
> 
> Thanks Emanuel,
> is there anone that have done signature and encryption 
> programmatically 
> verifying succesfully on the server side ?
> is there a possibility to decrypt a soapmessage programmatically ? i 
> found many errors, but probably i don't do the right way.
> best regards.
> Alessandro
> 
> 
> Emanuel Haisiuc ha scritto:
> > Hi Alessandro,
> >
> > I'm sorry, but I cannot answer to your question. I'm new to wss4j
> > (about a week) and I'm trying now to do something 
> programatically. All
> > I've managed to do is to set the parameter's through the wsdd
> > configuration files, and make it work.
> >
> > I hope someone with more experience will read this thread 
> and answer to you.
> >
> > Regards,
> > Emanuel
> >
> > On 2/9/06, Alessandro Gilardoni <[EMAIL PROTECTED]> wrote:
> >   
> >> Hi Emanuel,
> >> i'm trying to sign a message (programmatically with 2ss4j) 
> and to send
> >> to a server that must verify it with wss4j.
> >> I sign the message programmatically while the server is 
> deployed with a
> >> deployment descriptor. I always have a signature 
> verification fault.
> >> To sign the message and verify it on the client side i 
> need to set up
> >> the actor (WSSignEnvelope builder = new 
> WSSignEnvelope("some sort of
> >> actor"); ) otherwise the verification fails also on the client side
> >>  if i do on the client side:
> >>
> >>                        Document doc =
> >> unsignedEnvelope.getSOAPEnvelope().getAsDocument();
> >>                        WSSignEnvelope builder = new 
> WSSignEnvelope();
> >>                        builder.setUserInfo(privateKeyAlias,
> >> privateKeyPass);
> >>
> >> 
> builder.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE)
> ; // This
> >> does embed the certificate.
> >>                        Document signedDoc = 
> builder.build(doc, crypto);
> >>                        Message signedMsg = (Message)
> >> SOAPUtil.toSOAPMessage(signedDoc);
> >>                        Document Doc1 =
> >> signedMsg.getSOAPEnvelope().getAsDocument();
> >>                        verify(Doc1);
> >>
> >> i have a signature verification fault, but if a put an actor
> >> (WSSignEnvelope builder = new WSSignEnvelope("client");) 
> the signature
> >> verification it's ok .....but not on the server side....
> >> any hints ?
> >> sorry to send a very long e-mail but no one answer to my 
> previous emails...
> >> best regards.
> >> last question: it's possible to decrypt a soapmessage 
> programmatically ?
> >> HOW ?
> >>
> >>
> >> Alessandro
> >>
> >>
> >>
> >>
> >>
> >> Emanuel Haisiuc ha scritto:
> >>     
> >>> I've managed to get it working by setting the user 
> parameter in the
> >>> wsdd file to match the alias of the searched certificate in the
> >>> keystore. In the PWCallback class I'm setting the 
> password for that
> >>> certificate. And it works fine :)
> >>>
> >>> Emanuel
> >>>
> >>>
> >>>
> >>> On 2/8/06, [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>*
> >>> <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
> >>>
> >>>
> >>>     I think the answer may depend on how you are using Axis/WSS4J.
> >>>      I'm not using any config files, and doing everything in a
> >>>     handler.  Here's an example of my code, but I'm no 
> expert so this
> >>>     could be a really bad (but working) example ;-)
> >>>
> >>>     You can see I set the cert alias and password both in my
> >>>     Properties object for the Crypto, and via the
> >>>     WSSignEnvelope.setKeyIdentifier() method.  Not sure if this is
> >>>     necessary or the best way, but it works for me.  I 
> haven't made
> >>>     time for "code cleanup" yet.
> >>>
> >>>                             [...snip...]
> >>>                             Message requestMessage =
> >>>     msgContext.getRequestMessage();
> >>>                             SOAPEnvelope unsignedEnvelope =
> >>>     requestMessage.getSOAPEnvelope();
> >>>                             Document doc =
> >>>     unsignedEnvelope.getAsDocument ();
> >>>
> >>>                             // WSS4J Start
> >>>     ---------------------------------------------
> >>>
> >>>                             /*
> >>>                              * Instantiate Crypto for WSS4J via
> >>>     dynamic methods. Domino agents
> >>>                              * can't see file resources, 
> plus we need
> >>>     to compute the keystore
> >>>                              * location anyway.
> >>>                              */
> >>>                             String cryptoClassName = "
> >>>     org.apache.ws.security.components.crypto.BouncyCastle"; //
> >>>     "org.apache.ws.security.components.crypto.Merlin"
> >>>                             Properties properties = new 
> Properties();
> >>>
> >>>     properties.put("org.apache.ws.security.crypto.provider",
> >>>     cryptoClassName);
> >>>
> >>>     
> properties.put("org.apache.ws.security.crypto.merlin.keystore.type",
> >>>     keystoreType);
> >>>
> >>>     
> properties.put("org.apache.ws.security.crypto.merlin.keystore.password
> >>>     ", keystorePass);
> >>>
> >>>     
> properties.put("org.apache.ws.security.crypto.merlin.keystore.alias",
> >>>     privateKeyAlias);
> >>>
> >>>     
> properties.put("org.apache.ws.security.crypto.merlin.alias.password",
> >>>     privateKeyPass);
> >>>
> >>>     properties.put("org.apache.ws.security.crypto.merlin.file ",
> >>>     keystoreFile);
> >>>                             Crypto crypto =
> >>>     CryptoFactory.getInstance(cryptoClassName, properties);
> >>>
> >>>                             WSSignEnvelope builder = new
> >>>     WSSignEnvelope();
> >>>                             builder.setUserInfo(privateKeyAlias,
> >>>     privateKeyPass);
> >>>                             // builder.setKeyIdentifierType
> >>>     (WSConstants.ISSUER_SERIAL); // Doesn't embed the certificate.
> >>>
> >>>     
> builder.setKeyIdentifierType(WSConstants.BST_DIRECT_REFERENCE); //
> >>>     This does embed the certificate.
> >>>                             WSSAddUsernameToken 
> usernameToken = new
> >>>     WSSAddUsernameToken();
> >>>                             builder.setUsernameToken 
> (usernameToken);
> >>>                             Document signedDoc = 
> builder.build(doc,
> >>>     crypto);
> >>>
> >>>                             /*
> >>>                              * Convert the resulting 
> document into a
> >>>     message first. The
> >>>                              * toSOAPMessage() method performs the
> >>>     necessary c14n call to
> >>>                              * properly set up the signed 
> document and
> >>>     convert it into a SOAP
> >>>                              * message.
> >>>                              */
> >>>                             Message signedMsg = (Message)
> >>>     SOAPUtil.toSOAPMessage(signedDoc);
> >>>                             if ( logger.isDebugEnabled()) {
> >>>                                     logger.debug("Signed 
> message:");
> >>>
> >>>     
> XMLUtils.PrettyElementToWriter(signedMsg.getSOAPEnvelope().getAsDOM(),
> >>>     new PrintWriter(System.out));
> >>>                             }
> >>>
> >>>                             /*
> >>>                              * Extract as a document again if need
> >>>     further processing. signedDoc =
> >>>                              * signedMsg.getSOAPEnvelope
> >>>     ().getAsDocument();
> >>>                              */
> >>>
> >>>                             /*
> >>>                              * Set signed message as 
> current message.
> >>>                              */
> >>>                             
> msgContext.setCurrentMessage(signedMsg);
> >>>
> >>>                             // WSS4J End
> >>>     ---------------------------------------------
> >>>                             [...snip...]
> >>>
> >>>
> >>>
> >>>
> >>>     *Emanuel Haisiuc <[EMAIL PROTECTED]
> >>>     <mailto:[EMAIL PROTECTED]>>*
> >>>
> >>>     02/08/2006 11:31 AM
> >>>
> >>>
> >>>     To
> >>>       "[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>" <
> >>>     [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>,
> >>>     [email protected] <mailto:[email protected]>
> >>>     cc
> >>>
> >>>     Subject
> >>>       Re: Exception: General security error (Unexpected number of
> >>>     X509Data: for Signature)
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>     I have the same sense about this one.
> >>>
> >>>     My question is: how do I indicate to the client which 
> key to use
> >>>     from the keystore?
> >>>
> >>>     Is the "user" parameter from the handler in the client's
> >>>     configuration wsdd file used to identify the certificate to be
> >>>     used from the keystore?
> >>>
> >>>     Hope my questins make sense.
> >>>
> >>>     Thank you!
> >>>
> >>>     Emanuel
> >>>
> >>>
> >>>     On 2/8/06, [EMAIL PROTECTED] 
> <mailto:[EMAIL PROTECTED]>
> >>>     < [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
> >>>
> >>>     When I got that error, it was because the machine I 
> was running on
> >>>     didn't have the certificate in the keystore.  In your 
> case that
> >>>     would be the cert " ehpubcert".
> >>>
> >>>
> >>>
> >>>     *Emanuel Haisiuc <* [EMAIL PROTECTED]
> >>>     <mailto:[EMAIL PROTECTED]>*>*
> >>>
> >>>     02/08/2006 10:24 AM
> >>>
> >>>
> >>>     To
> >>>       [EMAIL PROTECTED] <mailto:[email protected]>
> >>>     cc
> >>>
> >>>
> >>>     Subject
> >>>       Exception: General security error (Unexpected 
> number of X509Data:
> >>>     for Signature)
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>     Hi!
> >>>
> >>>     I'm getting this exception when trying to run my client:
> >>>
> >>>     08.02.2006 18:16:30
> >>>     
> org.apache.ws.security.components.crypto.CryptoFactory loadClass
> >>>     INFO: Using Crypto Engine [
> >>>     org.apache.ws.security.components.crypto.Merlin]
> >>>     Unable to make the call to method: WSHandler: 
> Signature: error during
> >>>     message procesingorg.apache.ws.security.WSSecurity
> >>>     Exception: General security error (Unexpected number 
> of X509Data:
> >>>     for Signature)
> >>>
> >>>     My cliend's wsdd file is:
> >>>
> >>>     <deployment xmlns=" _http://xml.apache.org/axis/wsdd/_";
> >>>     xmlns:java=" 
> _http://xml.apache.org/axis/wsdd/providers/java_";>
> >>>                    <transport name="http"
> >>>     pivot="java:org.apache.axis.transport.http.HTTPSender " />
> >>>                    <globalConfiguration>
> >>>                                     <requestFlow>
> >>>                                                      <handler
> >>>     type="java: org.apache.ws.axis.security.WSDoAllSender ">
> >>>
> >>>     <parameter name="action" value="Signature" />
> >>>
> >>>     <parameter name="signaturePropFile" value=" 
> cx509sign.props" />
> >>>
> >>>     <parameter name="signatureKeyIdentifier" 
> value="DirectReference" />
> >>>
> >>>     <parameter name="passwordCallbackClass"
> >>>     value="javawsx509signingclient.PWCallback" />
> >>>
> >>>     <parameter name="user" value="manu" />
> >>>                                                      </handler>
> >>>                                     </requestFlow>
> >>>                    </globalConfiguration>
> >>>     </deployment>
> >>>
> >>>     where cx509sign.props is:
> >>>
> >>>     
> 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=foobar
> >>>     org.apache.ws.security.crypto.merlin.keystore.alias=ehpubcert
> >>>     org.apache.ws.security.crypto.merlin.alias.password=foobar
> >>>     
> org.apache.ws.security.crypto.merlin.file=c:/publicks/pubkeystore
> >>>
> >>>     Pubkeystore listing is:
> >>>
> >>>     C:\publicks>keytool -list -keystore pubkeystore
> >>>     Enter keystore password:  foobar
> >>>
> >>>     Keystore type: jks
> >>>     Keystore provider: SUN
> >>>
> >>>     Your keystore contains 1 entry
> >>>
> >>>     ehpubcert, 08.02.2006, keyEntry,
> >>>     Certificate fingerprint (MD5):
> >>>     5E:87:4F:3A:48:78:4C:33:1A:03:F9:7C:2E:DE:98:81
> >>>
> >>>     What should I look for and what, to make it work?
> >>>
> >>>     Thank you!
> >>>
> >>>     Emanuel
> >>>
> >>>     
> ---------------------------------------------------------------------
> >>>     To unsubscribe, e-mail: [EMAIL PROTECTED]
> >>>     <mailto:[EMAIL PROTECTED]>
> >>>     For additional commands, e-mail: 
> [EMAIL PROTECTED] _
> >>>     <mailto:[EMAIL PROTECTED]>
> >>>
> >>>
> >>>
> >>>
> >>> 
> --------------------------------------------------------------
> ----------
> >>>
> >>> No virus found in this incoming message.
> >>> Checked by AVG Free Edition.
> >>> Version: 7.1.375 / Virus Database: 267.15.3/254 - Release 
> Date: 08/02/2006
> >>>
> >>>       
> >>     
> >
> >
> >   
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to