JAVA - 如何使用原始 PDF 和单独的 PKCS#7 签名数据创建签名 PDF

JAVA - How to create signed PDF using original PDF and separate PKCS#7 signed data

我有一个原始 PDF 文档和作为 PKCS#7 签名数据的单独文件。 我想将这些结合起来创建签名的 PDF 文档,以便它可以在例如 Adob​​e reader 中显示它已签名以及谁签署了文档。

Java 中是否有可用于以编程方式创建此类签名 PDF 文档的库?我需要加载该 PDF 并以某种方式向其添加签名,然后将其另存为新的 PDF 文档。

示例代码将不胜感激。

编辑:

生成的代码应将 PDF 文档作为输入参数并执行以下操作:

  1. 准备要签名的数据
  2. 向生成 PKCS#7 签名数据文件的外部签名机制提供要签名的数据
  3. 提供 PKCS#7 签名数据文件
  4. 将签名数据添加到 PDF 文档
  5. 保存 PDF 文档

据我所知,第一步很重要,否则 PKCS#7 签名数据将是错误的。

如果我正确理解你的问题,你的 pkcs#7 正在签署 PDF 的全部内容。即所有 PDF 文件字节。 在这种情况下,答案是你不能。

当您签署 PDF 文件时,您不会签署它的所有字节 "as is"。 在签署 PDF 之前,您必须在 PDF 中创建两个 "byte ranges", 在 PDF 中间留出足够的空间来包含签名。 然后您必须连接这两个字节范围,对这些字节进行签名并将签名包含在您留在 PDF 中的 space 中。

看看
* https://www.adobe.com/devnet-docs/acrobatetk/tools/DigSig/Acrobat_DigitalSignatures_in_PDF.pdf (www.adobe.com)

试用 Apache PDFBox

此外,请查看以下有关签署 PDF 的帖子。

How to sign pdf in Java using pdfbox