如何实现数字签名

时间:2012-09-18 07:33:14

标签: pdf digital-signature

我们正在构建一个Web应用程序(Java)。有人可以帮我介绍一下我们需要实现以下业务场景吗?

  1. 用户访问我们的网站
  2. 他输入了一些数据
  3. 他根据他输入的数据生成PDF文件并将其导出
  4. 他对此PDF文件进行了数字签名
  5. 然后他将此PDF文件上传到我们的网站
  6. 系统可以解析PDF文件以了解谁签署了此文件,并确保其具有完整性和不可否认性以及某些后期处理。
  7. 我的问题是:

    • 我需要使用哪些产品/库(商业或免费开源)来实现上述目标?
    • 这些产品是否为开发人员提供API以编程方式操作签名过程并从签名文档中检索信息?
    • 在上述3~5步中进行数字签名是否合理或合适?用户是否可以一步在线签署数据(例如,不导出PDF文件)?

2 个答案:

答案 0 :(得分:1)

iText是一个java库,除其他外,它使您能够在pdf文档上签名和验证签名。这将使您的用户能够在线签署PDF。可以找到使用iText签署和验证pdf文档中的签名的一个很好的示例here

图书馆的licence是AGPL,即您需要根据AGPL发布您的软件或购买商业许可证。

它曾经属于LGPL,因此您可以根据LGPL条款使用iText 2.1.7,而无需购买商业许可证。

答案 1 :(得分:0)

如果数据位于客户端,那么最简单的选择是创建一个Java applet,它将在浏览器中执行,并将对数据进行签名。任何数据都可以签名,您只需要签名就不需要PDF。可以使用PKCS#7 / CMS格式或使用XMLDSig(不太广泛的选项)对通用二进制数据进行签名。

对于在Java applet中签名数据,您可以使用BouncyCastle或我们的SecureBlackbox(Java版)。 BouncyCastle是开源的,SecureBlackbox附带支持,文档和示例。