我只想使用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>