使用 Java 验证 Lotus Forms XML 数字签名
2010-01-15 00:00:00 来源:WEB开发网验证证书
对于 Lotus Forms 中的已签署签名,证书链被放入到 Signature 元素的 KeyInfo 中,其中第一个证书为已签名证书。证书链可由 Java Certification Path API 进行检验。此外,如果维护了可信的接受方名称列表,那么可以比较已签名证书的接受方,看看它是否匹配可信列表中的接受方。这一步骤可以确保表单的签名者是可信的。
分步运行样例代码
所需的库
Java 1.4 或 5 需要 JSR 105 实现。本文使用了 Apache XML Security Java 库。由于 Java XML Digital Signature API 已经被包含到 JDK 6 中,因此 Java 6 不需要任何额外的 JAR 文件。
针对 Java 6 的说明
从本文的下载小节下载包含所有样例代码和表单的 ZIP 文件
将文件解压缩到一个目录中,比如 /forms
切换到目录 /forms/xmldsig/bin: cd /forms/xmldsig/bin
确保使用了正确的 Java 版本:java -version
运行样例代码和表单:java xmldsig.FormVerification ../src/test/resource/form-signed.xfdl
一个已经发现的问题:在撰写本文时,IBM JDK6 中的 XMLDSig 实现有一个名称空间标准化 bug,并且不支持 here() 函数,因此无法使用它对样例表单进行验证。
针对 Java 1.4 或 5 的说明
从本文的下载小节下载包含所有样例代码和表单的 ZIP 文件
将文件解压缩到一个目录中,比如 /forms
从 http://xml.apache.org/security/dist/java-library/ 下载 Apache XML Security 库 xml-security-bin-1_4_2.zip
将其解压缩到 /forms(可以在随后的表单中看到目录 xml-security-1_4_2)
如果使用来自 Sun 的 Java 1.4 的话,将 xalan.jar、xml-apis.jar、serializer.jar 从 /forms/xml-security-1_4_2/libs 复制到 jre/lib/endorsed(参见 http://santuario.apache.org/Java/installation.html)
切换到目录 /forms/xmldsig/bin: cd /forms/xmldsig/bin
确保使用了正确的 Java 版本:java -version
运行样例代码和表单:java -classpath .;../../xml-security-1_4_2/libs/xmlsec-1.4.2.jar;../../xml-security-1_4_2/libs/commons-logging.jar;../../xml-security-1_4_2/libs/xalan.jar xmldsig.FormVerification ../src/test/resource/form-signed.xfdl
结束语
Lotus Forms 使用针对 XForms 和 XML Signature 的 W3C 标准来表示它的数字签名。因此,可以根据开放标准轻松地对表单进行验证,从而实现将其集成到企业应用程序流程中。
本文示例源代码或素材下载
更多精彩
赞助商链接