Assinatura difere do calculado
Rejeição 297: Assinatura difere do calculado
SignatureDigestValueSignatureValueO que significa esta rejeição
A SEFAZ recalculou a assinatura digital do XML usando os dados recebidos e o resultado não bateu com o <SignatureValue> enviado. Isso pode acontecer em dois pontos:
- DigestValue inválido: o resumo SHA-1 da
infNFerecebida não bate com o<DigestValue>declarado. - SignatureValue inválido: o resumo bate, mas a cifra RSA dele com a chave pública do certificado não confere.
Em ambos os casos, alguma transformação no XML aconteceu entre assinatura e envio (ou a assinatura foi gerada errado desde o início).
Causas mais comuns
- Modificação do XML após a assinatura (mudança de espaço em branco, troca de encoding, reformatação).
- Canonicalização errada: o leiaute exige
c14n(Canonical XML 1.0), e o software usou outro algoritmo. - Algoritmo de digest declarado como SHA-256 quando o gerador usou SHA-1.
- Caracteres especiais (acentos, ç, ã) processados com encoding diferente (Latin-1 vs UTF-8) entre assinatura e envio.
- Re-serialização do DOM pelo middleware antes da transmissão.
- Cópia do XML assinado de um sistema para outro com alteração silenciosa de quebras de linha.
Regra de validação oficial
A SEFAZ aplica o procedimento descrito na NT 2018.005 e no XML Signature 1.0 (W3C): canonicaliza o infNFe referenciado, calcula SHA-1, compara com <DigestValue>. Depois descriptografa <SignatureValue> com a chave pública do certificado e compara com o digest da <SignedInfo> canonicalizada.
Exemplo XML, antes (errado)
<NFe>
<infNFe versao="4.00" Id="NFe31250612345678000199550010000158421000123456">
<ide>...</ide>
<emit>...</emit>
</infNFe>
<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="#NFe31250612345678000199550010000158421000123456">
<DigestValue>AAAAAAAAAAAAAAAAAAAAAAAAAAA=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>BBBBBBBBBBBBBBBBBBBBBBBBBBBB</SignatureValue>
</Signature>
</NFe>(o digest foi calculado sobre uma versão do XML que foi alterada depois)
Exemplo XML, depois (correto)
<NFe>
<infNFe versao="4.00" Id="NFe31250612345678000199550010000158421000123456">
<ide>...</ide>
<emit>...</emit>
</infNFe>
<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="#NFe31250612345678000199550010000158421000123456">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>QkN+e8d3Yj3ZxR0iN8mF7tYqkLY=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>HvWZ...assinatura_valida...==</SignatureValue>
</Signature>
</NFe>Passo a passo para corrigir
- Garanta que o XML não sofre nenhuma alteração após a assinatura: sem pretty-print, sem mudança de encoding, sem re-serialização.
- Verifique que a canonicalização usada é
http://www.w3.org/TR/2001/REC-xml-c14n-20010315(Canonical XML 1.0). - Confirme que o algoritmo de digest é SHA-1 (declarado como
rsa-sha1no<SignatureMethod>). - Em integração com middleware (Java, .NET, Node), desabilite qualquer "prettify" automático na serialização do XML.
- Reassine e reenvie. Se o erro persistir, gere uma assinatura local e compare byte a byte com a versão enviada para identificar onde está a divergência.
Como o FazendaNota previne
O FazendaNota transmite exatamente o mesmo XML que foi assinado, sem nenhuma alteração entre a assinatura e o envio. A canonicalização segue o padrão exigido (Canonical XML 1.0) e o conteúdo não é reescrito depois de assinado, eliminando a divergência entre o que foi assinado e o que a SEFAZ recalcula.
Rejeições relacionadas
- Rejeição 215, Falha no Schema XML
- Rejeição 280, Certificado Transmissor inválido
- Rejeição 291, Certificado Assinatura difere do Transmissor
Referência oficial
Esta rejeição está descrita no Anexo I - Leiaute e Regra de Validação do Manual de Orientação do Contribuinte (MOC) v7.0 da NF-e, publicado pelo CONFAZ. Texto integral em https://www.confaz.fazenda.gov.br/legislacao/arquivo-manuais/moc7-visao-geral.pdf