【问题标题】:PDF External Signature issue with embedding certificate嵌入证书的 PDF 外部签名问题
【发布时间】:2014-07-11 11:50:08
【问题描述】:

我们能够以一种方式对 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

我们的签名代码是 digitalsignature 指南中给出的 presign/postsign servlet 的转换。

我错过了什么?

【问题讨论】:

    标签: c# itextsharp itext digital-signature


    【解决方案1】:

    我书中的 presign/postsign 示例已经过时。您应该使用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 接口。您可以根据要使用的签名基础设施来实施它。

    【讨论】:

    • 嗨,我在 C# 中找不到 ExternalSignatureContainer。我只有 IExternalSignatureContainer。 ExternalSignatureContainer 的方程是什么 external = new ExternalBlankSignatureContainer(PdfName.ADOBE_PPKLITE, PdfName.ADBE_PKCS7_DETACHED);在 C# 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多