2017-03-29 42 views
0

我有一个已签名的由private_key.pfx签名的xml文档。Java使用公钥验证xml数字签名

现在我已经从开始public_key.cert文件:

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

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

现在,我想用我的public_key.cer

我怎样才能做到这一点,以验证签名的XML文档?

请帮助

回答

0

你需要去寻找<Signature>元素已签署的文件内。您可以使用Java XML Digital Signature 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); 

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