Ir para conteúdo
  • Cadastre-se

dev botao

PFXDataToCertContextWinApi: Falha ao localizar o Certificado com a Chave Privada


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

Recommended Posts

  • Membros Pro

Bom dia,

Fiz atualização dos fontes agora com wincript, utilizando acesso direto do arquivo PFX, e agora ocorre este erro.

raised exception class EACBrDFeException with message 'PFXDataToCertContextWinApi: Falha ao localizar o Certificado com a Chave Privada.'.

Alguém já conseguiu utilizar dessa forma com os fontes atualizados?

Link para o comentário
Compartilhar em outros sites

Boa tarde,

Estou com o mesmo problema, porém em um certificado A1 (de SP) funcionou corretamente, porém no outro (MT) não funcionou, deu o erro citado nos posts acima.
Alguém ja tem alguma solução ?

Fazendo o debug, eu notei que nesse momento que ele não consegue prosseguir e cai no raise...

ACertContext := Nil;
  PFXCert := Nil;
  PFXCert := CertEnumCertificatesInStore(AStore, PCCERT_CONTEXT(PFXCert)^);
  while (PFXCert <> Nil) and (ACertContext = Nil) do
  begin
    // Se Tem numero de série, então é o certificado do cliente
    if PFXCert^.pCertInfo^.SerialNumber.cbData >= 16 then //ELE NUNCA CAI NESSE IF
      ACertContext := PFXCert
    else
      PFXCert := CertEnumCertificatesInStore(AStore, PCCERT_CONTEXT(PFXCert)^);
  end;

  if (ACertContext = Nil) then
    raise EACBrDFeException.Create(
      'PFXDataToCertContextWinApi: Falha ao localizar o Certificado com a Chave Privada.');


Eu usava a OPENSSL porém mudei para WinCrypt.

Editado por Rodrigo Coradi
Adicionar informação
Link para o comentário
Compartilhar em outros sites

  • Fundadores
19 horas atrás, Paulo Alexandre Hostert disse:

O problema é que depois da liberação da opção Wincrypt, o erro ocorre quando a propriedade SSLLIB = libcapicom.

libCapicom, nunca acessou o certificado por arquivo em disco...  Era necessário instalar o certificado no Windows e usar o número de série...

 

O problema, provavelmente está na verificação de qual é o certificado que contem a chave Privada... atualmente isso é feito de uma maneira 'tosca'... Ele verifica qual dos certificados carregados do PFX, contém um número de série maior ou igual a 16

   // Se Tem numero de série, então é o certificado do cliente
    if PFXCert^.pCertInfo^.SerialNumber.cbData >= 16 then
      ACertContext := PFXCert                            

Qual  é o número de série, desses certificados ?

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

Fiz modificações para que na varredura dos certificados, ele tente obter a chave Privada de cada certificado, a fim de descobrir, qual é o Certificado correto, na cadeia de certificados do PFX

Por favor testem com a Unit em anexo.. Observem se isso causa alguma lentidão no processo de carga do certificado...

ACBrDFeWinCrypt.pas

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

Realmente, em ACBrDFeCapicom.pas, tinha suporte a carga por arquivo PFX... esse código, foi reescrito em ACBrDFeWinCrypt.pas

Não havia suporte a carga do certificado, por Stream "DadosPFX"

 

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

libCapicom, nunca acessou o certificado por arquivo em disco...  Era necessário instalar o certificado no Windows e usar o número de série...

 

O problema, provavelmente está na verificação de qual é o certificado que contem a chave Privada... atualmente isso é feito de uma maneira 'tosca'... Ele verifica qual dos certificados carregados do PFX, contém um número de série maior ou igual a 16


   // Se Tem numero de série, então é o certificado do cliente
    if PFXCert^.pCertInfo^.SerialNumber.cbData >= 16 then
      ACertContext := PFXCert                            

Qual  é o número de série, desses certificados ?

@Daniel Simoes realmente um certificado meu tem mais do que 16 caracteres, porém o outro não tem.

Vou testar essa unit e ver se deu certo.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Infelizmente sua imagem em nada ajuda...

Tente debugar usando o seu certificado...

Não tenho como investigar pois o problema não ocorre aqui 

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

Isso significa que ele não achou nenhum Certificado com chave privada no seu PFX...

Você pode ainda, usar cryOpenSSL ou cryCapicom... 

Ou instalar o PFX no Windows e usar o número de série para carga do certificado 

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

com cryOpenSSL funciona perfeitamente, porem volto a ficar dependente das configurações do Internet Explorer, correto? pois não consigo usar o WinHttp com o OpenSSL...  ou estou fazendo errado?

Gostaria de usar o certificado A1 e ficar livre das configurações do IE, pois tenho tido problemas em alguns clientes que alteram as configs do IE e o com isso meu aplicativo para de funcionar.

Link para o comentário
Compartilhar em outros sites

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