java - Xml 签名在 .NET 中验证正常,但在 Java 中验证失败

标签 java .net xml digital-signature

我将其发布在 SO 中是因为我无法在任何地方找到解决方案,并且花了很多时间来找出问题所在。我希望一些遇到同样问题的开发人员将来能找到这篇文章:)

C14N 转换在 .NET 和 Java 中的实现方式似乎有所不同。两种不同的“标准”。

如果 Java 客户端可能需要验证包含的 xml 签名,则切勿手动将 xmlns:xml 命名空间添加到 xml 文档中。 Java 似乎在验证包含的签名之前剥离了 xmlns:xml 声明(!)

enter image description here

最佳答案

将此归咎于 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/

相关文章:

c# - 我如何使用 ASP .NET Framework 4.6 使用 graphql api

xml - 为什么在使用 "ant"命令 build.xml 时出现导入错误?

wpf - 使用 LINQ XML 绑定(bind)组合框

java - RegEx 在 Java 中使用通配符(仅最后一个索引)验证 IP 地址

Java方法覆盖,子类采用参数类型的父类(super class)型

c# - 如何使用 C# 从 mysql 数据库导出/下载表?

xml - 将结构作为参数传递给函数,并返回相应结构的 slice

java - Swing 时间选择器

Java多线程执行器InvokeAll问题

c# - 表布局面板中的居中复选框