gpt4 book ai didi

java - 在 iText PDF Java 中验证签名和安全 PDF 的证书

转载 作者:行者123 更新时间:2023-12-04 17:46:30 25 4
gpt4 key购买 nike

我使用 Adob​​e Acrobat 保护了一个 PDF,然后对其进行了签名,但是当我尝试使用 iText 验证签名时,出现错误

Exception in thread "main" java.lang.IllegalArgumentException: can't decode PKCS7SignedData object
at com.itextpdf.text.pdf.security.PdfPKCS7.<init>(PdfPKCS7.java:214)
at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2427)
at com.itextpdf.text.pdf.AcroFields.verifySignature(AcroFields.java:2373)
at C5_01_SignatureIntegrity.verifySignature(C5_01_SignatureIntegrity.java:19)
at C5_03_CertificateValidation.verifySignature(C5_03_CertificateValidation.java:42)
at C5_01_SignatureIntegrity.verifySignatures(C5_01_SignatureIntegrity.java:32)
at C5_03_CertificateValidation.main(C5_03_CertificateValidation.java:134)

我正在使用 https://developers.itextpdf.com/examples/security/digital-signatures-white-paper/digital-signatures-chapter-5#887-c5_03_certificatevalidation.java 中的示例代码

我使用了一个通用的 PDF,密码受 Adob​​e Acrobat 保护,然后从 Adob​​e Acrobat 自签名。

最佳答案

iText 5 安全 API 确实无法验证加密文档的签名。

原因是解密代码的缺陷:就像大多数其他字符串一样,它也“解密”签名字典的Contents key 的值。但是,由于这些一开始并没有加密,因此这种“解密”实际上会扰乱它们。因此,PdfPKCS7 类无法将它们解析为签名容器并抛出观察到的异常。

与此相反,iText 7 安全 API 可以验证此类签名。

与上述 iText 5 情况不同的是,这里对 PDF 字符串的解密被推迟到实际使用它们的内容时。签名 API 在访问内容之前将 Contents PDF 字符串标记为未加密。因此,可以按原样访问它们的原始值。

(这有点冒险,因为某些代码可能会预先检索这些字符串的内容,从而导致“解密”。另一方面,这消除了在 PdfReader 中解析 PDF AcroForm 信息的必要性>; 因为一般的表单解析和特别的签名解析不是内核模块的一部分,这种必要性要么会导致代码重复或多个模块的合并。)

此问题在 this answer 中有更详细的介绍。 .

关于java - 在 iText PDF Java 中验证签名和安全 PDF 的证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com