问题标签 [xml-dsig]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
784 浏览

java - 旧规范的 javax.xml.crypto 自定义 CanonicalizationMethod

我正在尝试验证 xml 签名

但我得到一个例外:

javax.xml.crypto.MarshalException: java.security.NoSuchAlgorithmException: no such algorithm: http://www.w3.org/TR/1999/WD-xml-c14n-19991115 for provider XMLDSig

我不喜欢更改 xml 输入的选项。看起来实现一些自定义规范化方法或强制 java 使用其他方法要好得多,但我不知道该怎么做。

0 投票
1 回答
979 浏览

java - Java xmldsig DigestValue ( jsr105Provider apche, oracl )

我正在尝试实现一个 java webservice 客户端。Soap 消息已签名(内部分离签名)。

我有一个验证为正确签名的有效消息示例。

当我尝试我的代码时,消息未正确签名。试图跟踪问题,我意识到问题(或我的错误)与 .

在正常工作的示例中,我可以“验证” DigestValue 的创建方式:

引用 URI 是消息正文:

如果我手动“规范化”这个,并尝试使用 apli sha1,我得到的结果正是 DigestValue。

手工规范化的soapenv:Body:

生成sh1值的命令:(用can.body存储在bodyib.txt previos字符串中)

输出:

当我签署我的消息时,我得到以下参考:

我模仿所有名称空间和 Id 以获得与我的示例完全相同的肥皂消息。所以我得到了愚蠢的soapenv:Body:

如果我手动对其进行规范化,我会得到与之前完全相同的字符串,但参考中显示的 DigestValue 不一样。

我已经尝试过使用两个不同的 jsr105 提供程序:

甲骨文:“org.jcp.xml.dsig.internal.dom.XMLDSigRI” Apcher santuario(1.5.6):“org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI”

结果是相同的摘要(与我根据我的示例所期望的不同)。我不知道这些摘要是从哪里来的。当我尝试手动计算时,结果就是示例中的结果。

我想我对这一切没有一些概念,因为使用两个不同的库我得到了相同的值,所以我不认为问题是这个库的代码。

0 投票
1 回答
991 浏览

java - xades4j.UnsupportedAlgorithmException:XML 签名提供程序上不支持的转换

