签署PDF - 使用单个修订版的多个签名

时间:2009-11-27 08:33:23

标签: java pdf itext

简单地说 - 我想在PDF上添加多个签名(使用iText),而不是为每个签名添加新版本。

我读过following thread,这很有意义(因为布鲁诺写了答案)

很明显,如果文档有2个修订版,则第一个签名不包括第二个修订版。但是,是否可以(根据PDF标准和iText)为同一版本提供两个签名? (我已将认证级别设置为CERTIFIED_FORM_FILLING_AND_ANNOTATIONS)。

重点是文档创建一次,根本不会更改,除了添加签名。由于签名的PDF将被发送给非技术人员,看到“文档已被更改”可能会引发一些“不相信”(由于缺乏对PDF的了解,唉,我不能指望他们) 。所以,再说一次 - 它可以在1个版本中有2个签名,由不同的人在不同的时间添加。

1 个答案:

答案 0 :(得分:1)

我在iText邮件列表上得到了一个有用的答案,我将与之分享。 Here,一个名叫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日)