问题标签 [pades]

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 回答
528 浏览

java - 使用 PDFBox ETSI 验证进行签名

我使用 PDFBOX 创建了一个 PDF PAdES 签名,我正在使用 ETSI 在线验证器1(它需要注册),现在我在报告中只收到两个错误,但我有点迷失它们是什么或如何修复它们。

这是etsi在线验证器报告:

这是我用来签名的代码:

我不太确定这些问题可能出在哪里或为什么会产生,一开始我有 5 个,现在我只有这两个,所以任何输入都将不胜感激

0 投票
1 回答
175 浏览

pdf - PAdES 的最低 PDF 版本是多少?

我正在用 puppeteer 生成一个 PDF 文件。它会自动生成 PDF-1.4 文件。然后,我使用dss使用 PAdES 签名对其进行数字签名。生成的文件可以在 PDF 查看器中打开,并且 PDFStudio 似乎可以正确解析文档签名。

然而这有效吗? Wikipedia指出 PDF/A-2(基于 1.7)增加了对 PAdES 的支持。我是否需要至少生成 PDF-1.7(或 PDF/A-2)才能获得具有有效签名的有效 PDF 文件?

注意:我valid在技术和法律术语中都使用该术语。

0 投票
0 回答
97 浏览

macos - 如何使用 Apple CMS 服务向 CMS 消息添加自定义属性?

我们想使用 macOS 中的Cryptographic Message Syntax Services库向 CMS 签名者信息序列添加一个额外的 OID 标签。我们能够使用提供的CMSEncoder*函数生成 CMS 消息,但无法插入符合CAdES标准所需的签名证书 OID 标签 (1.2.840.113549.1.9.16.2.12)。有没有办法将自定义属性插入到使用Apple 的 CMS 服务库生成的 CMS 消息的签名者序列中?

0 投票
1 回答
243 浏览

java - PAdES 签名级别 - Adob​​e Acrobat

我正在使用 pdfbox 3.0.0 RC 创建 PADES 签名,我的代码使用示例创建数字签名。但是,当我使用此工具打开文档时,我无法在 Adob​​e Acrobat 中看到签名级别,尽管它能够验证我的签名。

我没有创建 VRI,所以我猜测这可能是一个问题,但是如果这是验证我的签名所必需的,我不明白为什么签名显示为有效?

Adobe Acrobat 签名:

Adobe Acrobat 签名

0 投票
1 回答
174 浏览

pdf - KYC 后如何使用高级电子签名签署文件

为了加入用户,我们必须识别他们并且他们需要签署合同(通过我们的 Web 应用程序)。签署的合同必须符合 eIDAS AdES,因此是 PAdES。

用户通过SPIDonfido识别(但它可以是任何其他 KYC 服务)。

为了生成有效的 PAdES,我们需要做什么?我们可以在没有第三方的情况下自行生产吗?

据我了解,我们无法创建签名的 PDF,因为我们没有用户的私钥。如果我们创建一个自签名证书,签名将无效,我们将无法证明任何事情。

0 投票
1 回答
1277 浏览

pdf - Acrobat 中的签名字节范围无效

我正在尝试使用我们正在制作的库制作 PDF 文档的时间戳。我在 PDF 文档中添加了一个新部分。我为签名和包含实际签名的签名对象添加了新的注释对象,还为新部分添加了一个新的外部参照表。当我检查外部参照条目时,一切似乎都是正确的。

当我尝试在 Acrobat 中验证我的签名时,我收到以下错误消息“此签名中包含的信息格式存在错误(签名字节范围无效)”。

但是,当我检查字节范围时,一切似乎都是正确的。我从文档的开头到内容部分的左括号,从文档的结尾到文档的结尾。我将它与具有有效签名的文档进行了比较,似乎字节范围看起来相同。

我真的不明白出了什么问题以及为什么 Acrobat 会显示此错误。

如果有人想看看,这里是签名文件的链接:https ://ufile.io/mckajk9h

PS:我可以分享部分代码,但实际问题是关于 Acrobat 阅读器以及它如何解释 PDF 签名,而不是我的代码。因此,相关部分应该是我共享的结果 PDF 文件。

0 投票
2 回答
117 浏览

pdf - 仅在 Adob​​e Reader 中显示无效的合格签名

这是带有合格电子签名的 PDF pdf-qualified.invalid.pdf

所有验证应用程序都将其正确显示为 PAdES-BASELINE-LT,但 Adob​​e Reader 显示它无效。这个数字签名的 PDF 有什么问题?它包括 CAdES-BASELINE-LT 签名、所有 OCSP、所有需要的证书。

Adobe阅读器显示其无效

Adobe 阅读器错误地说无效

欧盟验证显示签名在https://ec.europa.eu/cefdigital/DSS/webapp-demo/validation有效

欧盟验证器显示有效

