Ir para conteúdo
  • Cadastre-se

dev botao

EAD gerando Erro ao ler a Chave


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

Recommended Posts

Olá pessoal!

Estou tentando utilizar o método AssinarArquivoComEAD do ACBrEAD, mas estou recebendo a exception "Erro ao ler a Chave".

Os eventos OnGetChavePrivada e OnGetChavePublica estão devidamente configurados. Porém, o erro só acontece caso eu informe a chave privada no evento OnGetChavePrivada. Se este evento não for informado o componente não gera o erro.

Segue abaixo o local onde gera o erro:


procedure TACBrEAD.LerChave(Chave : AnsiString; Privada: Boolean) ;

var

   A : pEVP_PKEY ;

   BioKey : pBIO ;

begin

   InitOpenSSL ;


 if (sLineBreak <> #10) then

     Chave := StringReplace(Chave, sLineBreak, #10, [rfReplaceAll] );


   LiberarChave ;


   BioKey := BIO_new_mem_buf( PChar(Chave), Length(Chave) + 1 ) ;

   try

      A := nil ;

      if Privada then

         fsKey := PEM_read_bio_PrivateKey( BioKey, {$IFDEF USE_libeay32}A{$ELSE}nil{$ENDIF}, nil, nil)

      else

         fsKey := PEM_read_bio_PUBKEY( BioKey, A, nil, nil) ;

   finally

      LiberarBIO( BioKey );

   end ;


   if fsKey = nil then

      raise Exception.Create('Erro ao ler a Chave');

end ;

Ao carregar a chave privada fsKey fica "nil" e acaba lançando a exception.

Eu compilei o Demo e está com o mesmo pau do meu aplicativo.

Uso Delphi XE.

Alguém tem ideia do que está acontecendo?

Link para o comentário
Compartilhar em outros sites

  • Fundadores

parece ser um problema com a DLL do OpenSSL...

Use a libeay32.dll que está na pasta ACBr\DLLs\OpenSSL

(copie-a para a mesma pasta do seu .EXE)

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

  • 1 mês depois ...
  • Moderadores

Eu fiz uma correção em minha unit pois ocorria o problema

senão me engano passei ou devo ter achado que passei mas não veio nas correções


procedure TACBrEAD.LiberarChave ;

begin

  if fsKey <> Nil then

  begin

     EVP_PKEY_free( fsKey );

     fsKey := nil;

     fsInicializado := false;/// ESSA LINHA ADICIONEI  POIS ELE NÃO ESTAVA DEIXANDO FALSO ELA PARA INICIALIZAR E TENTAVA PEGAR A FUNÇÃO COM O PONTEIRO DA DLL NIL

  end;

end ;

tentei alterar seu codigo e se funcionar ai está a correção.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

A alteração não está correta...

Essa variável indica se o OpenSSL foi inicializado, ou seja, se as DLLs deles já foram carregadas ou não para a memoria (carga dinâmica)

Esse método apenas libera a Chave da memória, e não todo o OpenSSL

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

  • Moderadores

Bom pra mim ocorre o seguinte

faço o uso da assinatura pois está tudo na mesma tela e usa o mesmo componente

ao assinar o primeiro arquivo beleza, quando vou assinar outro ele simplesmente diz que não foi carregado a dll

assim dando o access violation na aplicação

peguei e comecei a fazer o debug dessa parte até cheguei a esse problema.

mas isso no delphi 2010 Daniel

me resolveu o meu problema não dando mais o mesmo.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Você tem o componente ACBrEAD na aplicação ?

Se você não associar um ACBrEAD no ACBrPAF ele criará um internamente... poder ser nesse ponto que esteja o problema...

Como ACBrAAC, ACBrPAF usam o ACBrEAD é melhor deixar ele instanciado na aplicação, caso contrários os componentes PAF e AAC ficarão tentando criar e destruir um componente interno...

  • 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

  • 5 meses depois ...
  • 2 semanas depois ...

Pessoal, eu detecei o problema mas ainda não conseguir resolver. O problema está relacionado ao UniCode do Dlephi, no meu caso, uso o Delphi XE, no demo do ACBrEAD vem assim o evento que ler a chave privada

procedure TForm1.ACBrEAD1GetChavePrivada(var Chave: String);

vc tem que mudar para

procedure TForm1.ACBrEAD1GetChavePrivada(var Chave: AnsiString);

...

Chave := mPrivKey.Lines.Text;

dessa forma funciona, o problema que eu tenho é que eu quero já denifir com minha chave privada, por exemplo

Chave := '-----BEGIN RSA PRIVATE KEY-----'+

'MIICXAIBAAKBgQCyHVM7fzps7D8LtvPNkXkHWGHZKlMVc3GYbJlVQdGt8TXdMSqD'+

'MAyabCUyVZy5NotnorATDCBZxLD4ZK68oRZXLvvPy2w+Ek9NsyeXu/zd9zWh8D5i'+

'6YgRACyvO4CfIGJ//THrSDuB+tGnzwbMGREnlzoD58hgIlTnyRnxtZZHtwIDAQAB'+

'AoGABE1fCE3fbGgccbz+kJWV9c51tpgmH5uFP+hHn96SIQB1i503aKnNdCFumJOm'+

'0HZ30Y4FcMBXO7PbjnRoIBhIANLI0FbEVBskNEjFGHOy7FQVX5erg3uu86//R3em'+

'xyAXjY8ZjUoAd5Q1CcTi5L3AsZFK7Ab4Qa28UqIFFJWUh0ECQQDbq4shWVMXqaYW'+

'exOdSaggqY607xBHhSrkOeqLvY/TJSiLDWtMrPMCN1KKNRZq3NElL/blmMuk3tGY'+

'naMCvRfXAkEAz5JkGwHL2mo8PDp4BjhMzQ3TWJBPCw7OWEZNMCBoRI8Q1MXU9PdC'+

'C79e0on3jplcG5pAc9PxUU/cj/IaMfDTIQJASJndldwL1lo/hlaPGQDrDEB95dbN'+

'LpYYou1xU1YHXuV9DNgWinTuq+DU6ts45ACvLvc3RpLFW2w5IZOX+KO+aQJAXw4v'+

'AZ8k93TG+N3dsRt/MDgwnNIZIHs7S3mGR4/Pr/XEQ2wFRdklSbPtfITp9UeNwqY0'+

'9dYNIKtt2g2IqW4bgQJBAJFK+6WjVBJPUwJwrl7ugpoki+hTSeYjZRjKNjG83u/r'+

'R1FjAcspdWyooY+t8NCRRuZiGN71NmZltFKlHlxbAp4='+

'-----END RSA PRIVATE KEY-----';

Dessa forma da o erro, eu sei que é so uma questão de conversão mas ainda nao tou acertando.

Link para o comentário
Compartilhar em outros sites

  • 6 anos depois...

Boa tarde, estou com um problema semelhante, quando chamo o método  ACBrPAFInterop.INSTANCE.PAF_SaveFileTXT_RegistrosPAF(getHandle(), toUTF8(pArquivo));

Tenho o seguinte retorno "Erro ao ler a Chave", como aparentemente o método é executado pela DLL não consigo identificar o problema, estou utilizando jAcbrFramework em Java.

Pelo o que entendi no jACBrFramework.ead é necessário configurar o par de Chaves para assinatura do arquivo, mas não encontrei o método e nem a documentação de como configurar essas chaves.

Alguém ja teve este problema? 

Link para o comentário
Compartilhar em outros sites

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