PDF外部签名问题与嵌入证书
本文关键字:证书 问题 外部 PDF | 更新日期: 2023-09-27 18:12:33
我们能够以一种方式对PDF进行外部签名,它进行验证,但证书不可见。通过一个更改,我们可以获得显示的证书,但随后PDF不再验证。
我们编写的代码或多或少与我们在网上找到的所有示例行相同。
当使用:
PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_SHA1);
我们得到一个验证的pdf,但是证书在pdf中不可见。在FoxIT阅读器中,"显示证书"按钮被禁用。
当我们把它改成:
PdfSignature(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
启用了显示证书按钮(在Foxit Reader中),并显示证书,但不再验证PDF。它表明:
Signature is INVALID
The document has been altered or corrupted since the Signature was applied
Certified by the current user
我们的签名代码是数字签名指南中给出的预签名/后签名servlet的转换。
我错过了什么?
我书中的设计/后期示例已经过时了。您应该使用C4_09_DeferredSigning示例。
首先使用空白签名:
ExternalSignatureContainer external =
new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);
MakeSignature.signExternalContainer(appearance, external, 8192);
这将导致无效签名。
然后使用这个带有无效签名的PDF来添加真实签名:
ExternalSignatureContainer external = new MyExternalSignatureContainer(pk, chain);
MakeSignature.signDeferred(reader, fieldname, os, external);
类MYExternalSignatureContainer
实现ExternalSignatureContainer
接口。这取决于您想要使用哪种签名基础设施来实现它。