# Como assinar o XML em um nó específico (Nota Fiscal)

**URL:** <https://comunidade.opendfe.com.br/t/como-assinar-o-xml-em-um-no-especifico-nota-fiscal/640>\
**Category:** Suporte\
**Tags:** delphi, php, csharp\
**Created:** [Outubro 1, 2021, 6:07am UTC](https://comunidade.opendfe.com.br/t/como-assinar-o-xml-em-um-no-especifico-nota-fiscal/640 "2021-10-01T06:07:50Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![Andre\_Piropo](https://comunidade.opendfe.com.br/user_avatar/comunidade.opendfe.com.br/andre_piropo/32/297_2.png) [@Andre\_Piropo](https://comunidade.opendfe.com.br/u/Andre_Piropo)\
**Post date:** [Outubro 4, 2021, 6:10pm UTC](https://comunidade.opendfe.com.br/t/como-assinar-o-xml-em-um-no-especifico-nota-fiscal/640/5 "2021-10-04T18:10:58Z")

</div>

Obrigado mais uma vez pela resposta, mas eu estou seguindo exatamente essa ordem, mas quando tento validar, ele da erro.  
Se eu assinar apenas uma vez o documento, seja ele onde for, funciona, entretanto quando tento fazer a segunda assinatura que da o erro.  
Eu to fazendo um modelo da nota fiscal, e assina ela no espaço Rps. Depois disso, antes de enviar eu uso a mesma função para assinar, só que agora no campo EnviarLoteRpsEnvio.  
Minha nota fiscal sai igual ao modelo que o funcionário da SEFAZ Salvador me enviou, mas mesmo assim, não consigo nem enviar e nem validar ela na receita federal.  
Vou tentar usar o seu código para ver o que consigo.

Inclusive estou utilizando a mesma biblioteca que você, do robrichards, e não estou reformatando nem nada o xml quando tento assinar ele pela segunda vez.

Estou fazendo assim na função:

```auto

$doc = new DOMDocument();
$doc->load('nota.xml');
$objDSig = new XMLSecurityDSig('');
$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N);
$objDSig->addReference(
    $doc, 
    XMLSecurityDSig::SHA1, 
    ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', 
		'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'],
	['force_uri' => true, 'uri' => 'rpsId23253']	
);
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type'=>'private'));
$objKey->passphrase = '1234';
$objKey->loadKey(dirname( __FILE__ ).'/cert.pem', true);
$objDSig->sign($objKey);
$objDSig->add509Cert(file_get_contents(dirname( __FILE__ ).'/cert2.pem'));
$objDSig->appendSignature($doc->getElementsByTagName('Rps')->item(0));
//$objDSig->appendSignature($doc->documentElement);
$doc->save('notaassinada.xml');

$doc = new DOMDocument();
$doc->load('notaassinada.xml');
$objDSig = new XMLSecurityDSig('');
$objDSig->setCanonicalMethod(XMLSecurityDSig::C14N);
$objDSig->addReference(
    $doc, 
    XMLSecurityDSig::SHA1, 
    ['http://www.w3.org/2000/09/xmldsig#enveloped-signature', 
		'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'],
	['force_uri' => true, 'uri' => 'AGZ001']
);
$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type'=>'private'));
$objKey->passphrase = '1234';
$objKey->loadKey(dirname( __FILE__ ).'/cert.pem', true);
$objDSig->sign($objKey);
$objDSig->add509Cert(file_get_contents(dirname( __FILE__ ).'/cert2.pem'));
$objDSig->appendSignature($doc->getElementsByTagName('EnviarLoteRpsEnvio')->item(0));
//$objDSig->appendSignature($doc->documentElement);
$doc->save('notaassinada.xml');

```

---

_[View the full topic](https://comunidade.opendfe.com.br/t/como-assinar-o-xml-em-um-no-especifico-nota-fiscal/640)._
