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

时间:2018-03-11 00:37:30

标签: java xml

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

我一直在使用以下代码与Apache Santuario的https://developer.android.com/training/improving-layouts/reusing-layouts.html没有任何运气。

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

可以找到SignatureUtils example

网址网址=新网址(“here”);

// Validation
List<QName> namesToSign = new ArrayList<QName>();
namesToSign.add(new QName("urn:oasis:names:tc:SAML:2.0:metadata", "EntitiesDescriptor"));

try (InputStream stream = url.openStream()) {
  X509Certificate cert = getCertificate();
  SignatureUtils.verifyUsingStAX(stream, namesToSign, cert);
}

1 个答案:

答案 0 :(得分:0)

在你的saml文档中,签名位于根元素urn:oasis:names:tc:SAML:2.0:metadata:EntitiesDescriptor,而在Colm O hEigeartaigh's test中,签名位于子元素上(urn:example: PO:PaymentInfo)

我尝试签署根元素urn:example:po:在Colm O hEigeartaigh示例中的PurchaseOrder,并在此blog comment中报告了相同的错误。

我按照Colm O hEigeartaigh的建议,使用封装签名来签署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签名,使用封装签名对其进行签名并管理以验证签名。因此,我建议您使用封装签名来签署根元素。