插入附件会损坏数字签名

问题描述 投票:0回答:1

我正在尝试将 XML 文件附加到 Pades 中签名的 PDF 文件。 我使用 iText 版本 8.0.3.0 来执行此操作。 (框架4.7.2)

一切都很好,但带有附件的文件似乎有一个无效的签名。我用Foxit、Acrobat等在线工具检查了该文件。 错误似乎是这样的:

签名/印章不是有效的 AdES 数字签名! /ByteRange 字典不一致! 参考数据对象不完整!

我读过这些,但它们对我没有帮助。 使用iTextSharp时数字签名无效 Pdf 签名会使 Acrobat Reader 中的现有签名无效 我哪里出错了?这是我的代码:

string pdfIN = "test.pdf";
string pdfOut = "testout.pdf";

PdfReader oReader = new PdfReader(pdfIN);
PdfWriter oWriter = new PdfWriter(pdfOut);
PdfDocument oPdfDocument = new PdfDocument(oReader, oWriter);

var bytes = File.ReadAllBytes(pdfIN);

PdfFileSpec fs = PdfFileSpec.CreateEmbeddedFileSpec(oPdfDocument, bytes, "Test insert attachment", "cda.xml", PdfName.ApplicationXml, null, new PdfName("Data"));
oPdfDocument.AddFileAttachment("cda.xml", fs);
oPdfDocument.Close();
c# itext
1个回答
0
投票

首先,如果您想对签名的 PDF 添加更改,则必须使用追加模式:

PdfDocument oPdfDocument =
    new PdfDocument(oReader, oWriter,
                    new StampingProperties().UseAppendMode());

这使得 iText 将更改作为增量更新附加到文件中(保留签名字节不变)。如果没有这个,整个文件将使用更改后的签名字节重新保存。

但即使进行此更改,MDP 感知验证器也可能会拒绝您的添加,因为这是不允许的。请参阅此答案,了解允许和禁止对签名 PDF 进行更改的概述。

© www.soinside.com 2019 - 2024. All rights reserved.