问题标签 [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 回答
132 浏览

x509certificate - 将 CMS(基于 PKCS#7)签名转换为适合 xmldsig 的值场地

我有 CMS(基于 PKCS#7)签名作为输入,我想从中创建等效的 xmldsig。我可以从 CMS 消息中提取 X509 证书,但我看不到如何提取签名哈希(在 xmldsig 字段中重用)。有没有办法从 CMS 消息中提取签名哈希?

0 投票
1 回答
892 浏览

java - 如何在 Java 中生成内部分离的 XML 签名

我无法理解如何将签名节点作为数据节点的兄弟节点。我发现的示例来自 Oracle,但仅涵盖了正常的分离签名,其中 XML 作为 URI 传递给 Reference 对象。

参考 Oracle 示例:https ://docs.oracle.com/javase/8/docs/technotes/guides/security/xmldsig/GenDetached.java

0 投票
0 回答
247 浏览

java - Soap UI 使用肥皂信封中的什么来创建 XMLDsig 签名?

Soap UI 使用肥皂信封中的什么来创建 XMLDsig 签名?或相反的问题,如何验证 Soap XMLDsig 响应的签名?我之所以问,是因为我只设法使用 Soap UI 获得了正确的响应。

假设我们在 SoapUI 中生成了这个请愿书:

soapui 配置签名

我有这个java代码来生成二进制安全令牌(它与soapui生成的匹配,因为相同的证书),但是使用相同的信封我得到不同的签名和摘要值:

Java 代码:https ://pastebin.com/06NUwkLW

那么,我应该使用什么String plaintext来获得正确的签名和摘要值?

我已经尝试过使用 cxf3.4 和 axis2 客户端(使用 wsdl2java),但是添加 WS-Security 非常复杂,我只找到用户名/密码验证,这不是我需要的。

0 投票
1 回答
323 浏览

c# - 使用 RSACryptoServiceProvider 从 SignedInfo 计算 SignatureValue

我是 XML 数字签名主题的新手。在阅读了一些教程后,我决定做一些实践活动,并尝试遵循一些示例来提高我的理解。有一点我需要帮助。

这是我正在尝试的示例:

https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-sign-xml-documents-with-digital-signatures https://docs.microsoft.com/en-us/dotnet /standard/security/how-to-verify-the-digital-signatures-of-xml-documents

要签名的数据很简单(从站点复制/粘贴会产生 TAB 字符,因此我在将文件保存到磁盘之前将所有 TAB 转换为单个空格):

当我使用此数据运行示例代码时,会生成以下Signature元素并将其添加到根元素内的文件中:

我手动对输入进行规范化并编写了一些代码,并验证了规范化输入的 SHA256 摘要确实与其中的匹配DigestValueSignature即,到目前为止,我对事情如何在幕后工作的理解,至少在规范化方面是正确的)。但是,到目前为止,我验证签名值的尝试都失败了。无论我做什么,我都无法获得 API 产生的签名值。当然,示例的验证部分(使用 API)有效,并表明签名有效。

这是“手动”验证的代码:

SignedInfo.xml如下:

我在https://www.di-mgt.com.au/xmldsig2.html找到了一个指南,其中提到了在规范化期间传播命名空间SignedInfo,所以我也尝试了以下SignedInfo.xml方法:

这仍然不会产生与示例中的 API 相同的签名。

我将不胜感激任何帮助找出我做错了什么。

0 投票
1 回答
368 浏览

c# - C#- 如何在没有 URI 属性的情况下签署证书 XML 文档标签?

是否可以在不将 URI 属性传递给<Reference>标记的情况下签署 XML 文档?

我能够<Invoice>使用KeyInfoX509Data证书和使用 C# 的 XAdEs 格式签署整个 XML 文档类型。签名有效,SignedXml.CheckSignature()返回true。问题是负责验证签名的代理不支持空属性,例如:

我决定在将文档发送到代理之前删除 URI 属性,但没有它SignedXml.CheckSignature()返回false。没有 URI,签名无效。

我尝试在调用之前删除 URI 属性SignedXml.ComputeSignature(),但出现以下异常:

这意味着在使用XmlDsigEnvelopedSignatureTransform类生成签名时,URI 属性是必需的。

然后,我尝试为<Invoice>标签设置一个 Id 属性:

这意味着签名仍将通过在标签<Invoice>上搜索 Id 属性来验证整个文档:<Reference>

生成签名并SignedXml.CheckSignature()返回 true,但代理不允许<Invoice>标签上的任何属性并使签名无效。

我需要像这样生成签名

要生成签名,我使用以下代码。该类PrefixedSignedXml继承自SignedXml并用于ds:在使用方法时设置“”前缀SignedXml

这是PrefixedSignedXml

这是用于添加 XAdEs 属性的方法:

之后,ComputeSignature()生成摘要和初始签名,然后我将<ds:SignedInfo>标签传递给另一台生成最终<ds:SignatureValue>. 最后,我将 传递<SignatureValue><ds:Signature>自身,附加到XmlDocument并发送给代理。

有谁知道是否可以在不将 URI 属性传递给<Reference>标签的情况下签署 XML 文档?

项目是使用 .NetFramework 4.6 的 ClassLibrary。

我面临这个问题一段时间,任何帮助将不胜感激。

0 投票
0 回答
87 浏览

java - 如何使用 Xpath 变换

我正在尝试使用 xades4j 签署 UBL2.1,但我需要排除一些标签。我使用了 XPathTransform,但结果摘要无效。

在此处输入图像描述

这是我要签署的 UBL 文件(为简单起见,不是完整的文件)

我想从签名中排除这些元素:

所以,我使用了以下 xpath 转换

但是,结果摘要无效。

提前致谢。

0 投票
0 回答
55 浏览

java - NoSuchAlgorithmException:http://www.w3.org/2001/04/xmldsig-more#rsa-sha256

我正在尝试在 Java (org.opensaml) 中生成 SAML 响应 XML。尝试使用 rsa-sha256 算法生成签名时,出现以下异常:

不确定确切的原因。签名对我来说看起来是正确的。我需要添加任何依赖项吗?谁能帮我解决这个问题?添加了代码以生成签名值:

0 投票
0 回答
126 浏览

php - 使用 XAdES-T 时间戳响应 (TSR) 附加 XML

对于一个项目,XML 文件是动态生成的。一段时间后,需要使用XAdES-T协议对这些 XML 文件进行签名。签名必须包含在 XML 文件中。

为此,我从 XML 文件生成时间戳查询 (TSQ)。它是基于 XML 文件的 SHA256 哈希创建的。之后,我将 TSQ 发送给 FreeTSA(时间戳管理局)。响应由两个元素组成:

  • 响应字符串(字符串/base64 编码)
  • 响应时间(整数/unix 时间)

现在,困难的部分来了。签名必须包含在 XML 中,使用dsig:Signature. 基于W3文档:

  • SignatureTimeStamp 封装了 ds:SignatureValue 元素上的时间戳。
  • SignatureTimeStamp 元素包含一个引用 [XMLDSIG] 签名的 ds:SignatureValue 元素的 HashDataInfo 元素。也就是说,时间戳哈希计算的输入是 ds:SignatureValue XML 元素。

我尝试了以下 XML:

但状态(根据本网站)总是“无效”。

将时间戳响应附加到 XML 文件的正确方法是什么?

0 投票
0 回答
72 浏览

java - 如何生成“部分 Xml 签名”(即 SignedInfo 标签的内容)?

我需要生成“部分 XML 签名”消息。

总而言之,当我们需要对一种 XML 文档进行签名时,我们会创建一个经过消化的“部分 XML 签名”消息,该“部分 XML 签名”消息被转发(带有一些凭据)到另一个负责对其进行签名的服务,然后返回它,最后我们提取此签名以将其注入原始消息中。

通常,“部分 XML 签名”消息如下所示:

我在获取此<ds:SignedInfo>文件并生成文件时遇到了一些问题。我遵循了 Oracle 网站上的一些示例,例如https://www.oracle.com/technical-resources/articles/java/dig-signature-api.html

基于此示例,我可以使用 构建SignedInfo对象ReferencesTransforms并且Digest我需要。但是我不明白如何在这一步之后调整代码。

在 Oracle 的网页中,他们创建密钥对以有效地签署文档。就我而言,我不需要签署文件!我的想法是保留此SignedInfo对象并将其<ds:SignedInfo>具体化为我将包装在<soap:Envelope><soap:Body>...<signature> CDATA .

但是我没有找到合适的方法SignedInfo来帮助我。我尝试使用,DOMSignedInfo但我有一个 classcast Exception :

而且我不确定我能用DOMSignedInfo.

有什么线索可以帮助我吗?

0 投票
1 回答
67 浏览

java - 在 java 中签署特定 XML 标记时出错

我需要用 java 1.6 签署一个特定的 XML 标签。我的 XML 是这样的:

我对其进行签名的 java 代码(不包括密钥库部分)是:

当我在 Eclipse 中运行此代码时,我在 DOMXMLSignature.sign() 方法中收到 StackOverflow 错误。有一个对 DOMXMLSignature.digestReference() 方法的调用,并且该函数无限期地调用自身。

如果 URI 为 "" 且 ID 为空,即当我需要对整个 XML 进行签名时,此代码有效。

为了签署特定的 XML 标签,我需要做些什么不同的事情?

我对这段代码有一些问题:

}

}

这只是 DOMXMLSignature 类和 Util 类的一部分,只是与案例有关的方法。

我上面的代码类 DOMXMLSignature.sign() 方法。这个方法做marshall,获取引用,获取引用id,调用DOMXMLSignature.digestReference()方法。

DOMXMLSignature.digestReference() 方法验证引用是否已经被消化 - 它不是。所以他得到了 URI,验证这是否是同文档 URI - 它是 - ,确认文档中的 id 是 URI 中的 id。然后,问题是:通过 signatureIdMap.get(parsedId) 获得的实例总是 DOMReference 类型,因此该方法无限期地调用自己。

这发生在 Java 1.6 中,在本机类中没有任何变化。如何解决此问题并签署特定的 XML 标记?在调用 DOMXMLSignature.sign() 方法之前是否必须计算摘要值?