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