Jump to content

dev botao

Assinatura de XML usando TDFeSSL


Go to solution Solved by Daniel Simoes,
  • Este tópico foi criado há 1944 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Posted

Olá pessoal,

Estou tendo muita dificuldade para assinar um xml usando o TDFeSSL, tudo porque a tag que deve ser assinada esta com a identificação dela em minúsculo ou seja id=”COD”, pelos teste que fiz só assinou quando eu coloquei ID=”COD”.

Esta assinatura é para um documento do Comercio Exterior o Certicado de Origem que no caso a entidade definiu a tag em minúsculo como no exemplo abaixo:

Será que há solução ?  🙂

<ns1:CertOrigin>

                <CODEH id="CODEH">

                               <CODExporter>

                                               <COD id="COD">

                               ...

                                               <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

                                              

                                                               <Reference URI="#COD">

                                                              

                                                              

                                               </COD>

                               </CODExporter>

                               <EH>

                                               <EHId></EHId>

...

                                               <EHURL> </EHURL>

                               </EH>

                               <CertificationEH>

                                               <CertificateNo></CertificateNo>

                                               <CertificateDate>2010-06-28T15:38:48.0Z</CertificateDate>

                                               <CertificateID></CertificateID>

                               </CertificationEH>

                </CODEH>

                <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

                                              

                                              

                               <Reference URI="#CODEH">

 

                </Signature>

</ns1:CertOrigin>070004-042207.xml

  • Fundadores
Posted
3 horas atrás, João Alberto Amaral disse:

Olá Rafael,

Segui sua dica mas não tive sucesso, continua o mesmo erro:

image.png.f0d436df247a43e38558e5c8233420df.png

Você está usando libXML2 ?

A msg parece indicar o uso da obsoleta MSXML...

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.

  • Membros Pro
Posted
32 minutos atrás, Daniel Simoes disse:

Você está usando libXML2 ?

A msg parece indicar o uso da obsoleta MSXML...

Estou usando assim:    A.SSLXmlSignLib :=  xsMSxml;

Se coloco no xml assim:  <COD Id="COD"> ele assina, mas ai não passa na validação da entidade que ira recepcionar o xml.

 

image.png.937c3a2b91c467dbb6821c50175ede82.png

 

  • Membros Pro
Posted
Em 28/08/2019 at 18:43, Daniel Simoes disse:

use xsLibXML2...

Segui sua dica mas não deu certo. Esta dando uma violação de endereço. 

O mais estranho é que se troco a tag para Id e uso xsMSxml ele assina.

 

image.png.f37ccdca4b559123217b21f454246336.png

 

  • Membros Pro
Posted
Em 30/08/2019 at 18:03, Daniel Simoes disse:

Pela msg de erro... me parece que você está usando DLLs de 64 bits, para um sistema compilado em 32 bits

Estou compilando 32 bits e usando as DLLs da pasta acbr\DLLs\LibXml2\x86

  • Fundadores
Posted

e quanto as DLLs da OpenSSL ?

  Para 32 bits use: \ACBr\DLLs\OpenSSL\1.0.2.13\x86

Para onde você está copiando as DLLs ?

  O ideal é manter todas elas na mesma pasta do seu executável

 

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.

  • Membros Pro
Posted
17 minutos atrás, Daniel Simoes disse:

e quanto as DLLs da OpenSSL ?

  Para 32 bits use: \ACBr\DLLs\OpenSSL\1.0.2.13\x86

Para onde você está copiando as DLLs ?

  O ideal é manter todas elas na mesma pasta do seu executável

 

Sim, estou com tudo na pasta do executável

  • Membros Pro
Posted
20 horas atrás, Daniel Simoes disse:

Por favor passe um pente fino nas DLLs, se necessário copie-as novamente...

Por favor faça um teste usando o Demo do ACBr, nessa mesma pasta...

 

Cheguei a conclusão que as DLLs estão corretas, porque fazendo teste deixando a tag desta maneira:

<COD Id="COD">, o programa assina com o comando

A.Assinar(XML,'CODExporter', 'COD','','','');

Mas quando executo desta outra maneira:

A.Assinar(XML,'CODExporter', 'COD','','','Id');

O executável reporta o erro de violação de endereço, assim tanto faz passa Id ou id o erro ocorre direto quando informo o identificador.

Estou usando o xsLibXML2.

Mas preciso que a tag  <COD id="COD"> seja assinada  desta maneira pois é a exigência da Entidade Certificadora.

  • Fundadores
Posted

Humm.. ótima pegada... parece ser algum Bug nas rotinas que não previram um parâmetro diferente...podemos tentar reproduzir o erro...

Você poderia anexar um XML que você está tentando assinar ?

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.

  • Fundadores
  • Solution
Posted

Enviei modificações para o SVN... que devem resolver o problema de assinatura do seu XML... em libXML2 ou MSXML

Consegui assinar os dois blocos, usando um código como:

    XMLAss :=  ADFeSSL.Assinar(AXML, 'CODExporter', 'COD','','','','id');
    XMLAss :=  ADFeSSL.Assinar(XMLAss, 'ns1:CertOrigin', 'CODEH','','','','id'); 

 

  • Like 2
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.

  • Membros Pro
Posted
2 horas atrás, Daniel Simoes disse:

Enviei modificações para o SVN... que devem resolver o problema de assinatura do seu XML... em libXML2 ou MSXML

Consegui assinar os dois blocos, usando um código como:


    XMLAss :=  ADFeSSL.Assinar(AXML, 'CODExporter', 'COD','','','','id');
    XMLAss :=  ADFeSSL.Assinar(XMLAss, 'ns1:CertOrigin', 'CODEH','','','','id'); 

 

Perfeito !

Atualizei e já assinei.

Brigadão.

  • Like 2
  • 3 weeks later...
  • Membros Pro
Posted

Bom dia Pessoal,

Me surgiu uma duvida referente o TDFeSSL no Assinar(XML,'CODExporter', 'COD','','','','id');

recebi um arquivo do mesmo tipo assinado por outro sistema porem ele coloca algumas informações que o meu usando o acbr não esta colocando,

segue anexo a imagem com a comparação.

Será que consigo fazer isso usando o TDFeSSL.

Desde já obrigado pela ajuda.

assinaturaCO.jpg

  • Fundadores
Posted

Acho que são opcionais... e me parece uma redundância... e até mesmo disperdício de espaço... pois todas essas informações (Subject Name, chave pública)  estão dentro do certificado, na Tag <X509Certificate>...

No ACBr, você poderia usar o método abaixo.. para carregar o certificado, e obter essas informações...

    function CarregarCertificadoPublico(const DadosX509Base64: Ansistring): Boolean; 

 

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

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...