DigiDoc4 应用程序显示签名有效

DigiDoc4 显示有效

https://www.eparaksts.lv/表明它是有效的

eparaksts.lv 显示有效

这里我们可以看到与数字签名相关的PDF结构

iText Rups 在那里显示所有需要的组件

0 投票
1 回答
377 浏览

java - PDF/A-3A 文档的 PAdES LTV 签名产生无效签名

介绍

我在对标记为符合 PDF/A - 3A 的 PDF 文档进行数字签名时遇到问题。使用 PDFBox(最新版本,2.0.24)我最终在 Adob​​e Acrobat 中得到一个无效签名,而使用 iText7(最新版本)我得到一个有效签名。目标是获得符合 PAdES LTV 的签名。

概述

我的过程如下(使用 PDFBox 和 iText7):

  • 我打开 PDF,创建用于签名的哈希(要签名的数据)
  • 我打电话给第 3 方服务以取回数字签名
  • 在服务响应中,我还获得了需要在 PDF 中嵌入以提高 LTV 质量的 OCSP 和 CRL 内容
  • 我在 PDF 中嵌入了签名
  • 我将文档保存到内存中,然后重新打开它以嵌入 OCSP 和 CRL
  • 我嵌入了 OCSP 和 CRL 项目,创建了各自的 DSS 和 VRI 字典
  • 我将 PDF 保存到磁盘

对于 PDFBox,签名代码在此处,而 OCSP/CRL 嵌入代码在此处。对于 iText7,用于签名和 OCSP/CRL 嵌入的代码在这里

问题

现在,这适用于大多数 PDF 文件,包括多重签名文档。问题在于一个特定的 PDF,它被创建为 PDF/A compliat,级别 3A。

使用 PDFBox,如果我只是嵌入签名并在 Adob​​e Acrobet 中打开文档,则签名是有效的。如果我还嵌入了 OCSP/CRL 内容,则签名不再有效。Adobe Acrobat 抱怨说:

签名无效:文档自签名后已被更改或损坏。

我还注意到,只需这样做:

我破坏了签名。从我的测试来看,实际嵌入并不是问题的真正原因,而只是我在嵌入签名后重新打开 PDF 并将其保存回磁盘的事实。

通过 iText7 使用相同的过程(密钥、证书等),我最终在 Adob​​e Acrobat 中获得了有效的 LTV 签名。

示例 PDF

样本文件在这里。原件包含未签名的文档,然后有 2 个示例,一个用于 PDFBox(在 Adob​​e Acrobat 中无效),一个用于 iText7(在 Adob​​e Acrobat 中有效)。

到目前为止,我的研究表明,在签名嵌入后加载 PDF 时,PDFBox 以某种方式破坏了元素的顺序。它在加载和保存文档时暗示了这个问题,尽管对于所有其他 PDF 我执行相同的过程并且 Adob​​e Acrobat 不会抱怨签名。

我还尝试使用 PDFBox 2.1.0-SNAPSHOT 和 3.0.0-SNAPSHOT,希望问题与 PDF 中元素的排序有关并且已修复。不过,我得到了相同的结果。

后期编辑 1

请看下面的Later edit 2,这里的Later edit 1 不是个好主意!

根据@mkl 下面接受的答案,问题出在原始 PDF 文件上,其中包含分成几个小节而不是一个小节的交叉引用表。这似乎是由最初生成 PDF 的服务使用的库(Aspose PDF for .NET,版本 21.3 或更早版本)引起的。

似乎适用于我当前代码的一种解决方法如下:

基本上,如果我检测到文档的制作者是 Aspose,我会将文档保存在内存中(通过 PDFBox 的pdDocument.save())并将其加载回来。这可确保交叉引用表正确写入内存,并从那里签名和 OCSP+CRL 嵌入按预期工作,从而在 Adob​​e Acrobat 中生成有效签名。

后期编辑 2

谢谢@mkl 和@TilmanHausherr,你是对的。假设使用某个库生成的所有文档都必须自动标准化并不是一个好主意,因为现有签名将失效。最后,更好的办法是保持代码不变,并期待一个正确构建的 PDF。修复创建位置的问题。

0 投票
0 回答
26 浏览

javascript - PAdES 和 CAdES 客户端

有没有办法仅使用 javascript 客户端使用 CAdES/PAdES 签署文件?客户端 webapp 将从服务器接收公钥和签名哈希。

0 投票
0 回答
34 浏览

java - 提取有关签名的信息 - Cades & Pades (Java)

我有一份带有1 个 Pades签名和2 个 Cades签名的文档(pdf),我需要提取有关每个签名的签名者的信息。

我正在使用CMSSignedData(充气城堡库),但是当我尝试获取信息时,我只获取有关最后一个签名的信息。

有没有办法获取所有签名信息?甚至使用另一个库。

谢谢!