网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  javase 6基于jsr105的xml签名之理论篇     
  文章作者:未知  文章来源:水木森林  
  查看:114次  录入:管理员--2007-11-17  
 
  xml签名技术,这项在w3c建议中指定的xml签名语法及处理方法(xml-signature syntax and processing),成为解决soa开发中消息级安全性方案的基础。被普遍接受的oasis标准ws-安全性(ws-security)正是构建在这一技术(以及xml加密)基础之上。jsr-105规范又对在java平台应用xml签名技术进一步标准化,并且将成为即将到来的java se 6发行版本的一个组成部分。本系列文章(《理论篇》与《实践篇》)将基于java se 6的试发行版本对jsr-105作入门性介绍;在第二篇(即《实践篇》)中,我们将讨论一个具体的应用案例。

  一、 数据一致性和消息认证

  xml数字签名的主要目的是确保数据一致性。rfc 2828,因特网安全词汇表(internet security glossary),把"一致性"定义为"在一种未授权的或偶然方式下确保数据没有改变、破坏或丢失的属性"。在这种意义上,与一个校验和一起存储或传递数据就可以实现数据的一致性。严格地说,xml签名能够实现比这种一致性更为丰富的内涵-它能够为在rfc 2828中所谓的消息认证提供支持。

  二、 签名元素结构

  实质上,xml签名使用xml语义描述一个数字签名。下列层次捕获顶级的元素和属性以及它们之间的结构化关系。

在第二步中,它使用一个密码学密钥在signedinfo元素上应用一种数字签名算法来生成签名值,并且把它包括为结果reference元素的一部分。

  第二步的实际机制往往随着数字签名算法的不同而不同,或更通常的是,因算法类别的不同而不同。

  实践中,一个数字签名算法从未直接操作给定signedinfo的xml格式,而是操作由signedinfo元素的物理描述转换而来的流数据(八位)。为了允许signedinfo元素的逻辑上的等价表示,这种到八位的流的转换基于signedinfo元素的规范形式。存在两个w3c规范,canonical xml和exclusive xml canonicalization,定义了xml的规范化。获得一个给定xml文档(或元素)的规范形式的方法是很复杂的。但是,一般地,所有的xml签名应用程序需要实现的就是,基于它们的上下文环境从四种已定义规范化方法中进行现成的选择-exclusive,exclusive_with_comments,inclusive和inclusive_with_comments(列举于jsr-105注释中)。注意,signedinfo中的canonicalizationmethod元素负责捕获这一选择。

  四、 xml签名中的核心校验

  xml签名中确保数据一致性和消息认证的机制基于核心校验过程。它包括两部分:引用校验和签名校验。

  引用校验验证在一个xml签名中的每一个reference元素都是有效的。在此,单词"有效"的含义是:在对相应的数据对象(一般情况下通过uri属性加以引用)应用相同的转换之后,使用在reference元素中指定的digest方法,我们应该能够获得一个已经记录在reference元素中的相同的digest值。这个digest值就是我们以前提及的校验和。这种校验对xml签名中的数据一致性提供了支持。

  签名校验的实际机制依赖于在signedinfo元素中引用的特定的签名算法(更精确地说是,签名算法的类别)。它们的共同要求是,校验应用程序必须拥有相应的密码学密钥:使用hmac_sha1(或使用其它哈希函数的hmac)加密的密钥,或使用rsa_sha1和dsa_sha1(或使用其它哈希函数的rsa和dsa)加密的公共密钥。

  references是signedinfo元素的一部分,这是确保实现在xml签名中的消息认证(这是一种比数据一致性更为安全的属性)的结构机制。

  五、 三种类型的xml签名

  w3c建议允许签名任何数字数据,并且这包括一个xml文档,一个文档的xml元素以及一个xml元素的内容(作为特定的情形)。

  当我们谈及一个xml签名时,我们实际上指的是一个xml文档,它把signature(在命名空间http://www.w3.org/2000/09/xmldsig#中定义)包含为一个元素(这可以是根元素)。但是,该文档可能还包含其它元素,这其中最为重要的当然要数要签名的原始数据对象。

  根据那些数据对象在一个xml signature文档中与signature元素的关联方式,我们考虑三种不同类型的xml签名。

  ? enveloping-数据对象包含在与signature元素相同的xml文档中,并且被进一步包含在signature元素(例如作为object的子元素)中。

  ? enveloped-数据对象包含在与signature元素相同的xml文档中,并且实际上把signature包括为一个子元素。

  ? detached-signature引用外部网络资源,或数据对象包含在与signature元素相同的xml文档中,但是作为一个兄弟元素或它的兄弟元素的一个子元素。

  【注意】一些关于xml签名的文章中让读者感觉到这是一个独占分类的xml签名;另一些则含蓄地建议,在enveloping或enveloped签名中,实际上在包含该签名的xml文档中还存在一个envelop元素;而且,还有一些文章则暗示:对一个enveloping签名来说,signature是xml文档的根元素。其实,所有这些都不对。

  六、 object和keyinfo

  在我们继续介绍jsr-105之前,我们需要简短地讨论两个可选的签名子元素-object和keyinfo。

  w3c建议中的object元素是一个占位符,用于在一个xml签名应用程序承载实现若干不同目的之信息。例如,一种可能的应用是,一个object包含一个enveloping签名中被签名的数据对象。这正是我们的示例所适用的情形。

  xml签名的keyinfo元素可以用于签名应用程序实现与加密(私有)密钥相关信息的通讯,以便校验程序可以获得相关的(公共)密钥。在接下来的【实践篇】中,我们的示例将包括若干场所来说明keyinfo的使用情形。
 
 
上一篇: aspectj: 通往aosd之路的最佳军火    下一篇: ejb初学者常有的十一个疑惑
  相关文档
jbuilder4支持的文件类型列表 11-17
struts中文问题和国际化问题的终极解决方案 11-17
java应用开发中jdbc接口技术的介绍 11-17
java 2源码解读:java.util.arraylist 11-17
j2me入门专题系列之二:应用程序与简表 11-17
头条:webwork将加入struts! 11-17
java学习之java的运行环境 11-17
java 数据对象(jdo)介绍(三) 11-17
高级:java学习彻底明白java的io系统 01-16
spring+hibernate+jbpm整合成功 11-17
springaop之helloworld 11-17
wireless messaging api(1) 11-17
jboss 4.0 简化了中间件的开发 11-17
从jar文件中读取文件 11-17
在struts 2中实现文件上传 11-17
ejb 3.0开发指南之依赖注入 11-16
为java加速 ——jbuilder 6可视化开发环境 11-17
java表达式中类型的自动提升 11-17
打破java定律:无需创建对象--ioc容器革命 11-16
java相关基础知识(1) 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息