簡體   English   中英

Apache Santuario和Java XML數字簽名API之間的XML簽名不同

[英]Different XML signature between Apache Santuario and Java XML Digital Signature API

我做了兩個應該做同樣事情的實現:用給定的X509證書對XML文件簽名。

  • 我使用本地Java XML數字簽名API(來自javax.xml.crypto.dsi)進行了第一個操作。
  • 我在Kotlin中使用Apache Santuario XML Security版本2.0.3實現了第二個目標(我的目標是在Android中運行它)。

發生的事情是,對於要簽名的完全相同的XML文件,它為SignatureValue生成了不同的值。 但XML的所有其他屬性完全相同:

  • DigestValue相同,這表明文件相同。
  • KeyInfo / X509Data / X509Certificate相等,因此證書肯定相同。
  • CanonicalizationMethod,SignatureMethod,DigestMethod和Transform算法完全相同。

我甚至嘗試了小的XML(例如,僅<x />標記),但SignatureValue從未匹配。

除SignatureValue之外,是否有所有<Signature>標記中的所有數據都匹配的情況?

我找到了解決方案。 發生這種情況是因為Apache Santuario在簽名標簽中添加了換行符。 因此,如果將Apache生成的簽名和Java XML簽名生成的簽名進行比較,則<SignedInfo>標記的內容將有所不同。

為了解決這個問題,我在簽名之前已放置了以下代碼。

System.setProperty("org.apache.xml.security.ignoreLineBreaks", "true")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM