仅签署XML的一部分

时间:2017-12-12 04:15:02

标签: java xml apache signature

我只想使用XMLSignature仅签署XML的特定部分? (不使用XMLSignatureFactory)。我们要签名的XML部分有一个与之关联的特殊ID,因此它正在包含签名。

我有以下代码,为什么它在sig.addDocument(.....)上失败了。 错误说无法解析ID为id-83 的元素?我们可以看到ID存在,但XMLSignature找不到它。任何线索?

XMLSignature sig = new XMLSignature(doc,"",XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1);
Transforms transforms = new Transforms(doc);
transforms.addTransform(Transform.TRANSFORM_C14N11_OMIT_COMMENTS);
sig.addDocument("#id-83", transforms, org.apache.xml.security.utils.Constants.ALGO_ID_DIGEST_SHA1);
......

签名前

<soap:Envelope>
    <soap:Header>

    </soap:Header>
    <soap:Body id="id-83">
        <createFruit>
             <Name>Apple</Name>
        </createFruit>
    </soap:Body>
</soap:Envelope>

签名后

<soap:Envelope>
    <soap:Header>
         <ds:Signature>
              <ds:SignedInfo>
                    <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                    </ds:CanonicalizationMethod>
                    <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
                         <ds:Reference URI="#id-83">
                             <ds:Transforms>
                                  <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                             </ds:Transforms>
                             <ds:DigestValue>48743sgsdhd434</ds:DigestValue>
                         </ds:Reference>
              </ds:SignedInfo>
              ....SignatureValue, KeyInfo...
         </ds:Signature>
    </soap:Header>
    <soap:Body id="id-83">
        <createFruit>
             <Name>Apple</Name>
        </createFruit>
    </soap:Body>
</soap:Envelope>

0 个答案:

没有答案