Rejeição 297: Assinatura difere do calculado

Descrição oficial da SEFAZ: Assinatura difere do calculado

O que significa

A SEFAZ recalculou a assinatura digital do XML e o resultado não bateu com o que veio assinado. Na prática: ou o conteúdo mudou depois de assinado, ou o certificado não corresponde a quem está emitindo.

Por que acontece

A causa clássica é alteração do XML após a assinatura — qualquer byte que muda (reformatar, indentar, trocar acento, corrigir um campo na mão) invalida o digest. Também ocorre quando o certificado usado não é do CNPJ do emitente da nota, quando a assinatura foi feita sobre a chave de acesso errada (URI da Reference diferente do Id da infNFe), ou quando a biblioteca canonicaliza o XML de um jeito e transmite de outro.

Como resolver

Não tente consertar a assinatura: gere o XML de novo, do zero, e assine por último — depois disso o arquivo não pode ser tocado. Confira que o certificado é o do CNPJ do emitente (ou de um contador com procuração eletrônica válida) e que está dentro da validade. Se o problema persistir, valide o XML assinado localmente antes de transmitir, comparando o digest calculado com o que está no arquivo.

Como evitar

Assine sempre como última etapa do processo e nunca edite, reindente ou reprocesse o XML depois da assinatura.