不支持Flash

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

http://www.sina.com.cn 2007年01月11日 08:56 天极yesky

  【步骤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属性。

[上一页] [1] [2] [3] [4] [5] [6] [下一页]

本文导航:
·JavaSE 6基于JSR105的XML签名之实践篇
·JavaSE 6基于JSR105的XML签名之实践篇(2)
·JavaSE 6基于JSR105的XML签名之实践篇(3)
·JavaSE 6基于JSR105的XML签名之实践篇(4)
·JavaSE 6基于JSR105的XML签名之实践篇(5)
·JavaSE 6基于JSR105的XML签名之实践篇(6)

发表评论
爱问(iAsk.com)
不支持Flash
 
不支持Flash
不支持Flash