问题标签 [xades]
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 - Xades 签名创建和验证端到端工作示例?
我需要在 Java 项目中创建和验证 Xades BT 签名。我找到了 DSS 和 xades4j 项目,但我无法设置它们。例如,使用 DSS 创建签名很容易,但在验证过程中会出现各种错误。
甚至 DSS 的官方验证示例在这里也不起作用,simpleReport.getErrors()
给出:
我需要一个端到端的工作示例,涵盖:
- 自签名密钥和证书创建(我还没有受信任的证书)
- 使用密钥和证书生成 Xades 签名
- 使用密钥和证书进行 Xades 签名验证
java - 如何使用 XAdES4j 对 xml 进行签名,并引用 URI (#DatosEmision)?
我正在使用此代码尝试使用签名 xades-bes 签署 xml:
这将返回有关未找到 ID 的错误:
提前感谢您的帮助
javascript - XAdES 验证失败,带有样式表处理指令的文档的 Reference URI=""
我签署的文件是这样的。
我正在使用xadesjs
以下代码对此 XML 进行签名:
仅当我删除 xml 声明和样式表指令时,生成的签名才有效。因此,仅签署此文件会返回正确签署的文档:
签署这个
错误消息说不是整个文档都已签名。
我认为问题出在URI=""
参考上。它只签名并<ClinicalDocument>
留下不签名。<?xml version>
<?xml-stylesheet>
我如何签署所有内容?
c# - C# 如何在引用中没有 URI 属性的情况下为 xml 签名创建完整的引用?
我正在尝试对 XML 文档进行签名,但一个引用 URI 属性不得构成签名的一部分。这可能吗?如果我尝试在没有定义 uri 的情况下进行引用,则 xml 不会被签名。利用https://github.com/Caliper/Xades用 Xades 签署我的 xml 我想要实现的目标:
我得到了什么
xml - 在 XaDeS XML Signature(C++) 中处理 SignedProperties 节点
所以我试图根据 XaDeS-EPES 签名标准计算 SignedProperties 元素的摘要值,但我总是得到一个不正确的摘要值。
我知道要遵循的步骤,即节点的规范化(根据 XML Canonicalization V1.0 https://www.w3.org/TR/xml-exc-c14n/),然后计算 sha-256 二进制摘要,最后是 base64 编码并在指向 SignedProperties 的 Reference 节点中插入。
由于我目前正在使用相同的函数计算其他正确的值,我认为错误出在规范化步骤上,目前我正在使用属于 libxml2 的 c14n 函数,但如果我按原样传递节点,它会抛出一个错误,因为节点中未定义命名空间,我尝试在 SignedProperties 节点中添加声明,但无法获得正确的摘要。
有没有人有任何线索?
感谢您的时间和知识,最好的问候;D
java - 使用 Google Cloud KMS 的 XAdES 签名
有没有办法使用 Google Cloud KMS 制作 XAdES 签名?我找不到任何有关它的信息。
pki - 它可以用 asn1js 和 pki.js 解码一个 .p12 文件吗?
p12 文件,我想从中提取公钥和私钥以及带有 pki.js 的 x509 证书但是我的 .p12 文件有密码,我该如何解码它。例如:
xml - 是否可以从封装的 XaDES 签名中剥离内容以获得分离的签名
我正在使用DSS库来验证数字签名。最近,DSS 引入了仅发送被验证文档的哈希值和签名而不发送实际内容的功能。这对隐私来说可能是一件好事,因为您可能会避免将文档发送到服务器(在我们的系统上,验证组件在后端运行)。为了做到这一点,我们需要从签名中剥离内容,计算其哈希值并将其发送到 DSS 进行验证。
这一切听起来都不错,但是当我们实际尝试剥离内容并将创建的“分离”签名连同哈希一起发送以进行验证时,我们会从 DSS 中得到一个异常:
WARN [eu.europa.esig.dss.xades.validation.XAdESSignature] (default task-7) Determining signing certificate from certificate candidates list failed: [Certificate #1: Signature verification failed, Certificate #2: Signature length not correct: got 256 but was expecting 512
这没有多大意义,因为所有证书摘要都是 256 位长,而不是 512 位。
这是实际剥离的签名:
编辑:由于问题似乎与实际签名和用作输入的摘要值有关,就像 dave_thompson_085 指出的那样,我尝试手动从 SignatureValue 获取摘要以试图弄清楚发生了什么。
因此,我获取了证书 #1 的值并运行以下命令来提取公钥:
然后我从 SignatureValue 标记中获取值并运行以下命令来解密签名并获取摘要:
但是,当我使用一些在线工具对结果进行 base64 编码以将其与我传递的摘要进行比较并包含在实际签名中时,我得到了以下'MDEwDQYJYIZIAWUDBAIBBQAEIDBaM9z9ZgShg0Ev6X38gyfjQXHlWsyRTbJ3RBUvMeNB'
. 这很奇怪,因为它比我预期的实际 32 字节摘要更长,并且与我预期的任何东西都不相似(当我检查文件的二进制版本时,我得到它实际上是 64 字节长)。我究竟做错了什么?
xml - 将封装的 XaDES 转换为分离的
我们有一个在云中运行的文档签名服务。这个想法是用户上传他想要签名的文档,然后使用保存在 HSM 上的用户私钥在后端对文档进行签名。但是,为了保护文档的隐私,我们只发送文档的哈希值,我们做同样的事情进行验证。我们已经成功地为 PaDES 和 CaDES 文档做到了这一点,但无法为 XaDES 文档做到这一点。
这就是我们在验证中面临的问题。这是一个签名的 XaDES 文档:
这是需要发送到后端的哈希 VkPkiQYDbE3NZ2fQv7pwDInIY0YjQAbVJvulFHITSoI=,它位于第一个引用中。但是请注意该引用标记内的URI=''属性。这基本上意味着摘要是在包含<ds:Signature>标记的整个标记上计算的,这意味着当您应用转换以排除签名标记本身时的内容。
但是,当您使用分离签名对相同的 xml 进行签名时,它看起来像这样:
请注意,摘要值不同,并且缺少URI="" 。
因此,问题在于执行验证(DSS)的库忽略了我们发送给它的哈希,因为URI=""并且验证失败。
而且我们不能删除 URI="" 因为 SignedData 值会改变并且验证也会失败。
所以,似乎我们必须从信封中构建真正的分离签名,但我们不知道如何。有什么解决办法吗?