Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 签名PDF-具有单个修订的多个签名_Java_Pdf_Itext - Fatal编程技术网

Java 签名PDF-具有单个修订的多个签名

Java 签名PDF-具有单个修订的多个签名,java,pdf,itext,Java,Pdf,Itext,简单地说,我想在一个PDF上添加多个签名(使用iText),而无需为每个签名添加新的修订 我已经读过了,这很有道理(因为布鲁诺写了答案) 很明显,如果文档有两个版本,第一个签名不包括第二个版本。但是,是否可能(根据PDF标准,在iText中)对同一版本有两个签名?(我已将认证级别设置为认证的表单填写和注释) 关键是文档只创建一次,除了添加签名之外,根本不会更改。由于签署的PDF将发送给非技术人员,看到“文档已被更改”可能会引发一些“怀疑”(由于缺乏PDF知识,唉,我不能指望他们会这样)。所以,再

简单地说,我想在一个PDF上添加多个签名(使用iText),而无需为每个签名添加新的修订

我已经读过了,这很有道理(因为布鲁诺写了答案)

很明显,如果文档有两个版本,第一个签名不包括第二个版本。但是,是否可能(根据PDF标准,在iText中)对同一版本有两个签名?(我已将认证级别设置为
认证的表单填写和注释


关键是文档只创建一次,除了添加签名之外,根本不会更改。由于签署的PDF将发送给非技术人员,看到“文档已被更改”可能会引发一些“怀疑”(由于缺乏PDF知识,唉,我不能指望他们会这样)。所以,再说一次,在一个版本中可能有两个签名,由不同的人在不同的时间添加。

我在iText邮件列表中得到了一个有用的答案,我将与大家分享。 一个名叫尼克·姆克尔的人解释说,使用Adobe产品,这是一个母鸡和鸡蛋的问题

ISO 32000-1:2008第12.8.1节规定:“应在文件中的字节范围内计算字节范围摘要,该范围由签名字典中的ByteRange条目表示。该范围应为整个文件,包括签名字典,但不包括签名值本身(内容条目)。可以使用其他范围,但由于它们不检查文档的所有更改,因此不建议使用它们。当存在字节范围摘要时,签名字典中的所有值都应为直接对象。”

因此,根据该规范,允许更多的分段字节范围。因此,特别允许将多个签名容器从要签名的字节中排除

但是

如果您想让Adobe产品接受您的即时签名,您会发现他们希望签名能够对修订版中的所有内容进行签名,但签名本身除外。对于两个签名,这意味着每个签名都必须签署一个包含彼此的范围,一个母鸡或鸡蛋问题

如果您的签名只需要使用您自己的软件进行验证,并且Adobe产品可能会将您的签名标记为无效,那么您可以非常轻松地创建此类独立的双重签名。比照

为了一些灵感。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日)

从您链接的线程中,我觉得Bruno建议您需要同时添加两个签名,并且需要修改iText以支持该功能,因此您可以这样做。我看不出您有什么问题……我不想同时添加它们;)它们将由不同的用户添加从几个小时到几天的时间跨度。啊,好吧。我想如果你的最后一句话是这样说的话会更清楚。不幸的是,那个链接已经不起作用了。是不是你指的同一个线程?