给你的XML文件做个数字签名
如今 XML已经非常普及了,越来越多的公司都在网上使用XML传输结构化数据,特别是在电子商务中 XML应用尤其突出,比如在客户端用Web服务获取服务
器端的office文件,修改后再回传给服务器。因此 XML文档的安全性也变得愈加重要,也
越来越多地受到人们的关注。我们可以对 XML文件进行数字签名,保证 XML文档的安全,以便确认原始文档没有被污染或变更。
XML数字签名的发展历史
1999年,IBM 推出了XML安全组件,这是XML签名规范的原型,它包含一些自动生成XML数字签名、实现W3C的“规范”XML工作草
案,以及通过XML加密的实验性实现来提供元素级加密的实用程序;
它还提供一种在应用到XML文档时处理安全性特定要求的方式,引入
了“可扩展访问控制语言( XACL)”的XML模式定义……
XML数字签名方式和示例
XML签名可以用来确保XML文档内的内容没有发生改变,如果和XML加密联合使用,即可保证所接收的数据就是所发送的数据,外人无
法阅读加密内容。XML数字签名有两种方式,即封装签名和分离签名,
可以应用到任意数据内容。所谓封装(或被封装)签名,是指数据和
签名在同一个XML文档中,而那些数据在签名元素外部的签名称为分
离签名。下面是一个分离签名示例,XML文件经过数字签名之后,其内
容如下所示……
给XML文件数字签名的方法
你可以从 IBM 的 alphaWorks 获得IBM 的安全组件,该安全组件中有一个自动生成XML数字签名的工具,使用它即可给XML文件签
名。此外,微软也发展了一套机遇数字证书的XMLsigned认证方式,
使用微软提供的 工具,也可以给XML文件数字签名。
·微软的数字签名法·XML安全组件签名法
1、准备工作1、准备工作
2、创建自己的数字证书2、创建自己的数字证书
3、生成软件发布spc证书
3、如何对内部XML资源数字签名
4、对XML文件进行数字签名
4、如何对外部XML资源数字签名
5、验证数字签名
一、XML数字签名的发展历史
1999年,IBM推出了XML安全组件,这是XML签名规范的原型,它包含一些自动
生成XML数字签名、实现  W3C  的―规范‖XML工作草案,以及通过XML加密的实验性
实现来提供元素级加密的实用程序;它还提供一种在应用到XML文档时处理安全性特定要求的方式,引入了―可扩展访问控制语言( XACL)‖的XML模式定义。
2001年,世界互联网联盟 (W3C) 和因特网工程任务组 (IETF) 共同组建的XMLSignature工作组,公布了XML数字签名的推荐版本──XML签名的语法和处理规范(缩写为XMLDSIG),作为数字签名的规范推出。自 2002 年 2 月以来,它一直是正式
的 W3C 推荐规范,并得到了广泛的应用:微软.NET Framework 中的
System.Security.Cryptography.XML就应用了此规范。
W3C将XML数字签名解释为:定义一种与XML语法兼容的数字签名语法描述规范,
描述数字签名本身和签名的生成与验证过程。作为一个安全有效的数字签名方案,该规范
提供了数字签名的完整性、签名确认性和不可抵赖性。为了适应不同的文件系统和剖析器,XML签名非常依赖―规范化‖的概念,以便签名能够在XML文档所碰到的各种环境中起作用。在目前的规范中规定:消息摘要使用SHA—l算法,消息鉴别编码使用HMAC算法,数字
签名使用DSA和PKCS1算法;在安全模式上,可以使用基于对称密钥和基于公开密钥两
种体制。
二、XML数字签名方式和示例
XML签名可以用来确保XML文档内的内容没有发生改变,如果和XML加密联合使用,即可保证所接收的数据就是所发送的数据,外人无法阅读加密内容。XML数字签名有两种
方式,即封装签名和分离签名,可以应用到任意数据内容。所谓封装(或被封装)签名,
是指数据和签名在同一个XML文档中,而那些数据在签名元素外部的签名称为分离签名。下面是一个分离签名示例,XML文件经过数字签名之后,其内容如下所示:[s01]<Signature Id="MyFirstSignature"
xmlns="/2000/09/xmldsig#">
[s02]<SignedInfo>
[s03]<CanonicalizationMethod Algorithm="/TR/2001/
REC-XML-c14n-20010315"/>
[s04]<SignatureMethod Algorithm="/2000/09/
xmldsig#dsa-sha1"/>
[s05] <Reference URI="/TR/2000/REC-xhtml1-20000126/">
[s06] <Transforms>
[s07] <Transform Algorithm="/TR/2001/REC-XML-c14n-
20010315"/>
[s08] </Transforms>
[s09] <DigestMethod?Algorithm="/2000/09/
xmldsig#sha1"/>
[s10] <Digestvalue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</Digestvalue>
[s11] </Reference>
[s12]</SignedInfo>
[s13]<Signaturevalue>MC0CFFrVLtRlk=...</Signaturevalue>
[s14] <KeyInfo>
[s15a] <Keyvalue>
[s15b] <DSAKeyvalue>
[s15c] <p>...</p><Q>...</Q><G>...</G><Y>...</Y>
[s15d] </DSAKeyvalue>
[s15e] </Keyvalue>
[s16] </KeyInfo>
[s17]</Signature>
以上清单中 s02行和s12行之间是SignedInfo元素,即实际签名的信息。SignedInfo 的核心验证由两个必要过程组成:对 SignedInfo 的签名验证和 SignedInfo 内部每个Reference 摘要的验证。
s03行上, CanonicalizationMethod 标识了一种算法,这种算法被用来规范化SignedInfo 元素,然后该元素作为签名操作的一部分被编摘。规范化(Canonicalization)
是一种方法,过程使用该方法处理可包含在同一数据元素内部的不同数据流,例如,可以
包含两种不同方法来表示文本。规范化是解释原始数据以使空格显示为空格而不显示为ASCII 码的方法。
s04行上,SignatureMethod引用的是将规范化的SignedInfo转换成Signaturevalue
所用的算法。它是密钥相关的算法和摘要算法(在这里是DSA和SHA-1)的组合,为算
法名签名以抵抗攻击,该攻击是基于替换成效率更低的算法。要提高应用程序的互操作性,候选方案指定一组需要实现的签名算法,虽然它们的使用任凭签名创建者处理。
[s05-11] 每个Reference 元素都包括摘要方法和对已标识数据对象计算得出的摘要值。它还可能包括产生对摘要操作的输入的转换。数据对象的签名是通过计算其摘要值并对该
值的签名进行的。稍后通过引用和签名验证来检查该签名,这些验证将重新创建摘要值并
确保它与该数据对象中的内容匹配。
s05行上,Reference 的这个可选 URI 属性标识要签名的数据对象。在一个
Signature 中,至多可以对一个 Reference 省略该属性。(为了确保明确地匹配引用和对象,要强加这个限制。)
[s05-08] 该标识与 transforms 一起是签名者提供的描述,其内容有关它们如何获得已
编摘形式的已签名数据对象(即,已编摘的内容)。验证者还可能以另一种方法获得已编
摘的内容,只要摘要验证这种方法。
Transforms 是一种可选的处理步骤排序列表,在编摘资源内容之前,对它应用这些步骤。这是解密所需遵循的轨迹。Transforms 可以包括如规范化、编码/解码(包括压缩/
扩张)、XSLT 和 XPath 等操作。XPath 转换有些复杂,因为它们允许签名者派生出省略
一部分源文档的XML文档,并将XML树限制为它原来的那样。因此,未包含部分可以更改,而不影响
签名有效性。如果不存在 Transforms 元素,则直接编摘资源内容。应该记住,即使在候选方案中指定了基本缺省设置,还是允许用户指定的转换。
[s09-10] DigestMethod 是在应用 Transforms(如果已经指定它)之后对数据应用以
产生 DigestValue 的算法。DigestValue 的签名是将资源内容与签名者密钥绑定的机制。
s13行上是SignatureValue 元素本身,它在 SignedInfo 之外,即位于签名部分之外,不过计算 SignatureValue 所使用的算法则包括在已签名的信息中。
s14行和s16行之间是KeyInfo元素(该元素是可选的),它指出了用于验证签名的
密钥。标识机制可以包括证书、密钥名称和密钥协议算法。KeyInfo 是可选的有两个原因。首先,签名者可能不希望向所有文档处理方披露任何密钥信息。为什么总要告诉人家?其次,该信息在应用程序上下文中可能是已知的,并且不需要明确表示。由于 KeyInfo 在SignedInfo 之外,所以如果签名者希望将密钥信息与签名绑定,那么 Reference 可以容易
地将 KeyInfo 作为签名的一部分标识并将其包括在内。
三、给XML文件数字签名的方法
你可以从 IBM的 alphaWorks 获得IBM 的安全组件,该安全组件中有一个自动生成XML数字签名的工具,使用它即可给XML文件签名。此外,微软也发展了一套机遇数字证书的XMLsigned认证方式,使用微软提供的 工具,也可以给XML文件数字签名。
一、微软的数字签名法
为了保护你的 XML文件,微软提供了office 2003 Developing resource/smart document developing software toolkit软件,该软件中有一个名为 的工具,你可以使用它对 XML文件数字签名,方法如下:
1、准备工作
首先下载安装微软的office 2003完整版,其大小有670MB,各大网站均有下载;然后下载安装office 2003 Developing resource/smart document developing software toolkit 软件(下载地址www.microsoft/downloads/details.aspx?familyid=24a557f7-eb06-4a2c-8f6c-2767b174126f&displaylang=en ),安装完成后,在X:\Program
Files\Microsoft Office 2003 Developer Resources\Microsoft Office 2003 Smart Document SDK\Tools目录下就有一个文件,利用该文件即可对XML文件签名。
2、创建自己的数字证书
接下来,下载安装微软的 Authenticode for Internet Explorer 5.0(下载地址
www.microsoft/downloads/details.aspx?familyid=2b742795-d0f0-4a66-b27f-22a95fcd3425&displaylang=en ),该工具包中有个 程序,你可以用它来制作自己的数字证书,产生一个数字证书文件和对应的私匙文件lacl.pvk,操作步骤如下:
将 和要签名文件 sonnet.XML,都拷贝到 所在目录;然后在命令提示行中,用CD命令进入所在目录,输入以下命令makecert -sv lacl.pvk -n CN=
3、生成软件发布spc证书
由以上数字证书,生成一个spc证书(lacl.spc),操作步骤是:在命令提示行中,用CD命令进入所在目录,然后输入命令 lacl.spc即可。
4、对XML文件进行数字签名
安卓软件签名工具用spc证书,对某个XML文件进行数字签名,操作步骤如下:先在Windows下进入目录,把要签名的XML文件(例如sonnet.XML)和,都拷贝到所在目录下;然后在命令提示行中,用CD命令进入所在目录,输入命令XMLsign sonnet.XML-spc lacl.spc -v lacl.pvk

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。