多重签名不起作用

时间:2018-08-12 21:23:12

标签: c# digital-signature itext7

我尝试将我的iText5代码移植到iText7中。我设法对未签名的pdf进行了签名,但是在签名已签名的文档时遇到了一些麻烦。

我简化了代码。下面将一些有趣的东西放入我的pdf中。代码:

using (var os = new MemoryStream())
{
    var pdfSigner = new ExtendedPdfSigner(new PdfReader(new MemoryStream(File.ReadAllBytes(@"C:\Users\x\Desktop\signed.pdf"))), os, true);
    var external = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite, PdfName.Adbe_pkcs7_detached);
    pdfSigner.SignExternalContainer(external, 8192);
    File.WriteAllBytes(@"C:\Users\x\Desktop\tempFile.pdf", os.ToArray());
}

tempFile screenshot

它还显示第一个签名中的“文档有后续更改”消息。

我不知道这是否是一个错误,但我什至在7.1.3快照中尝试过。

我尝试再次签名的已签名pdf是this。 生成的临时pdf为this

1 个答案:

答案 0 :(得分:0)

这是由于iText 7中的错误所致。在检索页面的注释以向其添加签名小部件时,所有的注释都被触摸:对它们的页面的可选引用被添加到其中,并且标记为< em>更改。

因此,此问题可以由以下代码重现(在Java中;在C#中类似):

try (   PdfDocument pdfDocument = new PdfDocument(new PdfReader(SOURCE), new PdfWriter(DEST), new StampingProperties().useAppendMode())) {
    pdfDocument.getPage(1).getAnnotations();
}

SignTwice测试testStampSigned

仅执行此getter会导致页面1上的所有注释都被更改,因此使Adobe Reader发出有关注释修改的警告。如果签名是认证签名,不允许进行任何更改,那将使原始签名无效!

纯粹的吸气剂一定不能具有这种副作用。