E1250 - Assinatura difere do calculado

Esse erro indica que o hash assinado no XML não confere com o hash recalculado pelo validador. Isso pode ocorrer quando:

  • O conteúdo do XML foi alterado após a assinatura;

  • O cálculo do campo hash não seguiu exatamente as regras definidas no layout;

  • A assinatura foi feita sobre um conteúdo diferente do esperado (ex.: espaços em branco, ordem de elementos ou caracteres inválidos).

:backhand_index_pointing_right: Como corrigir:

  1. Gere novamente o hash com base no conteúdo exato do XML.

  2. Refaça a assinatura digital sobre esse hash.

  3. Antes de reenviar, valide a assinatura usando o serviço oficial da Receita Federal:
    Validador de Assinaturas da RFB.

Este erro pode estar relacionado a algum caractere especial que está sendo introduzido no corpo do XML. Muitas vezes fica imperceptível porque o mesmo pode estar armazenado no DB e sutilmente é introduzido ao conteúdo. Quando ocorreu comigo existia uma caractere “emoji” em uma das descrições do serviço. Neste caso, é necessário fazer uma normalização das “strings” antes de realizar a assinatura.

2 curtidas

Como o documento gerado deve estar no formato UTF-8, caracteres símbolos e outros deveriam ser convertidos em utf-8 (geram 2 bytes) e assinados.

Neste caso, não deveria gerar erro se o arquivo for convertido em UTF-8 antes da assinatura.

A normalização do documentos e correta conversao evitam dores de cabeça em assinaturas.

A tag de instrução de processamento (processing instruction (PI)) no cabeçalho do XML indica ao parser qual o tipo de codificação de página será gerado o XML. Se gerar um XML manipulando strings e somente colocar no cabeçalho o encoding=“UTF-8”, quando recebido no servidor, será feito o parser e caracteres não convertidos em UTF-8 irão gerar assinaturas diferentes e rejeitar o documento.

O PI serve justamente para orientar o parser da ferramente para carregar o documento corretamente. Caso tenha dúvidas des fluxo, melhor executar uma rotina para remover caracteres por codificação (Enconding), o que evita erros de assinatura.

Caso queira fazer um teste fácil, abra o arquivo no NotePad++ e veja a opção de Codificação para Ansi e UTF-8 para ver os resultados. Converta para HEX editor e note que caracteres como um símbolo ‘º’ ou ‘ª’ em uft-8 são gerados com 2 bytes, mas que visualmente pode não ver isto no editor pois ele facilita esta codificação para você… fica a dica.

Fica a dica do Gilberto para garantir a remoção de caracteres não visíveis/simbolos para evitar dores de cabeça ou cuidar da Codificação corretamente.

Att, Emir

1 curtida