我正在尝试为给定的 blob 创建 XAdES-BES 签名。对于这个签名,我需要在内容签名之前添加两个转换:Base64(http://www.w3.org/2000/09/xmldsig#base64)和一个自定义的(称为可选放气) .

问题在于该可选转换。我试图弄清楚如何实现自定义转换,注册它,最后让 Xades4J 使用它。

到目前为止,我想了很多(感谢谷歌和很多时间),所以我大致做到了这一点:我有一个 Provider 类,它在构造函数中放置了新的 TransformService;在我的主代码中,我将我的 Provider 添加到 Security 实例中;然后,我尝试将转换添加到我实际的待签名对象。

不幸的是,我总是遇到同样的错误:

所以,我的代码看起来像这样(缩写为我认为这里是必要的):

TransformService班级:

Provider子类:

最后是我的主Test类,其中包含实际的签名。没有那个变换,它就可以工作(但是,它不会添加变换,这是必要的)。所以 Base64 有效。

正如你所看到的,我打印了一些东西。例如,我记录了安装工作正常,并且还记录了已安装的提供程序。我得到这个作为输出:

所以据我所见,提供者已成功注册,可以毫无问题地加载转换服务,......所以我真的不明白发生了什么?

我也检查了 Xades4j 的源代码,在线内部发生的事情.withTransform(new GenericAlgorithm("urn:xml:sig:transform:optional-deflate"))非常简单:

抛出错误的确切行是transforms.addTransform(dObjTransf.getUri()). 这个transforms对象是一个'标准' apache 对象(org.apache.xml.security.transforms.Transforms对象)。所以我猜它应该能够获得与我在代码中所做的相同的 TransformService 两行更高的代码?但不是吗?

谁能指出我错过了什么?我将永远感激不尽。

0 投票
1 回答
616 浏览

java - Java DOM appendChild:命名空间和签名文档

我在生成带有签名节点的文档时遇到问题。我有一堆以文本格式签署的 XML。他们的签名是有效的,我已经用 xmlsec1 对其进行了测试。我必须加载所有 XML 并将它们放入另一个 XML 文档中,以便将其发送到另一个服务。所以,首先我创建容器文档(“sobre”是一个局部变量,一个 JAXB 根​​元素):

然后我将 XML 添加到容器中:

最后我从容器文档中获取 xml:

关键是我正在修改子节点,没有命名空间,因此提取节点的签名验证失败。下面是我作为子节点添加的 XML 的摘录:

但是当在容器文档中导入节点时,它会被修改(实际上我注意到它松散了命名空间声明):

如何将节点添加到保留命名空间声明的容器中?更一般地说,我可以添加它以确保它是“按原样”添加的,而不进行任何修改吗?(我正在使用 glassfish 4 和 Java 7)

谢谢

编辑:

这是 loadXMLFromString 的代码:

0 投票
1 回答
1079 浏览

c# - 同一个 XML 文档的不同 DigestValue

在这里签署了 xml 文档

文档的摘要值为HP855e32qDMu4fzAZr+wXRqfeLh9HTpnAlAFy/jDg= 当我尝试使用下面的代码检查它时,结果是Ppk6zE8XY4zaIPco/fY/sSKog3imkmko8CMAIHVNwTw= 我认为问题出在包含空格的 Body 标记中。如果在没有空格的情况下签署此文档,则摘要值相等。

谁能看出错误?

0 投票
1 回答
1326 浏览

c++ - Verify XML Signature with libxmlsec1

I can verify a XML Signature with Apache Santuario XML security for Java. The code is like:

Now, I want to implement it in C++. I've tried Apache Santuario XML security for C++, but it failed because it said that it doesn't support c14n11 (I hope I'm wrong). So, I changed to use libxmlsec1, but the problem is I don't know how to implement with libxmlsec1. It doesn't have to verify all the files of Reference element. I just want to verify SignedInfo element. I've only done the following code.

It fails with the following errors:

Please does anyone know how to make xmlsec1 read all the x509Certificate elements from the signature.xml, and verify signature.xml?

The following is signature.xml.

0 投票
1 回答
559 浏览

xpath - 使用 XAdES4j 通过 xpath 转换生成分离签名时出错

我正在使用 xades4j 来生成 xades 签名。我想在参考中包含 xpath 转换。我的问题是它是一个分离的签名并且 xpath 具有命名空间......

我尝试使用以下 xml(摘录):

如果我尝试使用以下代码对该文档进行信封签名:

它工作正常,参考如下所示:

但是,如果我尝试使用分离版本,请使用以下代码:

我收到错误:前缀必须解析为命名空间:t

我的问题类似于这里描述的问题:namespace and xpath 但是没有答案,我所拥有的有点不同。我邀请这个问题的答案可能对我有帮助......

那么,如何在 xades4j 中将命名空间设置为转换?

0 投票
1 回答
1230 浏览

xades4j - xades4j:如何在 signedproperties 参考中使用转换生成签名

我收到了一个示例 xades 签名,我必须使用 xades4j(“像模板”)来复制它。

示例签名是这样的(摘录):

我知道这个引用不符合 xades,因为那里没有属性 Type。

我的问题是该参考中的转换。我无法找到如何使用 xades4j 设置此选项。这可以做到吗?

另外,我不知道这是否有意义,因为在签名顶部,它说规范化方法是一种,然后在签名属性参考中它说规范化方法是另一种......我读对了吗?

0 投票
0 回答
407 浏览

.net - 使用 dsig 前缀验证 SignedXml

我正在尝试使用 dsig 前缀生成 SignedXML(感谢 George Dima 在xml 签名 DS 前缀中的回答?)。

问题是 CheckSignature 方法现在返回 false - 我认为这个方法可能也需要被覆盖,就像 ComputeSignature 方法一样,但是我不知道如何做到这一点。

是否有人对如何生成带前缀的 SignedXML 有完整的答案,但也可以使用 CheckSignature 进行验证?

我可以向您保证,我已经浏览了有关此主题的所有相关帖子,但我没有遇到任何提供完整解决方案的帖子:

.NET 不支持非标准 XMLDSIG 签名元素名称

生成带有“ds”前缀的xml签名

生成带有“ds”前缀的 XADES-BES

生成带有“ds”前缀的xml签名

.NET 签名的 XML 前缀

谢谢!

0 投票
1 回答
461 浏览

php - Java中XML签名中的DigestValue与PHP不同

这是在java中计算的摘要值

这是我计算的摘要值

给我

这是我的 xml 文件