我在 iText 邮件列表上得到了一个有用的答案,我将分享。
在这里,一个绰号为 mkl 的人解释说,对于 Adobe 产品,这归结为一个先有后有的问题。
ISO 32000-1:2008,第 12.8.1 节说:“字节范围摘要应在文件中的字节范围内计算,应由签名字典中的 ByteRange 条目指示。该范围应为整个文件,包括签名字典但不包括签名值本身(内容条目)。可以使用其他范围,但由于它们不检查文档的所有更改,因此不建议使用它们。当存在字节范围摘要时,所有签名字典中的值应为直接对象。”
因此,根据该规范,允许更多分段字节范围。因此,特别允许从要签名的字节中排除多个签名容器。
但...
如果您希望 Adobe 产品开箱即用地接受您的签名,您会发现他们希望签名能够签署其修订版中的所有内容,但它本身除外。对于两个签名,这意味着每个签名都必须签署一个包含彼此的范围,这是一个先有后天的问题。
如果您的签名只需使用您自己的软件进行验证,并且 Adobe 产品可能会将您的签名标记为无效,那么您可以很容易地创建这种独立的双重签名。参照。
http://old.nabble.com/Uncommon-ByteRange-entry-in-signature-dictionary-to23670277.html
一些灵感。iText 可以更改为没有太多麻烦。但请记住伦纳德在那儿的话:
“Adobe Acrobat 和 Reader 将立即使超过 2 对的 ByteRange 无效。因此,任何具有多个范围的东西都不会验证。”
作为第三种方式,您可以构建一个自定义 Adobe 插件来验证您的自定义签名。
事后才想到...如果您真的想从事签名业务,您不仅应该记住当前的纯 PDF 标准(即 ISO-32000-1:2008),还应该记住其他标准。
例如,授予 ETSI TS 102 778-1;v1.1.1 中的第 4.1 节说:“与其他基于 CMS 的签名实现一样,摘要是在文件的字节范围内计算的。但是对于 PDF,由于签名信息将嵌入到文档本身中,因此该范围是整个文件,包括签名字典但不包括 PDF 签名本身。范围由签名字典的 ByteRange 条目指示。
通过以这种方式限制 ByteRange 条目,它可以确保 PDF 中除了 PDF 签名本身之外没有未被摘要覆盖的字节。
注意:第 2 部分和第 3 部分中定义的配置文件使此要求成为规范,这是 ISO 32000-1 [1] 第 12.8.1 条中的建议。”
因此,一旦您认真对待签名,签名的字节范围只需要涵盖所有修订版,但只有一个签名容器对这个字节范围进行签名。
(来自 iText 邮件列表,2009 年 12 月 1 日)