JAVA - 如何使用原始 PDF 和单独的 PKCS#7 签名数据创建签名 PDF
JAVA - How to create signed PDF using original PDF and separate PKCS#7 signed data
我有一个原始 PDF 文档和作为 PKCS#7 签名数据的单独文件。
我想将这些结合起来创建签名的 PDF 文档,以便它可以在例如 Adobe reader 中显示它已签名以及谁签署了文档。
Java 中是否有可用于以编程方式创建此类签名 PDF 文档的库?我需要加载该 PDF 并以某种方式向其添加签名,然后将其另存为新的 PDF 文档。
示例代码将不胜感激。
编辑:
生成的代码应将 PDF 文档作为输入参数并执行以下操作:
- 准备要签名的数据
- 向生成 PKCS#7 签名数据文件的外部签名机制提供要签名的数据
- 提供 PKCS#7 签名数据文件
- 将签名数据添加到 PDF 文档
- 保存 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
我有一个原始 PDF 文档和作为 PKCS#7 签名数据的单独文件。 我想将这些结合起来创建签名的 PDF 文档,以便它可以在例如 Adobe reader 中显示它已签名以及谁签署了文档。
Java 中是否有可用于以编程方式创建此类签名 PDF 文档的库?我需要加载该 PDF 并以某种方式向其添加签名,然后将其另存为新的 PDF 文档。
示例代码将不胜感激。
编辑:
生成的代码应将 PDF 文档作为输入参数并执行以下操作:
- 准备要签名的数据
- 向生成 PKCS#7 签名数据文件的外部签名机制提供要签名的数据
- 提供 PKCS#7 签名数据文件
- 将签名数据添加到 PDF 文档
- 保存 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