Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Apache Santuario验证SAML EntitiesDescriptor签名_Java_Xml - Fatal编程技术网

Java 如何使用Apache Santuario验证SAML EntitiesDescriptor签名

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”);

目的是使用stux处理器验证saml EntitiesDescriptor签名,以确保使用的内存量较低

我一直在使用ApacheSantuario的以下代码

请有人建议如何将ApacheSantuario与SAML实体描述符文件一起使用

可以找到签名

URL=新URL(“”)

//验证
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);
    }