【问题标题】:PDF/A Conformance issuePDF/A 一致性问题
【发布时间】:2016-01-25 04:06:37
【问题描述】:

所以我已经设置了 ItextSharp,并且我的签名过程可以在一定程度上工作,嵌入图像和字体正在工作,但是当我签署文档时出现以下验证错误(未认证), “字符串长度超过 65535 个字节。”这导致我的文档不符合 PDF/A-1a 标准。我检查了代码,似乎问题出在 ITextSharp(5.5.6) 的 MakeSignature.SignDetached 方法中,有什么特殊原因会发生这种情况吗?

签名文件出错:https://drive.google.com/file/d/0B9RyqgJoa6W8Q1ZySkhjUS1iTmM/view?usp=sharing

private void SignDocumentSigningBlock(Certificate certificate, SigningInformation information, SigningBlock block, PdfSignatureAppearance appearance, PdfStamper stamper, byte[] signatureImage)
{
    X509Certificate2 x509Certificate = new X509Certificate2(certificate.Bytes, certificate.Password, X509KeyStorageFlags.Exportable);

    appearance.SetVisibleSignature(block.Name);
    SignDocumentSigningBlockWithImage(signatureImage, appearance);
    SignDocumentSigningBlockWithText(appearance, x509Certificate);

    using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)x509Certificate.PrivateKey)
    {
        IExternalSignature externalSignature = new PrivateKeySignature(DotNetUtilities.GetRsaKeyPair(rsa).Private, _settingManager["DocumentSigningEncryptionHashAlgorithm"]);
        MakeSignature.SignDetached(appearance, externalSignature, SignDocumentSigningBlockBuildChain(x509Certificate), null, null, new TSAClientBouncyCastle(_settingManager["DocumentSigningTimestampingServiceAddress"]), Int32.Parse(_settingManager["DocumentSigningEstimatedTimestampSize"]), CryptoStandard.CMS);
    }
}

任何建议或帮助将不胜感激。 亲切的问候

更新

我已经签署了将估计大小减少到 20400 的文件,但在进行合规性检查时我仍然收到同样的警告。 链接到新文档: https://drive.google.com/file/d/0B9RyqgJoa6W8UkpGODhLWHl5bTQ/view?usp=sharing

【问题讨论】:

    标签: c# pdf itextsharp itext


    【解决方案1】:

    您的MakeSignature.SignDetached 电话

    MakeSignature.SignDetached(appearance, externalSignature, SignDocumentSigningBlockBuildChain(x509Certificate), null, null, new TSAClientBouncyCastle(_settingManager["DocumentSigningTimestampingServiceAddress"]), Int32.Parse(_settingManager["DocumentSigningEstimatedTimestampSize"]), CryptoStandard.CMS);
    

    明确要求 iTextSharp 保留空间

    Int32.Parse(_settingManager["DocumentSigningEstimatedTimestampSize"])
    

    要嵌入签名的许多字节。

    因此,请减少_settingManager["DocumentSigningEstimatedTimestampSize"] 的值。

    0 的值要求 iTextSharp 进行粗略估计。这样的估计可能会超出一些限制,因此不应在您的情况下使用。

    顺便说一下,DocumentSigningEstimatedTimestampSize 这个名字在这里有误导性。

    PS:如果您将 CRL、OCSP 响应或时间戳等其他材料嵌入到您的签名中,预期的签名大小会增加。为了符合 PDF/A-1a,请在签名中尽可能少地添加此类附加信息。

    【讨论】:

    • 感谢您的回复 :) 所以我已经尝试了您的建议并减少了我传递给 MakeSignature.SignDetached 的估计大小,但是当我尝试验证 PDF/A-1a 合规性。目前我通过的估计大小是 20400。抱歉,如果代码部分“Int32.Parse(_settingManager["DocumentSigningEstimatedTimestampSize"])”具有误导性:(亲切的问候
    • 目前我通过的估计大小是 20400 - 实际上看起来你正在通过 104000
    • 这是我最初通过 104000 的值,并按照建议尝试了较小的值,我会再试一次,也许我错过了一些东西。亲切的问候
    • 如果您再次尝试使用 20400 并且再次出现警告,请也共享该 PDF 以供检查。
    • @user2699460 您的新示例文档有 两个 签名,第一个签名日期为 2015 年 10 月 26 日,估计大小为 104000(验证者抱怨)和第二个日期为 2015 年 10 月 28 日,估计大小为 20400(不违反任何大小限制)。请确保您的测试输入符合 PDF/A-1a,您在此处的输入不是由于旧签名。
    猜你喜欢
    • 2012-01-05
    • 2013-12-31
    • 1970-01-01
    • 2021-06-25
    • 2014-10-13
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多