【问题标题】:Different XML signature between Apache Santuario and Java XML Digital Signature APIApache Santuario 和 Java XML 数字签名 API 之间的不同 XML 签名
【发布时间】:2018-10-26 13:08:41
【问题描述】:

我做了两个应该做同样事情的实现:用给定的 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 除外?

【问题讨论】:

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


【解决方案1】:

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

为了解决这个问题,我在签名之前添加了以下代码行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多