gpt4 book ai didi

java - 当 namespace 前缀更改时,如何验证 XML 签名?

转载 作者:行者123 更新时间:2023-11-30 08:28:14 25 4
gpt4 key购买 nike

全部,

我正在测试一些验证 XML 数字签名的 Java 代码。我在 JDK 中使用标准的 JSR 105 API。我正在使用独家规范化方法和信封签名。传入的 XML 消息看起来像这样:

<doc xmlns:a="urn:abc.my.domain.com">
<a:x>12345</a:x>
</doc>

此消息通过具有各种 XML 解析器(CXF、JAXB、XSLT 等)的复杂系统并以某种方式更改为:

<doc xmlns:b="urn:abc.my.domain.com">
<b:x>12345</b:x>
</doc>

更改后,附加的 XML 签名将不再有效。引用无效。

在我看来,即使这个 XML 文档发生了变化,它看起来还是等效的 XML。唯一改变的是 namespace 前缀。我不确定 namespace 前缀更改是否符合 XML 规范化规则。我的问题是:

  1. 这应该有效吗?
  2. 我怎样才能让它发挥作用(转换等)?

感谢任何帮助,

g8tor保罗

最佳答案

我希望我有更好的消息告诉你......

不幸的是,XML 签名的标准算法 (http://www.w3.org/TR/xmldsig-core/#sec-AlgID) 对 XML 文档的规范化表示 (http://www.w3.org/TR/2001/REC-xml-c14n-20010315) 进行操作,不是其语义。唉,命名空间前缀被认为是文档签名内容的一部分。

(有一些论点涉及可能在字符串内部使用命名空间前缀并从上下文隐式绑定(bind),例如在 XSLT 中。这实际上是一种不好的做法,但 XML 推荐标准建立了它并且它已经变得普遍。 .. 完成后,如果不知道特定类型文档的完整语义,就不可能可靠地规范化。)

因此,尽管最初的意图是前缀只是命名空间 URI 的“语法糖”,但在实践中不小心更改它们确实有破坏某些工具的风险,特别是更改它们总是会更改 XML 签名。

这种情况是 XML 以递增的和有些不自然的顺序快速发展的产物。将 XML 命名空间、XML 模式和 XML 信息集作为事后的想法确实允许更快地将 XML 提供给用户并帮助它获得接受......但也使得将这些更复杂的语义改造为现有的 XML 语法更加困难,并且导致一定程度的阻抗不匹配并导致疼痛,因为事情不像他们应该的那样顺利。有一天可能会出现一个 XML 2.0,它从信息集开始并从中派生出语法和工具,但在那一天之前,我们将遇到一些情况,在这些情况下,显然需要的工作要么比必要的多得多,要么根本不需要可能。

关于java - 当 namespace 前缀更改时,如何验证 XML 签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20353346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com