是否可以使用 OpenPDF 在文档上加盖电子印章?

Is it possible to put an electronic seal on a document with OpenPDF?

我的公司需要实施一种在官方 PDF 上加盖电子印章的方法,以确保其完整性。听同事说用OpenPDF已经搞定了,网上一搜,至今没找到。

仅使用 OpenPDF 是否可以有效地实现这一点?或者是否存在其他库?在这种情况下,我更喜欢免费图书馆,但如果只有商业选择,我想先尝试一下,这样我就可以看看我是否能够使用它们,以及我的上司是否愿意承担经济风险。

这是维基百科对e-seal的定义:

A qualified electronic seal is an electronic seal that is compliant to EU Regulation No 910/2014 (eIDAS Regulation) for electronic transactions within the internal European market. It enables to verify the issuer of a document over long periods of time. Qualified electronic seals can be considered as digital equivalent to seals of legal entities on paper. According to the eIDAS regulation, a qualified electronic seal must be created by a qualified electronic device and based on a qualified certificate for electronic seal.

印章和签名

首先,这个问题的评论中有一些关于电子印章签名的讨论。

在法律上(在 eIDAS 的背景下),它们彼此完全不同。不过,从技术上讲,两者通常都以数字签名的形式实现,在 PDF 的上下文中更准确地说是 PAdES 签名;主要区别在于使用的签名者证书表明您是否有电子印章或签名。

因此,问题归结为 OpenPDF 是否支持创建 PAdES 签名。

OpenPDF 和 PAdES

OpenPDF 是 iText 的最后一个非 AGPL 版本的分支,即 2009 年 11 月 27 日标记的非官方版本 iText 4.2.0 Bruno Lowagie 13:59:39。那一年,ETSI 刚刚发布了第一个版本的 PAdES 签名作为技术规范 (TS),还不是欧洲标准 (EN)。

因此,当时的 iText 库不包含任何明确的 PAdES 支持,仅支持可互操作的 ISO 32000-1 签名类型。不过,它提供了一个选项,主要是您自己创建签名字典并注入您自己的定制签名容器。因此,通过使用此选项,您可以创建 PAdES 签名,不仅可以使用 ISO 32000-1 兼容性配置文件,还可以使用 BES 和 EPES 配置文件。

OpenPDF 签名 API 从那时起几乎没有改变;因此,仍然没有对 PAdES 的明确支持,但是接口是开放的,可以注入签名字典和签名容器来创建匹配简单 PAdES 配置文件(Baseline-B、Baseline-T、E-BES、E-EPES)的签名。

关于您的问题,因此

Is it effectively possible to achieve this with just using OpenPDF?

使用 OpenPDF 是可能的,但取决于您想要的确切配置文件,您必须添加一些代码以相应地生成签名词典和签名容器。

Or do other libraries exist?

是的。例如

  • 同时,iText(OpenPDF 很久以前从中分叉出来)得到了进一步的开发,并包含了一些更明确的 PAdES 支持。
  • 用于 PDF 签名的 CEF eSignature Digital Signature Services suite 使用 PDFBox 或 OpenPDF 作为基础 PDF 库,但构建了自己的签名词典和签名容器。
  • ...

(不过,对于库推荐,请使用 Software Recommendations Stack Exchange 而不是堆栈溢出,严格来说它们在这里是题外话。)