eu to assinando o xml porem meu xml ta sendo assinado errado. Ele assina a tag que eu nao quero que ele assina......
como eu posso mudar?
meu codigo pra assinar/**
* Assina o elemento referente ao documento
* @param element Element
* @param subTag String
* @param attributeID boolean - Informa se ser� gerado a partir do atributo Id
* @throws Exception
*/
private void assinar(Element element, String subTag, boolean attributeID)
throws Exception
{
// Cria um XML-Signature skeleton
XMLSignature signer = new XMLSignature(doc, baseURI, XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1);
element.appendChild(signer.getElement());
Transforms transforms = new Transforms(doc);
// Define as regras de transforma��o e canonicaliza��o do documento
// XML, necess�rio para fazer a verifica��o do parsing e da
// assinatura pelos destinat�rios
transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE); //, xpath.getElementPlusReturns());
//transforms.addTransform(Transforms.TRANSFORM_C14N_OMIT_COMMENTS); //,xpath.getElementPlusReturns());
String strDocument = "";
if (attributeID)
{
strDocument =
((Element) element.getElementsByTagName(subTag).item(0)).getAttributeNode("Id").getNodeValue();
}
else
{
strDocument = ((Element) element.getElementsByTagName(subTag).item(0)).getNodeValue();
}
Constants.setSignatureSpecNSprefix("");
signer.addDocument("#" + strDocument, transforms, Constants.ALGO_ID_DIGEST_SHA1);
// Inclui o certificado de chave publica associado com a chave
// privada, usada para criar a assinatura digital
KeyStore ks = KeyStore.getInstance(keyStoreType);
FileInputStream fis = new FileInputStream(keyStore);
ks.load(fis, keyStorePass.toCharArray());
PrivateKey privateKey;
X509Certificate cert;
if ("jks".equalsIgnoreCase(keyStoreType))
{
privateKey = (PrivateKey) ks.getKey(keyAlias, keyStorePass.toCharArray());
cert = (X509Certificate) ks.getCertificate(keyAlias);
}
else
{
String alias = (String) ks.aliases().nextElement();
privateKey = (PrivateKey) ks.getKey(alias, keyStorePass.toCharArray());
cert = (X509Certificate) ks.getCertificate(alias);
}
signer.addKeyInfo(cert);
signer.sign(privateKey);
}
sendo que o primeiro argumento eu to passando a tag principal.....e no segundo, a tag que eu quero que seja assinada....
mas ele ta assinando a principal
alguem sabe como mudar?