Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao validar assinatura com acbr


Ver Solução Respondido por Daniel Simoes,
  • Este tópico foi criado há 1914 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Moderadores
Postado

Realmente pelo ACBr está acusando erro na validação da assinatura:

Erro: Falha na validação da assinatura da nota: 2134
Erro: Falha ao interpretar o XML "xmlParseDoc"

- O método que faz a validação espera o namespace na tag NFe e esse XML não o tem.

function NotaFiscal.VerificarAssinatura: Boolean;
var
  Erro, AXML, DeclaracaoXML: String;
  AssEhValida: Boolean;
begin
  AXML := FXMLAssinado;
  if AXML = '' then
    AXML := XMLOriginal;

  with TACBrNFe(TNotasFiscais(Collection).ACBrNFe) do
  begin

    // Extraindo apenas os dados da NFe (sem nfeProc)
    DeclaracaoXML := ObtemDeclaracaoXML(AXML);
    AXML := DeclaracaoXML + '<NFe xmlns' +  // <<<< namespace esperado 
            RetornarConteudoEntre(AXML, '<NFe xmlns', '</NFe>') +
            '</NFe>';

- Mesmo alterando o código acima forçando a leitura o método de validação acusa erro no digestValue:

Erro: Falha na validação da assinatura da nota: 2134
DigestValue não confere. Conteúdo de "infNFe" foi alterado

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

  • Fundadores
Postado

Realmente o ACBr.ValidarAssinatura, não dá OK, para esse XML...

Mesmo se mudarmos de LibXML2, para MSXML, o validador de XMLs da Microsoft também recusa o DigestValue...

o problema no XML, é que ele possui uma self-closing Tag ( <cBenef> )

Isso é contra as regras da canonicalização c14n, que deve ocorrer antes do XML ser assinado
https://www.w3.org/TR/2001/REC-xml-c14n-20010315

image.png

image.png

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
  Em 19/02/2020 at 16:02, Daniel Simoes disse:

Realmente o ACBr.ValidarAssinatura, não dá OK, para esse XML...

Mesmo se mudarmos de LibXML2, para MSXML, o validador de XMLs da Microsoft também recusa o DigestValue...

o problema no XML, é que ele possui uma self-closing Tag ( <cBenef> )

Isso é contra as regras da canonicalização c14n, que deve ocorrer antes do XML ser assinado
https://www.w3.org/TR/2001/REC-xml-c14n-20010315

image.png

image.png

Expandir  

e não tem como resolver?, pois foi baixada da sefaz e a mesma esta autorizada e com assinatura valida?

  • Fundadores
Postado

é isso que o processo de Canonicalização faz... 

  Citar
  • The document is encoded in UTF-8
  • Line breaks normalized to #xA on input, before parsing
  • Attribute values are normalized, as if by a validating processor
  • Character and parsed entity references are replaced
  • CDATA sections are replaced with their character content
  • The XML declaration and document type declaration (DTD) are removed
  • Empty elements are converted to start-end tag pairs
  • Whitespace outside of the document element and within start and end tags is normalized
  • All whitespace in character content is retained (excluding characters removed during line feed normalization)
  • Attribute value delimiters are set to quotation marks (double quotes)
  • Special characters in attribute values and character content are replaced by character references
  • Superfluous namespace declarations are removed from each element
  • Default attributes are added to each element
  • Lexicographic order is imposed on the namespace declarations and attributes of each element
Expandir  

Mas no seu caso, a assinatura foi feita, sem passar pela Canonicalização

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
  Em 19/02/2020 at 16:40, Daniel Simoes disse:

é isso que o processo de Canonicalização faz... 

Mas no seu caso, a assinatura foi feita, sem passar pela Canonicalização

 

Expandir  

tem como detectar no xml apenas self-closing <cBenef/> pois estes casos eu não valido a assinatura, o grande problema é que a sefaz aceitou a assinatura

  • Fundadores
Postado

É um problema do Site da SEFAZ, pois as regras de Canonicalização, são muito bem definidas...

  Em 19/02/2020 at 16:50, marioprogramador disse:

tem como detectar no xml apenas self-closing <cBenef/> pois estes casos eu não valido a assinatura, o grande problema é que a sefaz aceitou a assinatura

Expandir  

Não entendo o que você está pedindo...

Você quer que o ACBrDFeSSL, ignore essa transformação necessária na canonicalização, para que o seu XML seja validado por ele? (não vejo sentido)

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado
  Em 19/02/2020 at 17:02, Daniel Simoes disse:

É um problema do Site da SEFAZ, pois as regras de Canonicalização, são muito bem definidas...

Não entendo o que você está pedindo...

Você quer que o ACBrDFeSSL, ignore essa transformação necessária na canonicalização, para que o seu XML seja validado por ele? (não vejo sentido)

Expandir  

Eu queria identificar se no XML tem TAG sem fechamento  self-closing <cBenef/>   pois se sim, não teria como validar a assinatura pelo ACBr

  • Moderadores
Postado
  Em 19/02/2020 at 18:27, marioprogramador disse:

Eu queria identificar se no XML tem TAG sem fechamento  self-closing <cBenef/>   pois se sim, não teria como validar a assinatura pelo ACBr

Expandir  

Se entendi, você pode tentar algo assim:

uses ACBrUtil;

[...]

function ContemTagSelfClosing(const AXML: AnsiString): Boolean;
begin
  Result := Pos('/>', RetornarConteudoEntre(AXML, '<infNFe', '/infNFe>', True)) > 0;
end;

[...]

ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName);

if ContemTagSelfClosing(ACBrNFe1.NotasFiscais[0].XML) then
  raise Exception.Create('XML contém tags inválidas');

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
  Em 19/02/2020 at 19:02, BigWings disse:

Se entendi, você pode tentar algo assim:

uses ACBrUtil;

[...]

function ContemTagSelfClosing(const AXML: AnsiString): Boolean;
begin
  Result := Pos('/>', RetornarConteudoEntre(AXML, '<infNFe', '/infNFe>', True)) > 0;
end;

[...]

ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName);

if ContemTagSelfClosing(ACBrNFe1.NotasFiscais[0].XML) then
  raise Exception.Create('XML contém tags inválidas');

 

Expandir  

Ok, funcionou, quando tiver erro de tag eu não valido a assinatura, obrigado.

  • Curtir 1
  • Fundadores
  • Solution
Postado

o XML sem o NameSpace também está fora da especificação do Manual da NFCe...

image.png

Em todo caso... atualize seus fontes... pois subi um ajuste, para permitir a leitura desse XML que está fora da especificação...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Este tópico foi criado há 1914 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.