I took a look, please see my comment.

Colm.

On Wed, Mar 5, 2025 at 8:47 AM FABIAN Lukas <lukas.fab...@svc.co.at> wrote:
>
> Hi,
>
>
> I opened a pull request which fixes this issue (#453), could someone review 
> this?
>
>
>
> ________________________________
> From: FABIAN Lukas
> Sent: Monday, 13 January 2025 08:22
> To: dev@santuario.apache.org
> Subject: AW: Digest verification fails with SAAJ 1.4+
>
> [Sie erhalten nicht häufig E-Mails von lukas.fab...@svc.co.at. Weitere 
> Informationen, warum dies wichtig ist, finden Sie unter 
> https://aka.ms/LearnAboutSenderIdentification ]
>
> Hi,
>
> I have created a simple soap service where the issue can be reproduced. Run 
> the main class and then start the unit test, it will fail with the error 
> "Signature cryptographic validation not successful".
>
>
> -----Ursprüngliche Nachricht-----
> Von: Colm O hEigeartaigh <cohei...@apache.org>
> Gesendet: Dienstag, 7. Jänner 2025 13:04
> An: dev@santuario.apache.org
> Betreff: Re: Digest verification fails with SAAJ 1.4+
>
> [Sie erhalten nicht häufig E-Mails von cohei...@apache.org. Weitere 
> Informationen, warum dies wichtig ist, finden Sie unter 
> https://aka.ms/LearnAboutSenderIdentification ]
>
> Hi,
>
> Is it possible to reproduce the issue in a unit test (or even a
> standalone testcase)?
>
> Colm.
>
> On Tue, Jan 7, 2025 at 11:29 AM FABIAN Lukas <lukas.fab...@svc.co.at> wrote:
> >
> > Hi,
> >
> >
> >
> > I have an issue with digest verification when using SAAJ versions newer 
> > than 1.3. In general my issue is very similar to SANTUARIO-576.
> >
> >
> >
> > With SAAJ 1.3 everything works as intended, but if I use SAAJ 1.4 (or any 
> > newer version, e.g. 3.0.4), the digest verification fails. After some 
> > investigation, I noticed that with the new versions there is a type 
> > mismatch in org.apache.xml.security.c14n.implementations.CanonicalizerBase 
> > which leads to the Signature element not being removed, thus calculating a 
> > wrong digest value.
> >
> > The relevant code is from line 242 onwards:
> >             case Node.ELEMENT_NODE :
> >
> >                 documentLevel = NODE_NOT_BEFORE_OR_AFTER_DOCUMENT_ELEMENT;
> >
> >                 if (currentNode == excludeNode) {
> >
> >                     break;
> >
> >                 }
> >
> >
> >
> > In my case excludeNode is of type 
> > com.sun.xml.messaging.saaj.soap.impl.ElementImpl and currentNode is of type 
> > com.sun.org.apache.xerces.internal.dom.ElementNSImpl. Therefore, the 
> > condition currentNode == excludeNode is not true and the excludeNode is not 
> > removed.
> >
> > The behaviour seems to have changed with SAAJ 1.4 because ElementImpl is no 
> > longer extending com.sun.org.apache.xerces.internal.dom.ElementNSImpl. It 
> > now has a private element field to store a reference to the actual Element.
> >
> >
> >
> > A fix for my issue would be replacing
> >
> >                 if (currentNode == excludeNode)
> >
> > with
> >
> >                if (excludeNode != null && 
> > excludeNode.isSameNode(currentNode))
> >
> >
> >
> > but maybe there are better fixes. Especially the case from the Jira Ticket, 
> > where the class types of currentNode and excludeNode are swapped, would not 
> > be fixed with my approach.
> >
> >
> >
> > Is it possible to fix this in a future version of Santuario? This issue is 
> > blocking the JBoss EAP8 migration of our application.
> >
> >
> >
> > Kind regards,
> >
> > Lukas Fabian

Reply via email to