我希望能够使用 itext 对 pdf 文件进行多次签名。但我没有私钥,我正在生成一个哈希供客户端签名,在我重新签名后,我调用signDeferred()。是否可以制作多个空容器,用所有空容器生成一个哈希,然后在它们到来时添加签名?
我尝试添加超过 1 个空容器,生成哈希,客户端发出并返回哈希,我尝试添加,但收到错误,它不是最后一个字段。您只能在最后一个字段上调用signDeferred。但我不知道如何修复它,因为我没有私钥,所以无法使用signDetached
不,这是不可能的,至少对于可互操作的 PDF 签名来说是不可能的。
原因是 PDF 没有指定真正的并行签名(或反签名)概念,只有串行签名概念,一个签名接一个签名,每个新签名也覆盖所有先前的签名:
(更多详情请参阅这个答案。)
严格来说,PDF 规范并不要求签名来覆盖除嵌入签名容器本身的占位符之外的所有整个修订版,它只是推荐它。因此,理论上可以创建具有多个签名的 PDF,每个签名覆盖除所有嵌入签名值之外的整个 PDF。
但实际上,PDF 签名验证器会拒绝此类构造。此外,更现代的签名配置文件(特别是 PAdES 基线配置文件)确实需要签名来覆盖除签名容器的占位符之外的所有整个修订版本。