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á 1747 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
22 minutos atrás, 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

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

Postado
10 minutos atrás, marioprogramador disse:

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

tem como verificar se o xml tem self-closing? antes de validar a assinatura

  • 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

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
7 minutos atrás, Daniel Simoes disse:

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

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

 

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...

10 minutos atrás, 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

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
1 hora atrás, 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)

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
32 minutos atrás, 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

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
1 hora atrás, 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');

 

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á 1747 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.