Dav*_*d L 6 java itext digital-signature itext7
我正在尝试将我的应用程序从 iText 5.5.9 迁移到 iText 7,但我在使用客户端上创建的签名(在 PDF 文档的数字签名中描述)在服务器上签署文档时遇到问题。
由于该getRangeStream()方法不再像在 iText 5.5.9 中那样公开,我如何获得对范围流的引用?
getRangeStream并不是唯一从PdfSignatureAppearance到重构PdfSigner并protected以此方式制作的方法。其他方法也存在同样的问题,例如preClosePDF文档数字签名中的和servletclose中使用的方法PreSignPostSign中使用的方法,您似乎使用或至少借用了其中的代码。
据我推测,这样做是为了让 iText 7 用户使用signDeferred、signDetached和signExternalContainer方法,这些方法通常足以签署应用程序并“正确执行”,即使用其他现在不再是公共方法来创建有效的方法签名。
不幸的是,PreSign和PostSignservlet 无法使用这三种方法,它们实际上就像signDetached被分成两半的代码,相关的局部变量存储在 HTTP 会话中。
因此,您基本上有两个选择:
PdfSigner除非我忽略了某些事情,否则这甚至可以通过派生您自己的签名者类并使这些方法和可能的成员变量再次可公开访问来完成;乍一看似乎没有必要使用反射魔法。
PreSignservletPostSign架构如果您可以从将那些与签名相关的对象保留在内存中(通过 HTTP 会话引用)切换到仅将中间 PDF 文件保留在内存中甚至磁盘上,并且可能将半生不熟的签名容器保留在内存中,您可以像这样继续:
将 servlet替换为使用仅提供虚拟签名的实现PreSign“签署”PDF 的 servlet ,例如。PdfSigner.signExternalContainerIExternalSignatureContainernew byte[0]
这IExternalSignatureContainer将检索所寻找的范围流作为其sign方法的参数,因此它可以计算范围流哈希。
现在,带有虚拟签名的 PDF 可以保存到磁盘或保存在内存中。基于范围流哈希,您可以PdfPKCS7像以前一样继续构建和提供实例。并将其保存在内存中,例如从 HTTP 会话引用。
将 servlet替换PostSign为像以前一样完成提供PdfPKCS7实例并生成 CMS 签名容器的 servlet。然后使用该方法将此容器注入到保存的 PDF 中PdfSigner.signDeferred。
或者,您甚至可以将整个 CMS 签名容器创建移至客户端。在这种情况下,所有会话必须记住中间 PDF 的存储位置......
一些灵感可能来自C4_09_DeferredSigning.java iText 7 示例。
| 归档时间: |
|
| 查看次数: |
1851 次 |
| 最近记录: |