我有一个已签名的由private_key.pfx签名的xml文档。Java使用公钥验证xml数字签名
现在我已经从开始public_key.cert文件:
====== BEGIN OF =======
jksbfjkbckcnJKNBCKSJJksncs==
====== END OF==========
现在,我想用我的public_key.cer
我怎样才能做到这一点,以验证签名的XML文档?
请帮助
我有一个已签名的由private_key.pfx签名的xml文档。Java使用公钥验证xml数字签名
现在我已经从开始public_key.cert文件:
====== BEGIN OF =======
jksbfjkbckcnJKNBCKSJJksncs==
====== END OF==========
现在,我想用我的public_key.cer
我怎样才能做到这一点,以验证签名的XML文档?
请帮助
你需要去寻找<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。