30秒到達戰(zhàn)場
2022-05-25 10:57:37
這是我正在嘗試驗證xml簽名的代碼。對于一個包含使用簽名算法證書簽名的 xml 的 xml 文件md2RSA,它可以正常工作。但是另一個包含使用簽名算法證書簽名的xml的xml SHA256withRSA,它失敗了。這是我試圖用來驗證簽名驗證的代碼: public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XMLSignatureException, XMLSecurityException { File f = new File("F:\\workspace\\signeddocument2.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); dbFactory.setNamespaceAware(true); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); org.w3c.dom.Document doc = dBuilder.parse(f); doc.getDocumentElement().normalize(); Element sigElement = (Element) doc.getElementsByTagNameNS(Constants.SignatureSpecNS, Constants._TAG_SIGNATURE) .item(0); XMLSignature signature = new XMLSignature(sigElement, f.toURI().toURL().toString()); boolean verified = false; verified = signature.checkSignatureValue(signature.getKeyInfo().getPublicKey()); if (verified) { System.out.println("Signature verified successfully"); } else { System.out.println("Signature verification failed."); } }
2 回答
瀟瀟雨雨
TA貢獻1833條經(jīng)驗 獲得超4個贊
似乎您的 xml 中缺少一個標簽。
我在這里找到了一些信息:https ://www.w3.org/TR/2009/WD-xmldsig-core2-20091022/
如果您搜索“signname”,您會看到該規(guī)范需要一個標簽:<C ID="signme" xmlns="&baz;"/>有完整的規(guī)范:
<A xmlns:n1="&foo;">
<B xmlns:n2="&bar;">
<Signature xmlns="&dsig;"> ...
<Reference URI="#signme"/> ...
</Signature>
<C ID="signme" xmlns="&baz;"/>
</B>
</A>
您的 XML 沒有此標記??赡苁窃?。
阿晨1998
TA貢獻2037條經(jīng)驗 獲得超6個贊
我弄清楚了signature驗證失敗的原因。XML與我試圖驗證的 XML 相比,我正在簽名的名稱空間不同signature。這transformation導(dǎo)致了signature失敗。一旦我弄清楚了轉(zhuǎn)換,signature驗證就起作用了。
添加回答
舉報
0/150
提交
取消
