Ir para conteúdo
  • Cadastre-se

dev botao

NFE Erro ao Validar usando libWinCrypt


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

Recommended Posts

Bom a Todos

Estou tendo um problema com uso do libWinCrypt  quando assino uma nota e envio pela primeira vez ele faz normal então fecho o sistema  abro novamente e tento assinar retorna o erro 

Minha configuração 

Geral.SSLCryptLib := cryWinCrypt;
Geral.SSLHttpLib := httpWinINet;
Geral.SSLXmlSignLib := xsLibXml2;

[18:19, 26/12/2017] Fernando Moreira: Mensagem
    1    Falha na validação dos dados da nota: 47074

1871 - Element '{http://www.w3.org/2000/09/xmldsig#}KeyInfo': Missing child element(s). Expected is ( {http://www.w3.org/2000/09/xmldsig#}X509Data ).

acho que o problema esta nessa tag

 

<KeyInfo>
        <X509Data>
          <X509Certificate>MIIFtDCCBJygAwIBAg(...)AhA0oDjO/oaDeEC</X509Certificate>
        </X509Data>
</KeyInfo>

 

Obrigado 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Seus fontes estão atualizados ?  Repare em "procedure LibXmlInit; .. existe:

  __xmlSaveNoEmptyTags^ := 1;  

Isso informa a LibXML2, para não gerar Tags "SelfClosed" como a que está no seu XML

		<KeyInfo/>

pois o método "TDFeSSLXmlSignClass.AjustarXMLAssinado", não conseguirá manipular elas...

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.

Link para o comentário
Compartilhar em outros sites

Sim os Fontes estão atualizados 

 

procedure LibXmlInit;
begin
  if (LibXMLLoaded) then
    Exit;

  // --Inicializar funções das units do libxml2
  libxml2.Init;

  { Init libxml and libxslt libraries }
  xmlInitThreads();
  xmlInitParser();
  xmlSubstituteEntitiesDefault(1);
  __xmlLoadExtDtdDefaultValue^ := XML_DETECT_IDS or XML_COMPLETE_ATTRS;
  __xmlIndentTreeOutput^ := 1;
  __xmlSaveNoEmptyTags^ := 1;

  LibXMLLoaded := True;
end;

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Rafael Dias disse:

Correção enviada ao Repositorio.

No Demo funcionou na minha aplicação não vai 

Minha aplicação é Distribuida no Servidor de Aplicação eu mando fazer o LoadStream do Arquivo o Validar quando fecho meu servidor de aplicação e envio a primeira vez ele funciona. etão fecho minha aplicação cliente deixando o servidor aberto reconecto com servidor e envio novamente então vem o erro 

'1871 - Element ''{http://www.w3.org/2000/09/xmldsig#}KeyInfo'': Missing child element(s). Expected is ( {http://www.w3.org/2000/09/xmldsig#}X509Data ).'#$A

 

no procedure NotaFiscal.Validar; 

 NotaEhValida := SSL.Validar(AXML, GerarNomeArqSchema(ALayout, VerServ), Erro); ---Retorna False

66309-env-lot.xml

Link para o comentário
Compartilhar em outros sites

Fiz uma manobra aqui não sei se esta correto

Veja modificação em vermelho

// Inserindo Template da Assinatura digital
  if (not LibXmlEstaAssinado(aXML, SignatureNode, SelectionNamespaces,
    infElement)) then
    aXML := AdicionarSignatureElement(aXML, True, docElement,
      IdSignature, IdAttr);

 

Link para o comentário
Compartilhar em outros sites

Não precisa postar todo o codigo neste tipo caso anexe a unit modificada.

agora sobre a modificação resolve o problema mas não mostra o erro de verdade, pois mesmo com isso gera um xml incorreto, mas na outra função arruma ele.

O problema é descobrir o por que sua libxml não esta obedecendo a configuração.

 

Link para o comentário
Compartilhar em outros sites

Function Assinar 

  if (not LibXmlEstaAssinado(aXML, SignatureNode, SelectionNamespaces,
    infElement)) then
    aXML := AdicionarSignatureElement(aXML, True, docElement,
      IdSignature, IdAttr);

ACBrDFeXsLibXml2.pas

 

Só um detalhe não é só no meu computador, na programação com 6 computadores e em 3 clientes que atualizei 

:(

Editado por Gutierres
Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

Apliquei várias modificações nos fontes... e alguns ajustes que o Rafael Teno me enviou...

Favor testar novamente...

Citar

-- ACBrDFeXsLibXml2 --
[*] Diversos ajustes de String x AnsiString
[*] Limpeza e revisão dos fontes..
[-] Correção de Memory Leak em TDFeSSLXmlSignLibXml2.CanonC14n
[-] Correção no método "VerificarAssinatura", para conferir se houve alterações
    no conteúdo do XML, comparando o "DigestValue"
    (por: DSA)  

 

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.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2326 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.

The popup will be closed in 10 segundos...