Ir para conteúdo
  • Cadastre-se

dev botao

Erro: Falha ao ler a chave privada de DadosPFX


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

Recommended Posts

Problema: Estou tentando enviar um lote de NFSe e aparece uma mensagem de erro

Configuração:

- Windows x64

- acbr trunk 2

- certificado A1

 

O formato padrão vem com a seguinte configuração:

ACBrNFse1.Configuracoes.Geral.SSLLib := libWinCrypt;
ACBrNFse1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt;
ACBrNFse1.Configuracoes.Geral.SSLHttpLib := httpWinHttp;
ACBrNFse1.Configuracoes.Geral.SSLXmlSignLib := xsLibXml2;

Porém, é mostrada a seguinte mensagem de erro: "Falha em obter o provedor de criptografia"

 

Pois bem, alterando para xsXmlSec:

ACBrNFse1.Configuracoes.Geral.SSLLib := libWinCrypt;
ACBrNFse1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt;
ACBrNFse1.Configuracoes.Geral.SSLHttpLib := httpWinHttp;
ACBrNFse1.Configuracoes.Geral.SSLXmlSignLib := xsXmlSec;

É mostrada a seguinte mensagem de erro: "Erro: Falha ao ler a Chave Privada de DadosPFX"

 

Afinal, qual é a configuração que devo utilizar ou como eu faço para corrigir este problema?

Agradeço desde já!

 

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Fernando,

Você esta com todos os fontes atualizados?

Pois me parece que houve uma correção visando resolver um problema com o xsLibXml2.

 

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Bom dia Italo, 

Foi atualizado já e o erro ainda persiste. Debugando verifiquei que antes desta mensagem aparece um erro quando procuramos pelo nó de assinatura...

  if (SignNode = nil) then
    raise EACBrDFeException.Create(cErrFindSignNode);

A mensagem "Erro: Falha ao localizar o nó de Assinatura", mas o programa continua rodando...

Assim, eu estou tentando enviar uma nota de dois clientes que usam certificados de tipos diferentes, um é A1 e outro é A3. E os dois geram o mesmo problema acima de falha ao localizar o nó de assinatura, porém eles geram problemas distintos posteriormente

Problema usando certificado A1:

Na procedure TDFeSSLXmlSignXmlSec.CreateCtx da unit ACBrDFeXsXmlSec, o sistema gera uma exception dizendo "Erro: Falha ao ler a Chave Privada de DadosPFX" porque o FdsigCtx^.signKey está como null. Veja o trecho que gera esta 

        FdsigCtx^.signKey := xmlSecCryptoAppKeyLoadMemory(MS.Memory, MS.Size,
          xmlSecKeyDataFormatPkcs12, PAnsiChar(Senha), nil, nil);

        if (FdsigCtx^.signKey = nil) then
          raise EACBrDFeException.Create(cErrPrivKeyLoad);

O que dá pra ser feito?

Problema usando certificado A3:

Na procedure TDFeSSLXmlSignXmlSec.CreateCtx da unit ACBrDFeXsXmlSec, o sistema gera uma exception dizendo "Certificado não permite Exportar Chave Privada" ao tentar invocar função ExportCertContextToPFXData(FpCertContext, FpDFeSSL.Senha).

    procedure TDFeSSLXmlSignXmlSec.CreateCtx;

    if UsarDadosPFX then
    begin
      PfxData := FpDFeSSL.SSLCryptClass.CertPFXData;

 

function TDFeWinCrypt.GetCertPFXData: AnsiString;
begin
  if FpPFXData = '' then
  begin
    CarregarCertificadoSeNecessario;
    if (FpDFeSSL.DadosPFX = '') then
      FpPFXData := ExportCertContextToPFXData(FpCertContext, FpDFeSSL.Senha)
    else
      FpPFXData := FpDFeSSL.DadosPFX;
  end;

  //DEBUG
  //WriteToFile('c:\temp\CertACBr.pfx', FpPFXData );
  Result := FpPFXData;
end;

A configuração de criptografia que estou usando atualmente é a seguinte:

    ACBrNFse1.Configuracoes.Geral.SSLLib := libWinCrypt;
    ACBrNFse1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt;
    ACBrNFse1.Configuracoes.Geral.SSLHttpLib := httpWinHttp;
    ACBrNFse1.Configuracoes.Geral.SSLXmlSignLib := xsXmlSec;

Enfim, qualquer luz que o senhor puder dar será muito bem vinda.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Fernando,

Seta a propriedade SSLLib com o valor libWinCrypt mas não altera o valor da propriedade SSLXmlSignLib, deixa ela com o valor padrão.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Citar

O formato padrão vem com a seguinte configuração:


ACBrNFse1.Configuracoes.Geral.SSLLib := libWinCrypt;
ACBrNFse1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt;
ACBrNFse1.Configuracoes.Geral.SSLHttpLib := httpWinHttp;
ACBrNFse1.Configuracoes.Geral.SSLXmlSignLib := xsLibXml2;

Porém, é mostrada a seguinte mensagem de erro: "Falha em obter o provedor de criptografia"

Obrigado pela resposta. Como já havia mencionado, eu deixei apenas ACBrNFse1.Configuracoes.Geral.SSLLib := libWinCrypt; e tive a mesma mensagem de erro, dizendo que houve falha em obter o provedor de criptografia, usando certificado A1.

Já me falaram pra utilizar uma máquina XP para importar e exportar o certificado e instalar novamente no Windows 8, mas não cheguei a este ponto. Nem sei se vai de fato funcionar.

Já no A3 não tive esse problema, mas ocorreu uma mensagem de erro ao tentar enviar a NFSe dizendo,

Erro Interno: 0

Erro HTTP: 500

 

Link para o comentário
Compartilhar em outros sites

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