Bom dia pessoal,
estou com um problema e gostaria de ajuda…
estou assinando meu xml e está acontecendo uma coisa estranha. Eu passo o arquivo xml para ele assinar e quando ele me devolve, ta aparecendo apenas os valores. Ou seja…eu esse xml
</outrastags><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"><XPath></XPath></Transform><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"><XPath></XPath></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue></DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo><X509Data><X509Certificate></X509Certificate></X509Data></KeyInfo></Signature>
E quando ele assina, ao invés dele colocar o conteudo dentro das tags, to recebendo apenas o valor…
ficando assim o xml
[code]
MIIFkjCCBHqgAwIBAgIQTO0/OTyKBzXN+2eeKzcoLDANBgkqhkiG9w0BAQUFADB0MQswCQYDVQQG
EwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDEtMCsGA1UECxMkQ2VydGlzaWduIENlcnRpZmljYWRv
cmEgRGlnaXRhbCBTLkEuMSEwHwYDVQQDExhBQyBDZXJ0aVNpZ24gTXVsdGlwbGEgVjMwHhcNMDgw
MjE4MDAwMDAwWhcNMDkwMjE3MjM1OTU5WjCCAQMxCzAJBgNVBAYTAkJSMRMwEQYDVQQKFApJQ1At
QnJhc2lsMSMwIQYDVQQLFBpBdXRlbnRpY2FkbyBwb3IgQVIgTmV0IFVubzEbMBkGA1UECxQSQXNz
aW5hdHVyYSBUaXBvIEExMRQwEgYDVQQLFAsoZW0gYnJhbmNvKTEUMBIGA1UECxQLKGVtIGJyYW5j
bykxFDASBgNVBAsUCyhlbSBicmFuY28pMTcwNQYDVQQDEy5TZWNyZXRhcmlhIGRlIEVzdGFkbyBk
ZSBGYXplbmRhIGRlIE1hdG8gR3Jvc3NvMSIwIAYJKoZIhvcNAQkBFhNuZmVAc2VmYXoubXQuZ292
LmJyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDs6EV+EvqtKEWtquwMJZ8rUj6M7+3hRE2P
VA2Y/opmgs4holSSKaXy5ZsBm9GnbYigZ2BEOYqJFmoglBgDdujpunLA5ml3pLSqSyo1CyRx9kZu
noU8EKULLwKWYKQo8//p2ANPzlyZgJgExnxC8rob6bS+LtDY8Cd2eend+YzlcQIDAQABo4ICETCC
Ag0wgbUGA1UdEQSBrTCBqqA8BgVgTAEDBKAzBDEwNjA5MTk3ODg1NjczMDA1MTcyMDAwMDAwMDAw
MDAwMDAwMDAwMTIyNzYzMzJTSk1UoCEGBWBMAQMCoBgEFlJpY2FyZG8gZGUgTHVjY2EgQ3J1ZG+g
GQYFYEwBAwOgEAQOMDM1MDc0MTUwMDA1NzigFwYFYEwBAwegDgQMMDAwMDAwMDAwMDAwgRNuZmVA
c2VmYXoubXQuZ292LmJyMAkGA1UdEwQCMAAwZwYDVR0fBGAwXjBcoFqgWIZWaHR0cDovL2ljcC1i
cmFzaWwuY2VydGlzaWduLmNvbS5ici9yZXBvc2l0b3Jpby9sY3IvQUNDZXJ0aVNpZ25NdWx0aXBs
YVYzL0xhdGVzdENSTC5jcmwwHwYDVR0jBBgwFoAUFKVaa/7kXjJkt2uA3dRjTnjht34wDgYDVR0P
AQH/BAQDAgXgMFUGA1UdIAROMEwwSgYGYEwBAgELMEAwPgYIKwYBBQUHAgEWMmh0dHA6Ly9pY3At
YnJhc2lsLmNlcnRpc2lnbi5jb20uYnIvcmVwb3NpdG9yaW8vZHBjMDgGCCsGAQUFBwEBBCwwKjAo
BggrBgEFBQcwAYYcaHR0cDovL29jc3AuY2VydGlzaWduLmNvbS5icjAdBgNVHSUEFjAUBggrBgEF
BQcDBAYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADggEBAGEAVtAjCsu5tQ3Krj9mf0svvuxP3V3j
r2NXrJAChRk7GYo6JUvWy7MCcDOdNeXRrb9zSXXhZR9gtRgP0Om2llmPNiC0TTJFoci+wvciLo9l
g/RT1PBxgVV6t7g7UkJuJLAALRr2S854yGGic2zp/Ea7jsC37O6ibjGOEqvEpgcq/vnWYv2n6bdo
AXtemj5oAxKkNjUAcnHt9IbmvLoIVNwoqSAecPd6NH6yLxqnTQN0+xE5GuJ9QHFtKS+bXOeru77d
IJy00BoVZ7RpgUeGsXZ2n2Jau1xtJUrZOmon4PMGHxvQOyEMWsxF8kKVTWiJYmWiTiGT0kekzb1k
/7sgcFE=[/code]
Meu codigo ta assim:
File xml = new File("arquivo.xml");
Document doc = null;
doc = DOMUtil.parse(xml);
AssinaturaXML assinaturaXML = new AssinaturaXML(doc, keyStoreCliente, keyStoreType, null, keyStorePass);
retorno = assinaturaXML.assinar(tagPrincipal, tagSecundaria, true);
Construtor da classe AssinaturaXML
public AssinaturaXML(Document doc, String keyStore, String keyStoreType,
String keyAlias, String keyStorePass)
{
if (doc == null)
{
throw new IllegalArgumentException("Parametro doc null");
}
this.doc = doc;
this.keyStore = keyStore;
this.keyStoreType = keyStoreType;
this.keyStorePass = keyStorePass;
this.keyAlias = keyAlias;
}
Metodo que assina da classe AssinaturaXML
**
* Recebe um documento e o retorna assinado
* @param doc Document
* @param tag String
* @param subTag String
* @throws Exception
*/
public Document assinar(String tag, String subTag, boolean attributeID) throws Exception {
NodeList tagNodeList = doc.getElementsByTagName(tag);
for (int i = 0; i < tagNodeList.getLength(); i++)
{
this.assinar((Element) tagNodeList.item(i), subTag, attributeID);
}
return doc;
}
/**
* Assina o elemento referente ao documento
* @param doc Document
* @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);
}
é o retorno que está tendo problema e devolvendo apenas os valores…e não o XML preenchido.