问题标签 [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.
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 使用其他方法要好得多,但我不知道该怎么做。
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”
结果是相同的摘要(与我根据我的示例所期望的不同)。我不知道这些摘要是从哪里来的。当我尝试手动计算时,结果就是示例中的结果。
我想我对这一切没有一些概念,因为使用两个不同的库我得到了相同的值,所以我不认为问题是这个库的代码。
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 两行更高的代码?但不是吗?
谁能指出我错过了什么?我将永远感激不尽。
java - Java DOM appendChild:命名空间和签名文档
我在生成带有签名节点的文档时遇到问题。我有一堆以文本格式签署的 XML。他们的签名是有效的,我已经用 xmlsec1 对其进行了测试。我必须加载所有 XML 并将它们放入另一个 XML 文档中,以便将其发送到另一个服务。所以,首先我创建容器文档(“sobre”是一个局部变量,一个 JAXB 根元素):
然后我将 XML 添加到容器中:
最后我从容器文档中获取 xml:
关键是我正在修改子节点,没有命名空间,因此提取节点的签名验证失败。下面是我作为子节点添加的 XML 的摘录:
但是当在容器文档中导入节点时,它会被修改(实际上我注意到它松散了命名空间声明):
如何将节点添加到保留命名空间声明的容器中?更一般地说,我可以添加它以确保它是“按原样”添加的,而不进行任何修改吗?(我正在使用 glassfish 4 和 Java 7)
谢谢
编辑:
这是 loadXMLFromString 的代码:
c# - 同一个 XML 文档的不同 DigestValue
文档的摘要值为HP855e32qDMu4fzAZr+wXRqfeLh9HTpnAlAFy/jDg= 当我尝试使用下面的代码检查它时,结果是Ppk6zE8XY4zaIPco/fY/sSKog3imkmko8CMAIHVNwTw= 我认为问题出在包含空格的 Body 标记中。如果在没有空格的情况下签署此文档,则摘要值相等。
谁能看出错误?
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.
xpath - 使用 XAdES4j 通过 xpath 转换生成分离签名时出错
我正在使用 xades4j 来生成 xades 签名。我想在参考中包含 xpath 转换。我的问题是它是一个分离的签名并且 xpath 具有命名空间......
我尝试使用以下 xml(摘录):
如果我尝试使用以下代码对该文档进行信封签名:
它工作正常,参考如下所示:
但是,如果我尝试使用分离版本,请使用以下代码:
我收到错误:前缀必须解析为命名空间:t
我的问题类似于这里描述的问题:namespace and xpath 但是没有答案,我所拥有的有点不同。我邀请这个问题的答案可能对我有帮助......
那么,如何在 xades4j 中将命名空间设置为转换?
xades4j - xades4j:如何在 signedproperties 参考中使用转换生成签名
我收到了一个示例 xades 签名,我必须使用 xades4j(“像模板”)来复制它。
示例签名是这样的(摘录):
我知道这个引用不符合 xades,因为那里没有属性 Type。
我的问题是该参考中的转换。我无法找到如何使用 xades4j 设置此选项。这可以做到吗?
另外,我不知道这是否有意义,因为在签名顶部,它说规范化方法是一种,然后在签名属性参考中它说规范化方法是另一种......我读对了吗?
.net - 使用 dsig 前缀验证 SignedXml
我正在尝试使用 dsig 前缀生成 SignedXML(感谢 George Dima 在xml 签名 DS 前缀中的回答?)。
问题是 CheckSignature 方法现在返回 false - 我认为这个方法可能也需要被覆盖,就像 ComputeSignature 方法一样,但是我不知道如何做到这一点。
是否有人对如何生成带前缀的 SignedXML 有完整的答案,但也可以使用 CheckSignature 进行验证?
我可以向您保证,我已经浏览了有关此主题的所有相关帖子,但我没有遇到任何提供完整解决方案的帖子:
谢谢!
php - Java中XML签名中的DigestValue与PHP不同
这是在java中计算的摘要值
这是我计算的摘要值
给我
这是我的 xml 文件