首页 文章

如何检测签名的pdf对iText有效?

提问于
浏览
0

对于项目,我需要检查数字签名是否有效 . 我已经开发了一段代码来完成它 . 我测试了一些pdf(正确与否),代码似乎工作 . 但有一种情况是验证不起作用 .

在Adobe Reader中,我发出消息“文档自签名以来已被更改或损坏” . 带着“美丽的”红十字......不幸的是,我不知道如何测试这个最重要的案例 .

因为如果我理解,签名是正确的,但它是改变的文件,而不是签名 .

我想我们可以使用文件的哈希,但我不知道如何正确提取这些信息 .

How to check that with Itext ?

有关信息,我测试了以下方法:

  • pdfpkcs7.verify():返回true

  • acroFields.signatureCoversWholeDocument(signame):返回true

  • pdfReader.isRebuilt():返回false

1 回答

  • 1

    Adobe已经记录了他们在this document中签名中接受的算法选择 . 特别是它们在其中声明所有适用的PDF版本

    DSA仅支持SHA1和adbe.pkcs7.detached

    另一方面,OP的文档使用DSA和SHA256 . 效果是

    • Adobe Reader无法肯定地验证哈希值

    • iText(不限于那些算法组合)可以 .


    实际上签名本身的签名算法信息一开始是有问题的,它只使用OID 1.2.840.10040.4.1,它只表示使用了DSA,而不是它使用的摘要算法 . 严格来说,应该使用不同的OID:

    _1000_对于SHA1withDSA:1.2.840.10040.4.3

    • for SHA256withDSA:2.16.840.1.101.3.4.3.2

    (甚至还有一些替代方案,其中大部分都被弃用了 . )

    仅查找1.2.840.10040.4.1(仅DSA)验证器必须猜测/推断摘要,并假设SHA1(如Adobe Reader一样)并非完全不合理 .

    iText很可能猜测使用过的SHA256,因为这个摘要算法也用于计算签名属性 messageDigest 中的文档摘要 .

相关问题