Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

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?

Postado

Bom dia,

estou com o mesmo problema, inclusive no demo, usando como base o post :

Não consigo carregar os dados do certificado usando Wincrypt

Postado (editado)

mudei para libOpenSSL e funcionou.

mas o libwincrptt da dando esse erro.

 

6 minutos atrás, frederico nogueira disse:

mudei para libOpenSSL e funcionou.

mas o libwincrptt da dando esse erro.

 

como devo proceder Daniel Simoes? ?

Editado por frederico nogueira
Postado

Acho que o pessoal confundiu um detalhe aí, quem já usada certificado A1 com OpenSSL não precisa fazer nada.

O Wincrypt foi disponibilizado pra substituir o uso da CAPICOM.dll no acesso a certificados A3.

Favor me corrigirem se eu estiver errado.

Att

Ricardo

Postado (editado)

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

  • Fundadores
Postado

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.

  • Fundadores
Postado

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.

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

  • Fundadores
Postado

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.

Postado

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.

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