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

问题描述 投票:2回答:1

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

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

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

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

java pdf itext
1个回答
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日)

© www.soinside.com 2019 - 2024. All rights reserved.