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

使用PDFBox验证电子签名

公西马鲁
2023-03-14

我的公司已经请求一个Java web服务实现,从PDF表单中提取数据,以启动使用Apache PDFBox的客户端操作的直通处理功能。很简单。困难的是,表格是由我公司的客户代表最终客户提交的,但最终客户的签名必须经过验证。

签署这些表格的商业案例是通过非正式的电子签名(湿签名的数字表示)过程,如奥多比阅读器中带有客户签名图像的签名“邮票”,或在iPad上的触摸屏绘图。到目前为止,我无法一致地验证这种类型的签名,甚至无法一致地维护PDF状态,以便在这种类型的签名仪式后,PDFBox仍然可以读取它。

通过数字签名表单字段验证签名很简单,我已经向我们的企业传达了这一点。然而,由于在这些情况下,签名者通常是正在使用的任何机器上的数字证书的所有者,并且假设大多数交互将在客户办公室进行。

我有几个选择:

  1. 弄清楚如何一致地识别电子签名,并重现无损签名仪式,用于客户教育

我想上传几个示例PDF,但当然它们都是公司专有信息。我只想说,我们没有任何向导对表单做令人惊奇的事情...它们都是你的基本AcroForm,我正在努力找出如何配置签名区域。

非常感谢。

共有1个答案

秦凯旋
2023-03-14

关于你的实际问题:

我使用最新版本的Acrobat在签名区域上放置了一个图像表单字段,这是一个很好的解决方法,除了一件事:我尝试过的所有软件都将此表单字段类型作为按钮读取。有没有办法强迫它识别图像,或者任何更新的PDF阅读软件,可以检测这些字段?

任何识别这些字段为按钮的PDF阅读软件都是最新的,至少在这方面是这样,因为... PDF文件格式中没有"图像表单字段"!

一些PDF创建者使用按钮表单字段模拟图像表单字段,该字段通过JavaScript获取图像表单字段的行为。当然,这种模拟是不完整的。特别是这样一个字段中的图像不是表单字段的值,而仅仅是它的外观。

因此,如果要实现从这样的模拟图像表单字段读取值,则必须提取按钮的外观。

关于整个场景的一些评论:

... 最终客户签名必须经过验证。

签署这些表格的商业案例是通过非正式的电子签名(湿签名的数字表示)过程

与基于证书的数字签名相反,您几乎不能对这些值得称为“验证”的签名做任何事情。

好的,你可以在一些模拟图像字段中寻找PDF中的图像,但是你不能保证在该图像上可以看到湿签名的人支持该表单中的数据,更不用说亲自签名了。就像其他人可能只是从不同的手写文档中扫描了那个人的签名,并使用该扫描填写了表单一样...

到目前为止,我无法持续验证这种类型的签名

应该可以提取出大部分的湿信号

  • 作为直接或间接添加到页面内容的位图图像,
  • 或者作为直接或间接添加到某些注释外观(例如按钮)的位图图像,
  • 或者作为墨迹注释的墨迹列表或路径,
  • 或作为多段线注释的顶点或路径

在位图图像的情况下,如果适用,不要忘记提取图像掩码。许多应用程序用笔颜色填充基本图像,并在掩码中包含实际的签名图。

甚至无法始终如一地保持PDF状态,以便在这种类型的签名仪式后仍然可以被PDFBox读取。

这听起来像是执行签字仪式的软件的不当行为。不过,除非你分享一些例子,否则你很难分析这个问题。

 类似资料:
  • 我是使用数字签名的新手。在其中一个项目中,我们使用Apache PdfBox来处理数字签名的pdf文件。虽然我们可以测试所有功能,但签名pdf文件的验证是我们无法破解的。我们使用BouncyCastle作为提供程序。下面是代码: 从pdf文件获取数字签名和签名内容: 数字签名验证: 以下是p7b格式证书的相关摘录-我使用BouncyCastle作为安全提供程序: 使用上面的代码,我总是得到“fal

  • 我正在提示我的应用程序用户提供电子邮件凭据。 在用户插入电子邮件并通过后,我想验证该帐户。 我正在使用javax。邮政有没有办法验证帐户?只确保凭据确实有效——否则我想显示一个无效用户并传递消息。 也许是某种表演方式: 并在不发送任何内容的情况下检查身份验证异常。

  • 问题内容: 我正在尝试验证Java中经过数字签名的PDF文档。 我使用Apache PDFBox 2.0.6获取签名和已签名的原始PDF,然后使用Bouncy Castle验证分离的签名(计算原始文件的哈希,使用签名者的公钥验证签名并进行比较结果)。 我阅读了这篇文章,并尝试使用以下代码获取签名字节和原始PDF字节: 但是,当我将origPDF保存到文件中时,我注意到它仍然具有签名原始PDF所没有

  • 我有一张登记表,上面有姓名、电子邮件和密码。注册时,会向用户的电子邮件地址发送一个确认链接。但在发送链接之前,我需要验证电子邮件地址。我使用了: 它显示的任何电子邮件都有效,例如, 我从获得的电子邮件并将其存储在中。 我到底要怎么做才能让它成功?

  • 我想验证创建的pdf(不是作为文件),而是作为下载到浏览器的ByteArrayOutputStream。为了避免安全问题,可以使用pdfbox preflightparser进行验证,其中preflightparser只有解析文件的选项,而不是pddocument。 //此构造函数只接受文件。 预期是验证pdf文件的飞行,而不是从系统加载。

  • 我正在尝试验证Java中的数字签名PDF文档。 我得到以下警告: 警告:无效字典,在偏移量15756处找到:“[”,但应为:“/” 警告:尚未实现签名字段的外观生成-您需要手动生成/更新 当我尝试使用bouncy castle验证签名时,我得到一个消息异常:message-digest属性值不匹配计算值 我想这是因为签名的原始PDF和我使用从PDFBox中获得的PDF不一样。 这里是我的bounc