<div dir="ltr"><div>Hi All,<br><br></div><div>I'm having a test to encrypt and then
decrypt a saml assertion. The assertion gets encrypted but when you try
to decrypt I'm getting an error. The error is as follows:</div><div><br></div><div><b>Error</b></div><div><br>[main] ERROR org.opensaml.core.xml.io.AbstractXMLObjectMarshaller - Unable to root namespaces of cached DOM element, {<a href="http://www.w3.org/2001/04/xmlenc#%7DEncryptionMethod" target="_blank">http://www.w3.org/2001/04/xmlenc#}EncryptionMethod</a><br>org.w3c.dom.DOMException: Unable to resolve namespace prefix ds found on element {<a href="http://www.w3.org/2000/09/xmldsig#%7DDigestMethod" target="_blank">http://www.w3.org/2000/09/xmldsig#}DigestMethod</a><br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:247)<br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:295)<br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:200)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.prepareForAdoption(AbstractXMLObjectMarshaller.java:422)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:144)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshallChildElements(AbstractXMLObjectMarshaller.java:271)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshallInto(AbstractXMLObjectMarshaller.java:212)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:118)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:75)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.checkAndMarshall(Decrypter.java:963)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.decryptKey(Decrypter.java:681)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.decryptKey(Decrypter.java:643)<br> at org.wso2.carbon.identity.sso.saml.TestUtils.getDecryptedAssertion(TestUtils.java:141)<br> at org.wso2.carbon.identity.sso.saml.util.EncryptionTests.testSetEncryptedAssertionWithKeyEncryptionAlgorithm(EncryptionTests.java:77)<br> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)<br> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br> at java.lang.reflect.Method.invoke(Method.java:498)<br> at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)<br> at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)<br> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)<br> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)<br> at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)<br> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)<br> at org.testng.TestRunner.privateRun(TestRunner.java:782)<br> at org.testng.TestRunner.run(TestRunner.java:632)<br> at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)<br> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)<br> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)<br> at org.testng.SuiteRunner.run(SuiteRunner.java:268)<br> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)<br> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)<br> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)<br> at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)<br> at org.testng.TestNG.run(TestNG.java:1064)<br> at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)<br> at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)<br>[main] ERROR org.opensaml.xmlsec.encryption.support.Decrypter - Error marshalling target XMLObject<br>org.opensaml.core.xml.io.MarshallingException: Unable to root namespaces of cached DOM element, {<a href="http://www.w3.org/2001/04/xmlenc#%7DEncryptionMethod" target="_blank">http://www.w3.org/2001/04/xmlenc#}EncryptionMethod</a><br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.prepareForAdoption(AbstractXMLObjectMarshaller.java:427)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:144)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshallChildElements(AbstractXMLObjectMarshaller.java:271)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshallInto(AbstractXMLObjectMarshaller.java:212)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:118)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:75)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.checkAndMarshall(Decrypter.java:963)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.decryptKey(Decrypter.java:681)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.decryptKey(Decrypter.java:643)<br> at org.wso2.carbon.identity.sso.saml.TestUtils.getDecryptedAssertion(TestUtils.java:141)<br> at org.wso2.carbon.identity.sso.saml.util.EncryptionTests.testSetEncryptedAssertionWithKeyEncryptionAlgorithm(EncryptionTests.java:77)<br> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)<br> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br> at java.lang.reflect.Method.invoke(Method.java:498)<br> at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)<br> at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)<br> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)<br> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)<br> at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)<br> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)<br> at org.testng.TestRunner.privateRun(TestRunner.java:782)<br> at org.testng.TestRunner.run(TestRunner.java:632)<br> at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)<br> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)<br> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)<br> at org.testng.SuiteRunner.run(SuiteRunner.java:268)<br> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)<br> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)<br> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)<br> at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)<br> at org.testng.TestNG.run(TestNG.java:1064)<br> at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)<br> at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)<br>Caused by: org.w3c.dom.DOMException: Unable to resolve namespace prefix ds found on element {<a href="http://www.w3.org/2000/09/xmldsig#%7DDigestMethod" target="_blank">http://www.w3.org/2000/09/xmldsig#}DigestMethod</a><br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:247)<br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:295)<br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:200)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.prepareForAdoption(AbstractXMLObjectMarshaller.java:422)<br> ... 33 more<br>[main] ERROR org.opensaml.xmlsec.encryption.support.Decrypter - Error marshalling EncryptedKey for decryption<br>org.opensaml.xmlsec.encryption.support.DecryptionException: Error marshalling target XMLObject<br> at org.opensaml.xmlsec.encryption.support.Decrypter.checkAndMarshall(Decrypter.java:966)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.decryptKey(Decrypter.java:681)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.decryptKey(Decrypter.java:643)<br> at org.wso2.carbon.identity.sso.saml.TestUtils.getDecryptedAssertion(TestUtils.java:141)<br> at org.wso2.carbon.identity.sso.saml.util.EncryptionTests.testSetEncryptedAssertionWithKeyEncryptionAlgorithm(EncryptionTests.java:77)<br> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)<br> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br> at java.lang.reflect.Method.invoke(Method.java:498)<br> at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)<br> at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)<br> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)<br> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)<br> at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)<br> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)<br> at org.testng.TestRunner.privateRun(TestRunner.java:782)<br> at org.testng.TestRunner.run(TestRunner.java:632)<br> at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)<br> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)<br> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)<br> at org.testng.SuiteRunner.run(SuiteRunner.java:268)<br> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)<br> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)<br> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)<br> at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)<br> at org.testng.TestNG.run(TestNG.java:1064)<br> at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)<br> at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)<br>Caused by: org.opensaml.core.xml.io.MarshallingException: Unable to root namespaces of cached DOM element, {<a href="http://www.w3.org/2001/04/xmlenc#%7DEncryptionMethod" target="_blank">http://www.w3.org/2001/04/xmlenc#}EncryptionMethod</a><br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.prepareForAdoption(AbstractXMLObjectMarshaller.java:427)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:144)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshallChildElements(AbstractXMLObjectMarshaller.java:271)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshallInto(AbstractXMLObjectMarshaller.java:212)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:118)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.marshall(AbstractXMLObjectMarshaller.java:75)<br> at org.opensaml.xmlsec.encryption.support.Decrypter.checkAndMarshall(Decrypter.java:963)<br> ... 27 more<br>Caused by: org.w3c.dom.DOMException: Unable to resolve namespace prefix ds found on element {<a href="http://www.w3.org/2000/09/xmldsig#%7DDigestMethod" target="_blank">http://www.w3.org/2000/09/xmldsig#}DigestMethod</a><br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:247)<br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:295)<br> at net.shibboleth.utilities.java.support.xml.NamespaceSupport.rootNamespaces(NamespaceSupport.java:200)<br> at org.opensaml.core.xml.io.AbstractXMLObjectMarshaller.prepareForAdoption(AbstractXMLObjectMarshaller.java:422)<br> ... 33 more<br>[main] ERROR org.opensaml.xmlsec.encryption.support.Decrypter - Failed to decrypt EncryptedKey, valid decryption key could not be resolved<br><br>org.opensaml.xmlsec.encryption.support.DecryptionException: Valid decryption key for EncryptedKey could not be resolved<br><br> at org.opensaml.xmlsec.encryption.support.Decrypter.decryptKey(Decrypter.java:655)<br> at org.wso2.carbon.identity.sso.saml.TestUtils.getDecryptedAssertion(TestUtils.java:141)<br> at org.wso2.carbon.identity.sso.saml.util.EncryptionTests.testSetEncryptedAssertionWithKeyEncryptionAlgorithm(EncryptionTests.java:77)<br> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)<br> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br> at java.lang.reflect.Method.invoke(Method.java:498)<br> at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)<br> at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)<br> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)<br> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)<br> at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)<br> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)<br> at org.testng.TestRunner.privateRun(TestRunner.java:782)<br> at org.testng.TestRunner.run(TestRunner.java:632)<br> at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)<br> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)<br> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)<br> at org.testng.SuiteRunner.run(SuiteRunner.java:268)<br> at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)<br> at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)<br> at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)<br> at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)<br> at org.testng.TestNG.run(TestNG.java:1064)<br> at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)<br> at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)</div><div><br></div><div><b>Error sources:</b></div><div><b><br></b></div><div><pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"DejaVu Sans Mono";font-size:9pt"><span style="color:rgb(204,120,50)">public void </span><span style="color:rgb(255,198,109)">testSetEncryptedAssertionWithKeyEncryptionAlgorithm</span>() <span style="color:rgb(204,120,50)">throws </span>Exception {<br><br> Security.<span style="font-style:italic">addProvider</span>(<span style="color:rgb(204,120,50)">new </span>BouncyCastleProvider())<span style="color:rgb(204,120,50)">;</span><span style="color:rgb(128,128,128)"><br></span><span style="color:rgb(128,128,128)"> </span>Assertion assertion = SAMLTestAssertionBuilder.<span style="font-style:italic">buildDefaultSAMLAssertion</span>()<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"> </span>SAMLSSOUtil.<span style="font-style:italic">doBootstrap</span>()<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"><br></span><span style="color:rgb(204,120,50)"> </span>prepareForAssertionEncryption()<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"> </span>EncryptedAssertion encryptedAssertion = SAMLSSOUtil.<span style="font-style:italic">setEncryptedAssertion</span>(assertion<span style="color:rgb(204,120,50)">,<br></span><span style="color:rgb(204,120,50)"> </span>TestConstants.<span style="color:rgb(152,118,170);font-style:italic">ASSERTION_ENCRYPTION_ALGO</span><span style="color:rgb(204,120,50)">, </span>TestConstants.<span style="color:rgb(152,118,170);font-style:italic">KEY_ENCRYPTION_ALGO</span><span style="color:rgb(204,120,50)">, </span>TestConstants.<span style="color:rgb(152,118,170);font-style:italic">WSO2_CARBON</span><span style="color:rgb(204,120,50)">,<br></span><span style="color:rgb(204,120,50)"> </span><span style="color:rgb(106,135,89)">"carbon.super"</span>)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"><br></span><span style="color:rgb(204,120,50)"> </span>TestUtils.<span style="font-style:italic">prepareCredentials</span>(<span style="color:rgb(152,118,170)">x509Credential</span>)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"> </span>Assertion decryptedAssertion = TestUtils.<span style="font-style:italic">getDecryptedAssertion</span>(encryptedAssertion<span style="color:rgb(204,120,50)">, </span><span style="color:rgb(152,118,170)">x509Credential</span>)<span style="color:rgb(204,120,50)">; // Error caused here<br></span><span style="color:rgb(204,120,50)"><br></span><span style="color:rgb(204,120,50)"> </span>assertEncryptedSAMLAssertion(assertion<span style="color:rgb(204,120,50)">, </span>encryptedAssertion<span style="color:rgb(204,120,50)">, </span>decryptedAssertion)<span style="color:rgb(204,120,50)">;<br></span>}</pre></div><div><br></div><div><pre style="background-color:rgb(43,43,43);color:rgb(169,183,198);font-family:"DejaVu Sans Mono";font-size:9pt"><span style="color:rgb(204,120,50)">public static </span>Assertion <span style="color:rgb(255,198,109)">getDecryptedAssertion</span>(EncryptedAssertion encryptedAssertion<span style="color:rgb(204,120,50)">, </span>X509Credential x509Credential)<br> <span style="color:rgb(204,120,50)">throws </span>DecryptionException<span style="color:rgb(204,120,50)">, </span>KeyStoreException<span style="color:rgb(204,120,50)">, </span>UnrecoverableKeyException<span style="color:rgb(204,120,50)">, </span>NoSuchAlgorithmException {<br><br> KeyInfoCredentialResolver keyResolver = <span style="color:rgb(204,120,50)">new </span>StaticKeyInfoCredentialResolver(x509Credential)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"> </span>Decrypter decrypter = <span style="color:rgb(204,120,50)">new </span>Decrypter(<span style="color:rgb(204,120,50)">null, </span>keyResolver<span style="color:rgb(204,120,50)">, null</span>)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"><br></span><span style="color:rgb(204,120,50)"> </span>EncryptedKey key = encryptedAssertion.getEncryptedData().getKeyInfo().getEncryptedKeys().get(<span style="color:rgb(104,151,187)">0</span>)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"> </span>SecretKey dkey = (SecretKey) decrypter.decryptKey(key<span style="color:rgb(204,120,50)">, </span>encryptedAssertion.getEncryptedData().<br> getEncryptionMethod().getAlgorithm())<span style="color:rgb(204,120,50)">; // Error caused here<br></span><span style="color:rgb(204,120,50)"> </span>Credential shared = CredentialSupport.<span style="font-style:italic">getSimpleCredential</span>(dkey)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"><br></span><span style="color:rgb(204,120,50)"> </span>decrypter = <span style="color:rgb(204,120,50)">new </span>Decrypter(<span style="color:rgb(204,120,50)">new </span>StaticKeyInfoCredentialResolver(shared)<span style="color:rgb(204,120,50)">, null, null</span>)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"> </span>decrypter.setRootInNewDocument(<span style="color:rgb(204,120,50)">true</span>)<span style="color:rgb(204,120,50)">;<br></span><span style="color:rgb(204,120,50)"> return </span>decrypter.decrypt(encryptedAssertion)<span style="color:rgb(204,120,50)">;<br></span>}</pre></div><div><br></div><div>Useful links found were as below :</div><div><ol><li><a href="https://shibboleth.1660669.n2.nabble.com/Error-on-signing-outbound-SAML-message-td7621620.html" target="_blank">https://shibboleth.1660669.n2.nabble.com/Error-on-signing-outbound-SAML-message-td7621620.html</a></li><li><a href="https://shibboleth.1660669.n2.nabble.com/OpenSAML-V3-Problems-while-marshaling-encrypted-assertion-td7632834.html" target="_blank">https://shibboleth.1660669.n2.nabble.com/OpenSAML-V3-Problems-while-marshaling-encrypted-assertion-td7632834.html</a></li></ol><div>These
links pointed out that there is a clash between xmlsec-1.5.6 and
xmlsec-2.0.5. but the thing is when i check the dependency tree I can
only find xmlsec-2.0.5. <br><div>Can anyone point out what this issue really is?<br><br></div><div>Any answers would be appreciated,<br></div><div>Deshan Koswatte</div></div></div></div>