Detached 格式的签名指 <Signature> 元素与被签名的数据内容之间是彼此分离的,既不是包含关系也不是被包含关系,如下表所示:
1. .............. 2. <SignedData> 3. .............. 4. </SignedData> 5. .............. 6. <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 7. .............. 8. </Signature> 9. .............. |
Detached 格式多用于对外部独立的数据对象进行签名,使用 URI 来引用外部数据对象,也可以引用同一 XML 文档中的其他元素,对之进行数字签名。
表3中待签名的 XML 文档包含有两次信用卡交易的支付信息,第一个是 Simon 的信用卡交易记录,第二个是 Peter 的。本节将对 Peter的支付记录进行数字签名,所使用的签名格式是 Detached 格式。为了让 <Signature> 元素能够引用到包含有 Peter 信用卡交易信息的 XML 元素,这里用 id 属性对 Peter 的 <PaymentInfo> 元素加以引用。
3.3.1 生成签名
本节的大部分代码都与生成 Enveloped 格式签名的代码相同,只是在创建 Reference 的时候有些不同:
1. XMLSignatureFactory fac =
2. XMLSignatureFactory.getInstance("DOM");
3.
4. // Create the reference to Peter's payment info
5. DigestMethod sha1DigMethod =
6. fac.newDigestMethod(DigestMethod.SHA1, null);
7. Reference ref =
8. fac.newReference("#PeterPayment", sha1DigMethod);
|
"#PeterPayment" 用于引用位于同一文档中的 Peter 的 <PaymentInfo> 元素。
3.3.2 验证签名
使用表 5 中的 validate 方法对生成的数字签名进行验证,输出信息表示验证成功。然后在生成的 XML 文档中,将 Simon 的支付金额改为 30000,重新验证,结果依然为验证成功。这是因为只对 Peter 的支付记录进行签名,所以 Simon 的支付信息改变,不会影响数字签名的验证结果。如果再将 Peter 的支付金额改为 50000,重新验证,则输出信息显示验证失败。
同传统意义的数字签名技术相比,XML 数字签名技术有很多不可替代的优点。它能够在保持 XML 文档良构性的前提下,对文档内容进行细粒度的签名和验证;通过资源引用和转换的机制,扩大了签名的作用范围,更能够满足分布式应用系统中的安全需求。
W3C 组织制订的 XML 数字签名规范规定了标准的 XML 签名语法和处理规则,而Java SE 6则为 XML 数字签名提供了标准的 Java 接口。目前这些 XML 数字签名规范和程序标准还在进一步完善中,相信随着技术的发展,XML 数字签名技术必将得到越来越广泛的应用。
- Donald E. Eastlake, Joseph M. Reagle, David Solo, XML-Signature Syntax and Processing (http://www.w3.org/TR/xmldsig-core/), W3C Recommendation, Feb 12, 2002
- JSR105 - XML Digital Signature APIs(http://jcp.org/en/jsr/detail?id=105)
- JSR106 - XML Digital Encryption APIs(http://jcp.org/en/jsr/detail?id=106)
- Apache XML Security(http://xml.apache.org/security/)
- Sun Java SE 6(http://java.sun.com/javase/6/)
- developerWorks 中国网站 XML 技术专区
- developerWorks 中国网站 Java 技术专区
相关专题
- QQ个性签名汇总 (2847篇文章)
- Java环境安装配置 (5658篇文章)
- Java编程开发手册 (8309篇文章)
- XML详解 (1548篇文章)
- Java网络及通讯编程 (667篇文章)
- Web开发 (428篇文章)
- 开发框架:深入了解 Struts Validator (3次浏览)
- Java中的通信机制及与C/C API的集成 (1次浏览)
- 用Hibernate实现领域对象的自定义字段 (1次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



