我将其发布在 SO 中是因为我无法在任何地方找到解决方案,并且花了很多时间来找出问题所在。我希望一些遇到同样问题的开发人员将来能找到这篇文章:)
C14N 转换在 .NET 和 Java 中的实现方式似乎有所不同。两种不同的“标准”。
如果 Java 客户端可能需要验证包含的 xml 签名,则切勿手动将 xmlns:xml 命名空间添加到 xml 文档中。 Java 似乎在验证包含的签名之前剥离了 xmlns:xml 声明(!)
最佳答案
将此归咎于 XML 规范化规范。第 4.6 节(多余的命名空间声明)首先指出:
Unnecessary namespace declarations are not made in the canonical form.
这意味着 XML 命名空间的声明被删除,然后说
The root document element is handled specially since it has no parent element. All namespace declarations in it are retained, except the declaration of an empty default namespace is automatically omitted.
这意味着 XML 命名空间的声明被保留。
编写规范很难!
关于java - Xml 签名在 .NET 中验证正常,但在 Java 中验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232924/