当前位置: 首页 > 知识库问答 >
问题:

在认证和签名后锁定PDF文件

司寇琨
2023-03-14

我正在试图找到一种方法,以锁定一个签名和认证的PDF修改使用iText的方式,像Abode Reader DC这样的观众告诉我该文档是不开放的修改像这样

(如果我使用Adobe签署文档,我就可以这样做)使用PDF版本1.7和iText版本7.1.6。

然而,当我认证并签署我的pdf文件时,我的结果是:

在处理过程中,首先使用认证签名对此PDF进行签名,认证级别设置为form fillingpdfsigner.certified_form_filling

之后,PDF将由任意数量的人进行数字签名。

我已尝试放置认证签名,并在签名后将认证级别设置为pdfsigner.certified_no_changes。这将破坏除认证签名以外的所有签名。

我也尝试过用密码“锁定”文件,但这也没有达到预期的效果。

在使用iText库放置最后一个签名后,有没有办法锁定pdf文件,以便在签名和认证后显示第一条消息?

共有1个答案

西门京
2023-03-14

由Bruno Lowagie编写的白皮书“PDF文档的数字签名”仍然是与iText签名相关的所有内容的一个很好的来源。包含的Java示例代码适用于iText 5.5.x(实际上是5.3.x到5.5.x),但您可以在iText/i7js-signatures github存储库中找到iText 7的端口。

在第2.5.5节中,白皮书讨论了签名后锁定字段和文档的问题,其中包含了一个例子,几个签名相继锁定了一个表单的越来越多字段,最后一个签名也锁定了该文档,将其从“验证人已指定该文档允许填写表单和签名。不允许进行其他更改”切换到““认证人已指定不允许对本文件进行任何更改。”正如本题所希望的那样。

这里提供了iText 5.x的示例代码,这里是iText 7的端口。

不幸的是,iText 7端口的当前代码中存在一个小错误,导致步骤4的结果(锁定整个文档的签名)出现以下签名面板:

(黄色的三角形是因为我不信任测试证书,但红色的圆圈和错误文本不应该在那里。)

这可以很容易地修复,但是,原始示例当前准备的最后签名字段如下所示

lock = new PdfSigFieldLock().setDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED);
table.addCell(createSignatureFieldCell("sig4", lock));

不幸的是,它忘记在签名字段锁字典中设置所需的操作条目。您可以将其添加到代码中,如下所示:

lock = new PdfSigFieldLock().setFieldLock(PdfSigFieldLock.LockAction.ALL).setDocumentPermissions(PdfSigFieldLock.LockPermissions.NO_CHANGES_ALLOWED);
table.addCell(createSignatureFieldCell("sig4", lock));

现在签名面板看起来是这样的:

(上面提到了黄色三角形是因为我不信任测试证书。)

 类似资料:
  • 我有一个windows服务,它可以动态地将PDF合并在一起,然后将它们移动到另一个位置。在大多数情况下,我无法控制某人想要合并什么。有时会处理损坏的PDF,因此创建新的PdfDocument会抛出PDFEException“Traile not found”。我捕获了异常并关闭了文档,但在关闭PDF之后,它仍然以某种方式被锁定。我需要删除该目录,但在尝试这样做时,它会引发IOException并使

  • 基本概念 Account Key, Account Secret: 用于标示开发者,获取方式见快速入门中生成新的云密钥图中的帐号密钥 App Key, App Secret: 用于标示开发者的App,获取的方式见快速入门中生成新的云密钥 Signature:根据Access Key和Secret Key和用户请求计算出的数字签名,用于验证用户身份。 Note 介绍签名算法时我们不区分Account

  • 我正在编写一个服务,其中我用一个空容器预签名pdf文件,从pdf文件中提取一个字节范围的散列,并将其发送到另一个服务,这将允许用户使用移动电话对散列进行签名。我拿回一个证书,我将注入到预签名pdf文件中的签名容器中。 签名本身起作用,数字签名是有效的,但我只需要更改可见签名本身的文本。我认为这是可能的,因为可见签名实际上与证书本身没有任何关系,所以显示来自证书的名称只是一种方便,特别是在多个签名的

  • 我想通过使用锁签署一个pdf文件。我正在使用PDFBox 2.0.9 我想实现的流量是: null 我可以签名,更改字段值,然后再次签名,签名就可以了。问题是当我在第二个签名之后更改字段的值时,签名仍然有效。我希望在上次更改后,第二个签名一定是无效的。

  • 在过去的几周里,我一直在使用iText对PDF文件进行数字签名,根据我的理解,有两种方法可以将信息添加到PDF中,使其启用LTV: > 使用iText示例中提供的代码添加信息,此方法要求签名已经存在,因为DSS 嵌入crl字节 尽管第一种方法生成了一个整洁的pdf文件,但问题是它修改pdf文件以创建/附加条目,从而导致认证签名无效,第二个很好,但它会根据crl列表的大小大幅增加pdf大小(这也可能

  • 开发者需要自己维护预签名下发服务器,由预签名下发服务器调用FDS SDK产生预签名链接 由于签名信息在url中,所有http请求请使用https协议 与请求签名认证的区别 对客户端要求低:开发者服务端计算请求签名 更安全:无须把密钥发布到设备上 签名信息保存在url中,而不是在http请求头部 用预签名URL完成分片上传 参考Presigned url分片上传示例 调试相关 参考 预签名链接使用相