Itext 关于可视数字签名

Itext 关于可视数字签名,itext,digital-signature,Itext,Digital Signature,给定一个带有可见数字签名的输入pdf文件,我希望获得一个新的pdf文件,该文件将保留签名作为图形对象的视觉表示,但不再作为签名字段 我已经用一个工具查看了输入和输出文件,但是我想知道如何使用iText 输入: 输出:请注意,使用来自CDS或AATL成员的CA的证书可以验证签名,这样您就可以测试1个完整性、2个身份验证和3个不可否认性。通过丢弃签名字段,您将丢失所有信息,并且没有人能够知道文档在签名1后是否发生了更改,也不知道是谁在文档2上签名。签名者总是可以声称他从未签署过该文件3,因为任何人都

给定一个带有可见数字签名的输入pdf文件,我希望获得一个新的pdf文件,该文件将保留签名作为图形对象的视觉表示,但不再作为签名字段

我已经用一个工具查看了输入和输出文件,但是我想知道如何使用iText

输入:


输出:

请注意,使用来自CDS或AATL成员的CA的证书可以验证签名,这样您就可以测试1个完整性、2个身份验证和3个不可否认性。通过丢弃签名字段,您将丢失所有信息,并且没有人能够知道文档在签名1后是否发生了更改,也不知道是谁在文档2上签名。签名者总是可以声称他从未签署过该文件3,因为任何人都可以创建其签名的视觉表示

通过删除签名,您将创建一个没有实际签名的副本,这与打印数字签名的文档类似。通过删除实际的数字签名,只保留视觉外观,您将丢弃重要信息

话虽如此,您要求的是一件非常简单的事情:您希望将PDF文件展平。示例中显示了这一点。检查该文件,您会发现它与output.pdf完全相同

实现这一点的代码非常简单:

public void manipulatePdf(String src, String dest)
    throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.setFormFlattening(true);
    stamper.close();
}

对我来说,布鲁诺的回答不起作用。 我需要调用SetGenerateAppareStorue,以便能够看到展平的签名

public void flatPdf(String src, String dest) throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    AcroFields fields = stamper.getAcroFields();
    fields.setGenerateAppearances(true);
    stamper.setFormFlattening(true);
    stamper.close();
}

使用:iText 5.5.13

尝试将pdf中的相关信息插入到您的答案中。并非所有用户都可以访问所有外部链接或文件。数字签名本身并不提供真实性和不可否认性的证据。为此,有必要考虑一些额外的要求,例如,签名证书和证书链的有效性和信任。用例的一个例子可能是当您需要获取原始数字签名文档的带水印副本时。此副本的标记可能包含IP、日期时间、用户名等。感谢您的快速回答。好的,水印会破坏签名,如果您只需要一个副本,用例是可以接受的。使用来自CDS或AATL成员的CA的证书进行数字签名可以提供真实性和不可否认性。如果没有,CAs就不会有业务……数字签名的有效性取决于上下文。例如,在欧洲,必须使用欧盟信任列表TSL而不是AATL。更多信息。是的,欧洲有办法引入自己的规则。另见