gpt4 book ai didi

java - XML 签名引用摘要使用父命名空间

转载 作者:行者123 更新时间:2023-12-01 12:13:09 25 4
gpt4 key购买 nike

我需要用 Java 签署一个 XML 文件,该文件需要包含 3 个 Reference
其中 2 个有效(预期摘要 == 实际摘要),但有一个无效。
XML 的相关部分如下所示:

<QualifyingProperties xmlns="http://uri.etsi.org/01903/v1.3.2#" Target="Signature1">
<SignedProperties Id="SignedProperties_1">
<SignedSignatureProperties>
<SigningTime>2014-11-27T13:49:36</SigningTime>
</SignedSignatureProperties>
</SignedProperties>
</QualifyingProperties>

Reference 仅引用Element“SignedProperties”及其子项。
如您所见,“QualifyingProperties”Element 定义了一个命名空间 (xmlns="http://uri.etsi.org/01903/v1.3.2#"),并且我我猜这就是问题所在:

查看我发现的日志后,“预摘要”值如下所示:

<SignedProperties xmlns="http://uri.etsi.org/01903/v1.3.2#" Id="SignedProperties_1">
<SignedSignatureProperties>
<SigningTime>2014-11-27T13:49:36</SigningTime>
</SignedSignatureProperties>
</SignedProperties>

虽然真实文件中的“SignedProperties”Element不包含命名空间,但其父级包含。
我发现,实际摘要与“Pre-Digest”值的 SHA-256 匹配,而预期摘要与真实文件(不带命名空间)的 SHA-256 匹配。

使用以下代码创建引用:

Reference sigPropRef = fac.newReference("#SignedProperties_1", fac.newDigestMethod(DigestMethod.SHA256, null),
Collections.singletonList(sigPropTransform), "http://uri.etsi.org/01903#SignedProperties", "reference-signedpropeties"
);

其中 sigPropTransformCanonicalizationMethod.EXCLUSIVE Transform

我的问题是,我该如何解决这个问题,即在计算摘要之前如何防止将命名空间添加到“SignedProperties”Element

如果您需要任何其他信息,请发表评论,我对这个主题还很陌生,所以我不确定哪些信息相关,哪些信息不相关。
非常感谢!

编辑:玩了一下之后,在我看来,“实际摘要”是 validator 计算的摘要,而“预期摘要”是“DigestValue”内的摘要“元素
这意味着,我的文件内的摘要值与引用的文件部分的 SHA-256 相匹配,但 validator 出于某种原因计算了父命名空间的摘要。
所以我想我需要的是在我的摘要计算中包含父 namespace 。

编辑:我继续玩,现在我不仅有 validator 的预摘要值,还有我的“摘要计算”之一。
那一个给了我:

<SignedProperties Id="SignedProperties_1"><SignedSignatureProperties><SigningTime>2014-11-27T15:51:26</SigningTime></SignedSignatureProperties></SignedProperties>  

当我给它以下Transform时:

Transform sigPropTransform = fac.newTransform(CanonicalizationMethod.EXCLUSIVE, (ExcC14NParameterSpec)null);  

并且:

<SignedProperties xmlns:ds="some-url" xmlns:msg="some-other-url" Id="SignedProperties_1"><SignedSignatureProperties><SigningTime>2014-11-27T15:52:49</SigningTime></SignedSignatureProperties></SignedProperties>

当我不给它任何Transform时。
命名空间 xmlns="http://uri.etsi.org/01903/v1.3.2#" 从未包含在内。

如何包含它?

最佳答案

恐怕您无法阻止添加命名空间 - 它是在规范化期间添加的。 This当我遇到同样的问题时,有人帮助了我;)

关于java - XML 签名引用摘要使用父命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27171847/

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