Ir para conteúdo
  • Cadastre-se

dev botao

Assinatura de XML usando TDFeSSL


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

Recommended Posts

  • Membros Pro

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
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

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

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.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
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

Link para o comentário
Compartilhar em outros sites

  • Fundadores

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

 

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

  • Membros Pro
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.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

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.

Link para o comentário
Compartilhar em outros sites

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

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 ?

070004-042208.xml

Segue o arquivo.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Notei vários problemas na ACBrDFeSSL que a impedem de assinar corretamente esse documento... Estou analisando as correções...

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

Link para o comentário
Compartilhar em outros sites

  • Fundadores
  • Solution

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'); 

 

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

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
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.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Membros Pro

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

Link para o comentário
Compartilhar em outros sites

  • Fundadores

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; 

 

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

Link para o comentário
Compartilhar em outros sites

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