Java使用公钥验证xml数字签名

时间:2017-03-29 11:27:40

标签: java digital-signature

我有一个签名的xml文档,该文档已由private_key.pfx签名。

现在我有一个从以下开始的public_key.cert文件:

====== BEGIN OF =======
jksbfjkbckcnJKNBCKSJJksncs==

====== END OF========== 

现在,我想使用public_key.cer

验证签名的xml文档

我该怎么做?

请帮助

1 个答案:

答案 0 :(得分:0)

您需要在签名文档中查找<Signature>元素。您可以使用Java XML数字签名API中的方法来验证签名,例如XMLSignature.validate()

如果您查看此文章:Programming With the Java XML Digital Signature API

  

验证XML签名的关键步骤。

// Find Signature element.
NodeList nl =
    doc.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
if (nl.getLength() == 0) {
    throw new Exception("Cannot find Signature element");
}

// Create a DOMValidateContext and specify a KeySelector
// and document context.
DOMValidateContext valContext = new DOMValidateContext
    (new X509KeySelector(), nl.item(0));

// Unmarshal the XMLSignature.
XMLSignature signature = fac.unmarshalXMLSignature(valContext);

// Validate the XMLSignature.
boolean coreValidity = signature.validate(valContext);
     

首先,您必须找到您的Signature元素的位置   希望验证。一种方法是使用DOM   getElementsByTagNameNS方法如代码示例5所示。第二个   代码块创建一个包含的DOMValidateContext对象   KeySelector对象和对Signature元素的引用。该   KeySelector对象的目的是使用获取公钥   KeyInfo元素中的信息并将其交回以用作   验证密钥。下一节将更多地讨论KeySelectors   详情。最后两行代码解组并验证   签名。如果签名有效,则validate方法返回true   如果无效,则为假。

相关问题