我需要某人想要与以下问题的解决方案协作的帮助,我使用ITEXT验证PDF的数字签名,这非常有效,我无法验证该问题签名是当我有2个签名,第一个是无效的,如Adobe Acrobat所示,但与itext的例子认为它是有效的,有些帮助吗?验证数字多重签名PDF
回答
要使用,则Adobe Reader不不抱怨的签名变得无效,因为改变到第一签署修订的符号字节,而是因为在增量更新部分的第二签订修订其认为不允许添加的开始。
既不是iText也不是PDFBox(它最初也在问题的标签中提到过)在他们的标准签名验证代码中检查了这一点。因此,即使不允许添加问题,iText和PDFBox签名验证代码都不会识别该问题。
其实我不知道Adobe Acrobat/Adobe Reader以外的任何PDF产品是否会尝试检查是否不允许增量更新签名PDF。这就是说,即使Adobe在这方面的测试也不是很好:当他们检查是否允许进行某些更改时,他们通常会实际检查更改是否以Adobe执行允许的更改的方式执行。因此,如果您以不同的方式进行一些允许的更改,Adobe可能会声明不允许的更改。
样本文档Con firma fallada.pdf
中的情况也是如此。
在第一个签署修订PDF 目录物体看起来是这样的(漂亮的打印):
1 0 obj
<<
/Type/Catalog
/ViewerPreferences 2 0 R
/Pages 29 0 R
/AcroForm
<<
/DA(/Helv 0 Tf 0 g)
/Fields[32 0 R]
/SigFlags 3
/DR<</Font<</Helv 33 0 R/ZaDb 34 0 R>>>>
>>
/Outlines 3 0 R
>>
endobj
在增量更新为第二个签署了修订版的其它签名现场已经被添加,所以对象必须重写。签署软件还重构了直接AcroForm字典对象到一个新的间接对象:
1 0 obj
<<
/Pages 29 0 R
/AcroForm 35 0 R
/Type /Catalog
/ViewerPreferences 2 0 R
/Outlines 3 0 R
>>
endobj
35 0 obj
<<
/DA (/Helv 0 Tf 0 g)
/DR << /Font << /Helv 33 0 R/ZaDb 34 0 R >> >>
/Fields [ 32 0 R 36 0 R ]
/SigFlags 3
>>
endobj
有了这个地方,Adobe公司宣称不允许的变化。
如果一个替代上述使用直接AcroForm Dictionary对象等价版本,Adobe不声称不允许改变了:
1 0 obj
<<
/Pages 29 0 R
/AcroForm
<<
/DA (/Helv 0 Tf 0 g)
/DR << /Font << /Helv 33 0 R/ZaDb 34 0 R >> >>
/Fields [ 32 0 R 36 0 R ]
/SigFlags 3
>>
/Type /Catalog
/ViewerPreferences 2 0 R
/Outlines 3 0 R
>>
endobj
这,顺便说一句,究竟是如何的目录看起来像增量更新中的第二个签名Con firma buena.pdf
。 (奇怪的是,在那个文件中,间接对象35中还有一个字典对象的直接拷贝;可能是某人测试的标志,因为该对象没有被引用,但是它没有被引用打扰任何检查...)
顺便说一句,'Con firma fallada.pdf'和'Con firma buena.pdf'都有一些不好的地方:它们都使用与第一次签名修订相同的文件标识符ID。这违反了PDF规范中的建议。 – mkl
嘿嘿,剥离fallada文件的第二个签名和使用PDFBox签名工作没有Adobe抱怨。如果使用PDFBox,那么它一定是旧版本。因为一年前我们遇到了类似的问题:https://issues.apache.org/jira/browse/PDFBOX-3114 –
@TilmanHausherr是的,我的脑海里还有一个旧的PDFBox问题(我刚刚发现它[这里](https://stackoverflow.com/a/19905271/1729265))其中PDFBox用于做一些更改导致等效结构(另外引入一些舍入错误)。哦,我发现你的问题也提到了这个问题。 – mkl
- 1. C#验证PDF签名
- 2. PDF证书到期后的数字签名验证
- 3. RSA数字签名验证
- 4. 验证数字签名
- 5. iOS验证数字签名
- 6. XML数字签名验证
- 7. 验证POI数字签名
- 8. REST验证 - 数字签名?
- 9. XML数字签名验证
- 10. 验证PDF是否使用iText进行数字签名
- 11. iText在android中的pdf签名验证
- 12. 如何验证自签名证书的数字签名?
- 13. 在Android上验证数字签名
- 14. C#使用SignedCms验证数字签名
- 15. 如何验证数字签名?
- 16. 使用StAX验证数字签名
- 17. 使用php验证数字签名
- 18. 如何验证数字XML签名
- 19. 创建和验证数字签名
- 20. 验证签名
- 21. 到期与多个签名数字签名的PDF的
- 22. 验证PDF与PHP签署PDF
- 23. 验证X509证书时验证签名
- 24. 使用itextsharp中的散列证书签名pdf签名字段
- 25. Xades4j签名验证
- 26. C#验证签名
- 27. 验证Jar签名
- 28. ECDSA签名验证
- 29. XML签名验证
- 30. ElGamal签名验证
*“第一个无效”* - 由于哪个原因?由于第一次修订的签名字节发生了变化,还是因为以后的修订版本中不允许发生更改? iText和pdfbox都会认可前者,而不会检查后者。 – mkl