| tion) 规定了 XML 数字签名规范的标准 Java 实现接口,于 2005 年 6 月 24 日最终发布。随后,于 2006 年秋季发布的 Java SE 6 (产品代号 Mustang) 将 JSR105 纳入 Java 标准库中,为基于 Java 的上层应用提供标准的 XML 数字签名支持。从此,需要使用 XML 安全特性的 Java 项目有了来自 Java 核心平台的基础支持,再也不需要为选择合适的第三方产品而烦恼。
3. 使用 Java SE 6生成 XML 数字签名并验证
本节使用具体的程序例子介绍如何使用 Java SE 6中的标准 Java 接口生成各种格式的 XML 数字签名并进行验证。所有的程序例子都使用下表中的 XML 文档,其中主要包含有 Simon 和 Peter 二人的信用卡支付记录。
表 3 程序中使用的 XML 文档
1. <?xml version='1.0'?>
2.
3. <SalesData>
4.
5. <PaymentInfo xmlns="http://example.com/payment">
6. <CustomerName>Simon</CustomerName>
7. <Amount>25000</Amount>
8.
9. <CreditCardInfo>
10. <ID>4392 5649 8178 2315</ID>
11. <Issuer>CMB</Issuer>
12. <Expiration>06/2010</Expiration>
13. <Currency>USD</Currency>
14. </CreditCardInfo>
15. </PaymentInfo>
16.
17. <PaymentInfo xmlns="http://example.com/payment"
18. id="PeterPayment">
19. <CustomerName>Peter</CustomerName>
20. <Amount>10000</Amount>
21.
22. <CreditCardInfo>
23. <ID>4392 5649 8178 2318</ID>
24. <Issuer>CMB</Issuer>
25. <Expiration>09/2015</Expiration>
26. <Currency>USD</Currency>
27. </CreditCardInfo>
28. </PaymentInfo>
29.
30. </SalesData>
本节的程序基于 Java SE 6,请读者自行下载安装并配置开发环境。
3.1 生成并验证 Enveloped 格式的 XML 数字签名
Enveloped 格式的签名指签名元素包含于被签名数据中,如表 4 所示:
表 4 Enveloped格式的 XML 数字签名
1. ..............
2. <SignedData>
3. <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
4. ..............
5. </Signature>
6. </SignedData>
7. ..............
3.1.1 生成签名
1. 创建 XMLSignatureFactory 实例
XMLSignatureFactory 是与签名相关的 XML 元素对象的创建工厂。本文在这里创建以DOM 处理机制实现的 XMLSignatureFactory 实例:
2. 创建对整个 XML 文档的引用
这一步创建 <Reference> 元素,引用整个 XML 文档:
1. Transform envelopedTransform =
fac.newTransform(Transform.ENVELOPED, TransformParameterSpec)null);
2. DigestMethod sha1DigMethod = fac.newDigestMethod(DigestMethod.SHA1, null);
3. Reference refToRootDoc = fac.newReference("", sha1DigMethod,
Collections.singletonList(envelopedTransform), null, null);
创建 Reference 的时候将 URI 参数指定为 "" 表示对整个 XML 文档进行引用;摘要算法指定为 SHA1;这里将转换方式指定为 ENVELOPED ,这样在对整个文档进行引用并生成摘要值的时候,<Signature> 元素不会被计算在内。
上一页 [1] [2] [3] [4] [5] 下一页
3. 创建 <SignedInfo> 元素
<Reference> 元素创建好之后,下一步是创建 <SignedInfo> 元素:
1. CanonicalizationMethod c14nWithCommentMethod =
fac.newCanonicalizationMethod(
Canonicaliz上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页
|