对于一个项目,我需要检查数字签名是否有效。 我已经开发了一段代码来做到这一点。 我测试了一些pdf(正确与否),代码似乎工作。 但有些情况下验证不起作用。如何检测签名的pdf与iText一起使用?
在Adobe Reader中我有一条消息“文档自签名以来已被更改或损坏。”用“美丽”的红色十字... 不幸的是,我不知道如何测试这个最重要的案例。
因为如果我理解,签名是正确的,但它是被更改的文档,而不是签名。
我想我们可以使用文件的散列,但我不知道如何正确提取这些信息。
如何用Itext检查?
有关信息,我测试的方法如下:
- pdfpkcs7.verify():返回true
- acroFields.signatureCoversWholeDocument(signame):返回true
- pdfReader .isRebuilt():return false
请分享有问题的PDF。考虑到你发布的测试方法结果,我会*假设*所讨论的pdf已经设置了它的** NeedAppearances **标志。这会导致Adobe Reader在打开更改签名数据的文件时重新创建表单字段外观。另一个选项可能是带有使用Adobe不支持的签名算法的签名的pdf。 – mkl
感谢您的帮助,文档链接:https://drive.google.com/file/d/0B8fLGZLVFcLyeXF0TjluNzRjT3c/view?usp=sharing 错误发生在测试期间有一段时间,我忘了我是如何生成它的.... – ke20
我其实还不确定。目前,我赞成Adobe Reader不支持文档中使用的算法组合的假设。 Adobe Reader仅支持非常有限的一组算法,参见参考资料。 [Acrobat_DigSig_AlgorithmsAll](http://www.adobe.com/devnet-docs/acrobatetk/tools/QuickKeys/Acrobat_DigSig_AlgorithmsAll.pdf),它不断声明*“DSA仅支持SHA1”*。另一方面,您的PDF将DSA与SHA-256结合使用。 iText使用的安全库BouncyCastle支持更多的算法和算法组合。 – mkl