The problem is the XML parser:

The method org.apache.ws.security.message.token.BinarySecurity::getToken
decodes only first child text node and XML parser returns only the
first chunk of text.
The cert is then invalid since only a part of it is sent to a Crypto layer.

That's why your sample works in my environment too.

Suggested implemententation (correction) would be something like:

public byte[] getToken() {
        //prev
        /*Text node = getFirstNode();
        if (node == null) {
                return null;
        }
        try {
                return Base64.decode(node.getData());
        } catch (Exception e) {
                return null;
        }*/
        
        //new
        //better place for this might be a getFirstNode method
        NodeList nl = getElement().getChildNodes();
        StringBuffer buff = new StringBuffer();
        for (int i = 0; i < nl.getLength(); i++) {
                Node n = nl.item(i);
                if (n instanceof Text) {
                        buff.append(((Text)n).getData());
                }
        }

        try {
                return Base64.decode(buff.toString());
        } catch (Exception e) {
                return null;
        }
}



2009/7/21 Colm O hEigeartaigh <cohei...@progress.com>:
>
> Hi Nikola,
>
> I'm able to load the certificate using WSS4J 1.5.7 without any problems. Do 
> you have the unlimited security policy files installed in the JDK you're 
> using? Also, try changing the signature crypto provider in your policy from 
> BouncyCastle to Merlin and see if that works. Can you debug into the code and 
> tell me what implementation is returned by getCertificateFactory() in 
> loadCertificate?
>
> Can you try the following code in your environment and tell me if it works? 
> You need to get a org.w3c.dom.Document instance ("doc" below) to get it to 
> work, just have a look at the WSS4J unit tests to see how it's done.
>
> String token = 
> "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";
> // Construct a Document "doc" as per the unit tests
> org.apache.ws.security.message.token.X509Security sec =
>    new org.apache.ws.security.message.token.X509Security(doc);
> sec.setToken(org.apache.ws.security.util.Base64.decode(token));
> X509Certificate cert = sec.getX509Certificate(crypto);
>
> Colm.
>
>
>
> -----Original Message-----
> From: nikola.iva...@gmail.com [mailto:nikola.iva...@gmail.com] On Behalf Of 
> Nikola Ivacic
> Sent: 20 July 2009 13:59
> To: Colm O hEigeartaigh
> Cc: wss4j-dev@ws.apache.org
> Subject: Re: Interoperability problem with JBoss native stack
>
> Sorry for the previous mail, it was all messed up ...
> (I have a really dumb mail client :-))
>
> So here it is again:
>
> This is on my classpath:
> XmlSchema-1.4.2.jar
> activation-1.1.jar
> axiom-api-1.2.7.jar
> axiom-dom-1.2.7.jar
> axiom-impl-1.2.7.jar
> axis2-adb-1.4.1.jar
> axis2-codegen-1.4.1.jar
> axis2-kernel-1.4.1.jar
> backport-util-concurrent-3.1.jar
> bcprov-jdk16-142.jar
> commons-codec-1.3.jar
> commons-httpclient-3.1.jar
> commons-logging-1.1.1.jar
> jaxen-1.1.1.jar
> log4j-1.2.15.jar
> mail-1.4.jar
> mex-1.4.1.jar
> neethi-2.0.4.jar
> opensaml-1.1.jar
> rampart-1.4.mar
> rampart-core-1.4.jar
> rampart-policy-1.4.jar
> rampart-trust-1.4.jar
> testng-5.9-jdk15.jar
> woden-api-1.0M8.jar
> woden-impl-dom-1.0M8.jar
> wsdl4j-1.6.2.jar
> wss4j-1.5.7.jar
> xalan-2.7.0.jar
> xmlsec-1.4.1.jar
>
> p.s. The SOAP responses are not identical to the response in the wss4j.log 
> file.
> If you need any other files just let me know ... the certs and keys
> are only for testing purposes anyway.
>
> Hope this helps, thanks.
>
> Nikola Ivačič
>
>
> 2009/7/20 Colm O hEigeartaigh <cohei...@progress.com>:
>>
>> Yes, this is the right mailing list :-)
>>
>> Can you attach the stacktrace of the exception that gets thrown by WSS4J? 
>> Also, the SOAP response would be great.
>>
>> Colm.
>>
>> -----Original Message-----
>> From: Nikola Ivačič [mailto:nikola.iva...@gmail.com] On Behalf Of Nikola 
>> Ivacic
>> Sent: 20 July 2009 07:38
>> To: wss4j-dev@ws.apache.org
>> Subject: Interoperability problem with JBoss native stack
>>
>> Hi,
>>
>> If this is not the right mailing list I apologize.
>>
>> I have a problem with signed SOAP response from JBoss native stack
>> (JBoss WS implementation).
>> The X509 signed SOAP client call (Axis2 1.4 and Rampart 1.4) is
>> correctly sent and understood by the server.
>> The response contains X509 base 64 encoded certificate that WSS4j
>> fails to parse.
>>
>>
>> If I bypass invocation of
>> public X509Certificate getX509Certificate(Crypto crypto) throws
>> WSSecurityException
>> in
>> org.apache.ws.security.message.token.X509Security
>>
>> which gets invoked by
>> org.apache.ws.security.processor .SignatureProcessor
>> in
>> public X509Certificate[] getCertificatesTokenReference(Element elem,
>> Crypto crypto)
>> and
>> org.apache.ws.security.processor.BinarySecurityTokenProcessor
>> in
>> public X509Certificate[] getCertificatesTokenReference(Element elem,
>> Crypto crypto)
>>
>> with my own (quick, naive and dirty) X509 parsing implementation, then
>> SOAP response
>> passes the Apache Rampart processing.
>>
>>
>> I'm using WSS4j 1.5.7 and JBossWS 3.1.2 GA
>>
>> Where can I post this potential bug?
>> What is the correct/standard binary format of the X509 certificate
>> that gets
>> base64 encoded in SOAP WS-Securtity header when using signing?
>>
>>
>> Thanks for reply,
>>
>> Nikola Ivačič
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: wss4j-dev-unsubscr...@ws.apache.org
>> For additional commands, e-mail: wss4j-dev-h...@ws.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: wss4j-dev-unsubscr...@ws.apache.org
>> For additional commands, e-mail: wss4j-dev-h...@ws.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: wss4j-dev-unsubscr...@ws.apache.org
> For additional commands, e-mail: wss4j-dev-h...@ws.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: wss4j-dev-unsubscr...@ws.apache.org
For additional commands, e-mail: wss4j-dev-h...@ws.apache.org

Reply via email to