Apache Santuario和Java XML数字签名API之间的XML签名不同

时间:2018-10-26 13:08:42

标签: java xml apache digital-signature xml-signature

我做了两个应该做同样事情的实现:用给定的X509证书对XML文件签名。

  • 我使用本地Java XML数字签名API(来自javax.xml.crypto.dsi)进行的第一个操作。
  • 我在Kotlin中实现的第二个目标(我的目标是在Android中运行它),使用的是Apache Santuario XML Security版本2.0.3。

发生的事情是,对于要签名的完全相同的XML文件,它为SignatureValue生成了不同的值。但是XML的所有其他属性都完全相同:

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

我甚至尝试使用小型XML(例如,仅使用标记),但SignatureValue从未匹配。

除SignatureValue之外,是否所有其他标记中的数据都匹配?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。发生这种情况是因为Apache Santuario在签名标签中添加了换行符。因此,如果将Apache生成的标记和Java XML签名生成的标记进行比较,则标记的内容将有所不同。

要解决此问题,我在签名前已放置了以下代码行。

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