使用Java验证Lotus Forms XML数字签名 - 编程入门网
使用户能够对表单进行数字签名,不需要下载和安装 Lotus Forms Viewer。
除 Lotus Forms API 以外,还可以使用标准的 Java XML Digital Signature API(在 JSR 105 中定义)对签名表单进行交叉验证,这个 API 也作为 Java 6 的一部分包含在其中。 要断言某个表单没有被篡改,必须对表单中的所有签名进行验证。这种验证可 以通过查找所有包含 Signature 元素和非空 SignatureValue 元素的 XForms 实 例来完成。对于此类 XForms 实例中的每一个,将针对验证创建一个单独的、具 有合适名称空间的实例文档。出于性能考虑,可以使用用于 XML 的流 API 来拉 取 XForms 实例并放入到一个新的 Document Object Model (DOM) 文档中。 准备好 DOM 实例文档后,从要进行验证的 Signature DOM 节点中创建一个 DOMValidateContext。还需要用一个 KeySelector 从 KeyInfo 部分的签名证书 中提取公共密匙。DOMValidateContext 使用前面小节中的定制 URI dereferencer 来执行 XML 标准化(canonization)。解组 DOMValidateContext 将创建一个 XMLSignature 对象,其 validate() 方法可以返回表示签名是否有 效的信息。 对所有 XForms 实例中的所有签名进行验证后,将收集最终生成的结果,表示 完整表单的验证状态。 使用Java验证Lotus Forms XML数字签名(3)时间:2011-05-15 IBM Eric Fu处理 XForms 数据模型 如前一小节所述,Lotus Forms 中的 XML 签名是一个封装的签名,包含 XForms 实例的标记。要准确地验证此类签名,必须为 XForms 实例数据构建 DOM 。W3C XForms 规范(http://www.w3.org/TR/xforms/#structure-model- instance)要求将实例数据提取到一个单独的 DOM 文档中,并且如果实例数据被 内联到文档内部,那么必须从 XForms 实例元素及其祖先节点继承相应的名称空 间。所有对数据的操作应当在单独的 DOM 文档中完成。 这种方法意味着要创建文档,必须从包含 XML 签名的 xform:instance 内容 中克隆 DOM 子树。新的文档应当包含注释和 PI 节点,以及来自 xforms:instance 的惟一子元素。对于与清单 1 相对应的已签名表单,必须使用 从所有祖先节点继承的名称空间创建一个新文档,其中包含 <data> 文档 元素。这个文档被称为实例文档,而源文档被称为表单文档。 清单 2. 提取的文档元素的名称空间
由于父节点的名称空间前缀可以被一个子节点覆盖,比如默认名称空间,因此 如果名称空间已被复制到目标,那么就不会再次复制该名称空间。这种方法遵守 名称空间覆盖规则,因此只有距离最近的名称空间定义是有效的。 清单 3. 将名称空间从源节点的所有祖先复制到目标节点的代码
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |