Java 如何使用Apache Santuario验证SAML EntitiesDescriptor签名
目的是使用stux处理器验证saml EntitiesDescriptor签名,以确保使用的内存量较低 我一直在使用ApacheSantuario的以下代码 请有人建议如何将ApacheSantuario与SAML实体描述符文件一起使用 可以找到签名 URL=新URL(“”)Java 如何使用Apache Santuario验证SAML EntitiesDescriptor签名,java,xml,Java,Xml,目的是使用stux处理器验证saml EntitiesDescriptor签名,以确保使用的内存量较低 我一直在使用ApacheSantuario的以下代码 请有人建议如何将ApacheSantuario与SAML实体描述符文件一起使用 可以找到签名 URL=新URL(“”) //验证 List nametosign=new ArrayList(); 添加(新的QName(“urn:oasis:names:tc:SAML:2.0:metadata”,“EntitiesDescriptor”);
//验证
List nametosign=new ArrayList();
添加(新的QName(“urn:oasis:names:tc:SAML:2.0:metadata”,“EntitiesDescriptor”);
试试(InputStream=url.openStream()){
X509Certificate cert=getCertificate();
签名。使用STAX(流、名称签名、证书)进行验证;
}
在saml文档中,签名位于根元素urn:oasis:names:tc:saml:2.0:metadata:EntitiesDescriptor上,而在中,签名位于子元素(urn:example:po:PaymentInfo)上
在Colm O Heigerataigh的示例中,我尝试对根元素urn:example:po:PurchaseOrder进行签名,并在本文中报告了相同的错误
我遵循Colm O Heigerataigh的建议,使用信封签名在SignatureUtils中的根元素上签名:
for (QName nameToSign : namesToSign) {
SecurePart securePart = new SecurePart(nameToSign, SecurePart.Modifier.Content);
String[] transforms = new String[2];
transforms[0] = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
transforms[1] = "http://www.w3.org/2001/10/xml-exc-c14n#";
securePart.setTransforms(transforms);
properties.addSignaturePart(securePart);
}
并且能够使用SignatureUtils#verifyUsingStAX
然后,我删除了文档中的xml签名,使用信封签名对其进行签名,并设法验证签名。因此,我建议您使用信封签名对根元素进行签名。谢谢您的帖子,但我需要验证以下文档的签名,而不是签名。
for (QName nameToSign : namesToSign) {
SecurePart securePart = new SecurePart(nameToSign, SecurePart.Modifier.Content);
String[] transforms = new String[2];
transforms[0] = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
transforms[1] = "http://www.w3.org/2001/10/xml-exc-c14n#";
securePart.setTransforms(transforms);
properties.addSignaturePart(securePart);
}