Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Estou com um pequeno problema ao realizar o cancelamento de uma NF.

Alguém já teve esse problema e sabe como posso resolver:

Erro: 
EACBrDFeException -  Falha ao assinar o Envio de Evento 
Range check error
Endereço: 00760B65

procedure AddCertContexToStoreMemory(NewCertContext: PCCERT_CONTEXT);
  begin
    // Adicionando o Certificado Atual, na nova Store
    Dummy := Nil;
    if not CertAddCertificateContextToStore( AStore, NewCertContext,
                                             CERT_STORE_ADD_REPLACE_EXISTING,
                                             Dummy ) then
      raise EACBrDFeException.Create(
        'ExportCertStoreToPFXData: Falha Importanto Certificado na Store. Erro: '+GetLastErrorAsHexaStr);
    CertFreeCertificateContext( Dummy );
  end;

begin
  // Criando uma Store em memória, para ser exportada
  AStore := CertOpenStore( CERT_STORE_PROV_MEMORY, 0, 0, 0, Nil );
  if (AStore = Nil) then
    raise EACBrDFeException.Create(
      'ExportCertStoreToPFXData: Falha Criando Store. Erro: '+GetLastErrorAsHexaStr);

  try
    // Adicionando o Certificado Recebido, no Store temporário  //
    AddCertContexToStoreMemory( ACertContext );

    // Verificando se o Certificado Informado, pode ter sua Chave Privada, Exportada //
    PFXBlob.cbData := 0;
    PFXBlob.pbData := Nil;
    dwFlags := (EXPORT_PRIVATE_KEYS or
                REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY or
                PKCS12_INCLUDE_EXTENDED_PROPERTIES);

    if not PFXExportCertStoreEx( AStore, PFXBlob,
                                 LPCWSTR(WideString( APass )),
                                 Nil, dwFlags)  then
   if not (  (wFpDadosCertificado_Tipo = 'tpcA3' )  or   (wFpDadosCertificado_Tipo = 'tpcA1' )
    )  then  //  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    { 2017 } raise EACBrDFeExceptionNoPrivateKey.Create('Certificado não permite Exportar Chave Privada.');

    // Obtendo a cadeia de Certificados ///
    Dummy := Nil;
    pChainContext := Nil;
    ZeroMemory(@ChainPara, SizeOf(ChainPara));
    ChainPara.cbSize := sizeof( CERT_CHAIN_PARA );
    ChainPara.RequestedUsage.dwType                     := USAGE_MATCH_TYPE_AND;
    ChainPara.RequestedUsage.Usage.cUsageIdentifier     := 0;
    ChainPara.RequestedUsage.Usage.rgpszUsageIdentifier := Nil;

    if not CertGetCertificateChain(
            HCCE_CURRENT_USER,  // use the default chain engine
            ACertContext,       // pointer to the end certificate
            AFileTime,          // use the default time
            Nil,                // ACertContext^.hCertStore,
            ChainPara,          // use AND logic and enhanced key usage as indicated in the ChainPara data structure
            0,                  // No Flags
            Dummy,              // currently reserved
            pChainContext) then
      raise EACBrDFeException.Create(
        'ExportCertStoreToPFXData: Falha obtendo a cadeia de Certificados. Erro: '+GetLastErrorAsHexaStr);

Citar

 

O erro ocorre nesse ponto    

// Adicionando todos Certificados da Cadeia, no Store temporário //
    try
      for I := 0 to pChainContext^.rgpChain^.cElement - 1 do
        AddCertContexToStoreMemory( ArrPCERT_CHAIN_ELEMENT(pChainContext^.rgpChain^.rgpElement)^.pCertContext );
    finally
      CertFreeCertificateChain( pChainContext );
    end;

 

    // Adicionando o Certificado Recebido, no Store temporário (na ordem correta)  //
    AddCertContexToStoreMemory( ACertContext );

    // Exportando a Store, com todos os certificados //
    Result := '';
    PFXBlob.cbData := 0;
    PFXBlob.pbData := Nil;
    dwFlags := (EXPORT_PRIVATE_KEYS or
                PKCS12_INCLUDE_EXTENDED_PROPERTIES);

    if not PFXExportCertStoreEx( AStore, PFXBlob,
                                 LPCWSTR(WideString( APass )),
                                 Nil, dwFlags) then
      raise EACBrDFeException.Create(
        'ExportCertStoreToPFXData: Falha em calcular tamanho do buffer. Erro: '+GetLastErrorAsHexaStr);

    PFXBlob.pbData := AllocMem(PFXBlob.cbData);  // Aloca a memória para receber o Blob
    try
      if not PFXExportCertStoreEx( AStore, PFXBlob,
                                   LPCWSTR(WideString( APass )),
                                   Nil, dwFlags) then

        raise EACBrDFeException.Create(
          'ExportCertStoreToPFXData: Falha em "PFXExportCertStoreEx" Erro: '+GetLastErrorAsHexaStr);

      SetLength(Result, PFXBlob.cbData);
      Move(PFXBlob.pbData^, Result[1], PFXBlob.cbData);
    finally
      Freemem(PFXBlob.pbData);
    end;
  finally
    //CertCloseStore(AStore, CERT_CLOSE_STORE_CHECK_FLAG); //Teste Fabio Oliveira - 07/08/2018
  end;
end;

 

Obrigado.

  • Fundadores
Postado
25 minutos atrás, Fabio de Paula Oliveira disse:

Range check error
Endereço: 00760B65

Range Check Error pode ser desabilitado no momento da Compilação

https://stackoverflow.com/questions/11658519/cause-of-range-check-error-delphi

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.

  • Moderadores
Postado
10 minutos atrás, Fabio de Paula Oliveira disse:

Usei {$R-}

E agora o erro é esse:

EACBrDFeException -  Falha ao assinar o Envio de Evento 
Erro -1: Falha ao assinar o Documento
strdup function failed
Endereço: 00760B3D
 

Boa Tarde, 

Tente atualizar as DLLs que estão na pasta ACBr para o diretório da sua aplicação.

Equipe ACBr

Felipe Eduardo Resende Mesquita

Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

 

 

 

Postado
9 minutos atrás, Felipe E. Resende Mesquita disse:

Boa Tarde, Fabio de Paula Oliveira

Tente atualizar as DLLs que estão na pasta ACBr para o diretório da sua aplicação.

Boa tarde, Felipe!

Vou baixar as DLLs e atualizar novamente.

De ante mão o erro ocorre aqui:

function TDFeSSLXmlSignXmlSec.XmlSecSign(const ConteudoXML: String; SignatureNode, SelectionNamespaces, InfElement: String): String;

    { sign the template }
    SignResult := xmlSecDSigCtxSign(FdsigCtx, SignNode);

    if (SignResult < 0) then
    begin
      xmlsecMsg := xmlSecErrorsGetMsg(2);
      raise EACBrDFeException.CreateFmt(cErrDSigSign + sLineBreak + xmlsecMsg,
        [SignResult]);
    end;

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