问题标签 [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.
x509certificate - 将 CMS(基于 PKCS#7)签名转换为适合 xmldsig 的值场地
我有 CMS(基于 PKCS#7)签名作为输入,我想从中创建等效的 xmldsig。我可以从 CMS 消息中提取 X509 证书,但我看不到如何提取签名哈希(在 xmldsig 字段中重用)。有没有办法从 CMS 消息中提取签名哈希?
java - 如何在 Java 中生成内部分离的 XML 签名
我无法理解如何将签名节点作为数据节点的兄弟节点。我发现的示例来自 Oracle,但仅涵盖了正常的分离签名,其中 XML 作为 URI 传递给 Reference 对象。
参考 Oracle 示例:https ://docs.oracle.com/javase/8/docs/technotes/guides/security/xmldsig/GenDetached.java
java - Soap UI 使用肥皂信封中的什么来创建 XMLDsig 签名?
Soap UI 使用肥皂信封中的什么来创建 XMLDsig 签名?或相反的问题,如何验证 Soap XMLDsig 响应的签名?我之所以问,是因为我只设法使用 Soap UI 获得了正确的响应。
假设我们在 SoapUI 中生成了这个请愿书:
我有这个java代码来生成二进制安全令牌(它与soapui生成的匹配,因为相同的证书),但是使用相同的信封我得到不同的签名和摘要值:
Java 代码:https ://pastebin.com/06NUwkLW
那么,我应该使用什么String plaintext
来获得正确的签名和摘要值?
我已经尝试过使用 cxf3.4 和 axis2 客户端(使用 wsdl2java),但是添加 WS-Security 非常复杂,我只找到用户名/密码验证,这不是我需要的。
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 摘要确实与其中的匹配DigestValue
(Signature
即,到目前为止,我对事情如何在幕后工作的理解,至少在规范化方面是正确的)。但是,到目前为止,我验证签名值的尝试都失败了。无论我做什么,我都无法获得 API 产生的签名值。当然,示例的验证部分(使用 API)有效,并表明签名有效。
这是“手动”验证的代码:
SignedInfo.xml
如下:
我在https://www.di-mgt.com.au/xmldsig2.html找到了一个指南,其中提到了在规范化期间传播命名空间SignedInfo
,所以我也尝试了以下SignedInfo.xml
方法:
这仍然不会产生与示例中的 API 相同的签名。
我将不胜感激任何帮助找出我做错了什么。
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。
我面临这个问题一段时间,任何帮助将不胜感激。
java - NoSuchAlgorithmException:http://www.w3.org/2001/04/xmldsig-more#rsa-sha256
我正在尝试在 Java (org.opensaml) 中生成 SAML 响应 XML。尝试使用 rsa-sha256 算法生成签名时,出现以下异常:
不确定确切的原因。签名对我来说看起来是正确的。我需要添加任何依赖项吗?谁能帮我解决这个问题?添加了代码以生成签名值:
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 文件的正确方法是什么?
java - 如何生成“部分 Xml 签名”(即 SignedInfo 标签的内容)?
我需要生成“部分 XML 签名”消息。
总而言之,当我们需要对一种 XML 文档进行签名时,我们会创建一个经过消化的“部分 XML 签名”消息,该“部分 XML 签名”消息被转发(带有一些凭据)到另一个负责对其进行签名的服务,然后返回它,最后我们提取此签名以将其注入原始消息中。
通常,“部分 XML 签名”消息如下所示:
我在获取此<ds:SignedInfo>
文件并生成文件时遇到了一些问题。我遵循了 Oracle 网站上的一些示例,例如https://www.oracle.com/technical-resources/articles/java/dig-signature-api.html
基于此示例,我可以使用 构建SignedInfo
对象References
,Transforms
并且Digest
我需要。但是我不明白如何在这一步之后调整代码。
在 Oracle 的网页中,他们创建密钥对以有效地签署文档。就我而言,我不需要签署文件!我的想法是保留此SignedInfo
对象并将其<ds:SignedInfo>
具体化为我将包装在<soap:Envelope><soap:Body>...<signature> CDATA
.
但是我没有找到合适的方法SignedInfo
来帮助我。我尝试使用,DOMSignedInfo
但我有一个 classcast Exception :
而且我不确定我能用DOMSignedInfo
.
有什么线索可以帮助我吗?
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() 方法之前是否必须计算摘要值?