如何使用CXF在SOAP中创建封装签名

时间:2014-03-24 15:24:38

标签: soap jax-ws cxf soap-client ws-security

我有一个规范要求SOAP主体看起来像下面的例子。根据我对JAX-RS的理解(参见this page),这涉及到创建主体的“封装签名”,但我没有找到有关JAX-WS创建的封装签名的文档。

我尝试指定要签名的各个部分会导致额外的xml出现在标题中,但我无法确定如何签署身体的一部分并让签名出现在正文中。另请注意,签名是我给出的示例中bodyComponent的子元素。

<soap:Body xmlns:wsu="http://some.xsd" wsu:Id="id-2">
  <ns2:requestDef xmlns:ns2="http://some-namespace" xmlns="http://another-namespace" xmlns:ns4="http://yet-another-namespace">
    <bodyComponent xmlns = "urn:a:namespace">
      <bodySubComponent>TEST-01</bodySubComponent>
      <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
        <SignedInfo>
          <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          <SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
          <Reference URI="">
            <Transforms>
              <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
            </Transforms>
            <DigestMethodAlgorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
            <DigestValue>+d1GesY2VzMS8wFAYDVQQD=</DigestValue>
          </Reference>
        </SignedInfo>
        <SignatureValue>+s1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD= +d1GesY2VzMS8wFAYDVQQD=</SignatureValue>
        <KeyInfo>
          <X509Data>
            <X509SubjectName>CN=A,OU=B,OU=C, OU=D,O=E,C=F</X509SubjectName> 
            <X509Certificate>+x509Y2VzMS8wFAYDVQQD=</X509Certificate>
          </X509Data>
        </KeyInfo>
      </Signature>
    </bodyComponent>
  </ns2:requestDef>
</soap:Body>

使用WSHandlerConstants.SIGNATURE_PARTS所有值都显示在Header中。我正在尝试通过CXF做什么?

0 个答案:

没有答案