科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道JavaSE 6基于JSR105的XML签名之实践篇

JavaSE 6基于JSR105的XML签名之实践篇

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我们分析了有关基于JSR-105进行XML签名的基本概念。在本篇中,我们开始分析一个实际的XML签名示例应用程序。

作者:朱先忠编译 来源:天极开发 2007年10月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共6页)

【步骤3】加载invoice.xml并且用一个XMLObject对象把它包装起来。注意,并非所有的签名生成过程都要求这个步骤。XMLObject在JSR-105中对于我们以前简短地讨论过的可选的Object元素进行建模。该Object元素具有下列模式定义:

<element name="Object" type="ds:ObjectType"/>
<complexType name="ObjectType" mixed="true">
 <sequence minOccurs="0" maxOccurs="unbounded">
  <any namespace="##any" processContents="lax"/>
 </sequence>
 <attribute name="Id" type="ID" use="optional"/>
 <attribute name="MimeType" type="string" use="optional"/>
 <attribute name="Encoding" type="anyURI" use="optional"/>
</complexType>

  XMLSignatureFactory提供下列方法来创建一个XMLObject实例:

public abstract XMLObject newXMLObject(List content, String id,String mimeType,String encoding)

  我们使用一个DOMStructure对象来包装invoice.xml的根结点。在JSR-105中定义的DOMStructure可以帮助从原始待签名的XML文档中把结点导入到JSR-105运行时刻。

  我们指定#invoice作为结果对象元素的id。JSR-105实现知道在步骤2中创建的引用对象参考invoice.xml文档,因为这个id把它们链接在一起(在Reference一边,URI属性指向这个id)。

  【步骤4】创建SignedInfo对象。在W3C建议中,SignedInfo元素具有下列模式定义:

<element name="SignedInfo" type="ds:SignedInfoType"/>
<complexType name="SignedInfoType">
 <sequence>
  <element ref="ds:CanonicalizationMethod"/>
  <element ref="ds:SignatureMethod"/>
  <element ref="ds:Reference" maxOccurs="unbounded"/>
 </sequence>
 <attribute name="Id" type="ID" use="optional"/>
</complexType>

  为了创建一个SignedInfo对象,我们需要在〖步骤2〗中创建的Reference;我们还需要两个实例-一个是CanonicalizationMethod的实例,另一个是SignatureMethod的实例。我们建议感兴趣的读者参考一下规范说明书从而对这四种XML规范算法有一个更为精确的了解;在此,我们只是简单地指出,在我们决定选择一个特定的算法-alg后,后面对XMLSignatureFactory的一个实例(即fac)的调用将会创建CanonicalizationMethod的实例:

fac.newCanonicalizationMethod(alg,null)

  我们可以创建一个SignatureMethod实例-通过调用下列在XMLSigantureFactory中定义的操作:

public abstract SignatureMethod newSignatureMethod(String algorithm,
SignatureMethodParameterSpec params) throws NoSuchAlgorithmException,
InvalidAlgorithmParameterException

  在我们的示例中,我们拥有一个DSA类型密钥对;因此,我们需要选择一个基于DSA的算法-例如DSA_SHA1。对于DSA-SHA1,我们可以把params参数设置为null。

  为了创建一个SignedInfo实例,XMLSignatureFactory定义了如下两个工厂方法:

public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm,
SignatureMethod sm, List references);
public abstract SignedInfo newSignedInfo(CanonicalizationMethod cm,
SignatureMethod sm, List references, String id).

  在第二个工厂方法中的第二个参数-id响应于XML签名文档中的SignedInfo元素的Id属性。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章