Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao ajustar INTERNET_OPTION_CLIENT_CERT_CONTEXT: 12046


Ver Solução Respondido por Italo Giurizzato Junior,
  • Este tópico foi criado há 2143 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde,

Em  outro post teve um usuário que havia postado uma solução para este problema além de uma DLLs em  C#, porém o post se encaminhou para uma discussão (no bom sentido)  sobre as DLLs em C# e foi "ignorado" a correção feita para o componente já existente, eu até fiz uma pergunta se a correção tinha sido aceita mas não obtive resposta.

O Post:

Minha pergunta:

Hoje pesquisando um pouco sobre o fonte para entender melhor o GNRe acabei lembrando desse detalhe e como tinha um pouco mais de tempo resolvi debugar para ver aonde o erro ocorria e vi que o mesmo ocorre na ACBrDFeCapicomDelphiSoap no evento before post e é um erro "forçado" (pois parte de uma validação que gera um exception).

Notei que o amigo do post que citei fazia uma alteração nessa unit assim:

    // MESTRE SISTEMAS
    if SetCertContext and not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
      PCertContext, SizeOf(CERT_CONTEXT)) then
      raise EACBrDFeException.Create('Erro ao ajustar INTERNET_OPTION_CLIENT_CERT_CONTEXT: ' +
                                     IntToStr(GetLastError));
    // MESTRE SISTEMAS


Joguei as informações e units que foram liberados no post anterior no lugar do que eu tinha aqui para testar, mas não consegui chegar até o ponto que força esse exception.

Algum dos moderadores poderia me dizer se essas alterações foram analisadas? O que foi sugerido pode ser aproveitado?

 

Att, Marcos

Marcos Gerene

[email protected]

Postado
2 horas atrás, Marcos Gerene disse:

Boa tarde,

Em  outro post teve um usuário que havia postado uma solução para este problema além de uma DLLs em  C#, porém o post se encaminhou para uma discussão (no bom sentido)  sobre as DLLs em C# e foi "ignorado" a correção feita para o componente já existente, eu até fiz uma pergunta se a correção tinha sido aceita mas não obtive resposta.

O Post:

Minha pergunta:

Hoje pesquisando um pouco sobre o fonte para entender melhor o GNRe acabei lembrando desse detalhe e como tinha um pouco mais de tempo resolvi debugar para ver aonde o erro ocorria e vi que o mesmo ocorre na ACBrDFeCapicomDelphiSoap no evento before post e é um erro "forçado" (pois parte de uma validação que gera um exception).

Notei que o amigo do post que citei fazia uma alteração nessa unit assim:


    // MESTRE SISTEMAS
    if SetCertContext and not InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT,
      PCertContext, SizeOf(CERT_CONTEXT)) then
      raise EACBrDFeException.Create('Erro ao ajustar INTERNET_OPTION_CLIENT_CERT_CONTEXT: ' +
                                     IntToStr(GetLastError));
    // MESTRE SISTEMAS


Joguei as informações e units que foram liberados no post anterior no lugar do que eu tinha aqui para testar, mas não consegui chegar até o ponto que força esse exception.

Algum dos moderadores poderia me dizer se essas alterações foram analisadas? O que foi sugerido pode ser aproveitado?

 

Att, Marcos

Essa alteração é simples, existe alguns webservices que necessitam setar o certificado e outros não. Foi criado a propriedade SetCertContext (Padrão True) para controlar isso. Lembrando que só implementei essa propriedade para funcionar com a libCapicomDelphiSoap (Envio pelo Indy), com a libCapicom é usado a classe TACBrHTTPReqResp para o envio, nessa classe existe a propriedade UseCertificate, que tem a mesma função da propriedade que eu criei, mas que não está sendo usada pelo o que eu vi nos fontes.

Na NFSe (TNFSeWebService) eu sobrescrevo o método EnviarDados para setar essa propriedade conforme o provedor em uso, pois alguns precisam dela ativa e outros não.

Eu criei essa propriedade na classe TDFeSSLClass pois ela deve ser usada em todas as formas de envio (Exceto com OpenSSL, que deve controlar isso internamente de uma forma diferente)

Postado

Bom dia amigos, atualizei o ACBR ontem e ainda continua dando INTERNET_OPTION_CLIENT_CERT_CONTEXT, tem alguma propriedade nova para não cair neste erro?, Estou ajustando para o SIMPLISS.

 

Atenciosamente.

Adriano Teodorico dos Santos

Analista de Sistemas na Empresa GIGa Informática Dracena Ltda ME

Bach. em Ciência da Computação

Pós Graduado em Gestão Fiscal e Planejamento Tributário

  • Membros Pro
Postado
Em 18/12/2015 at 15:07, AecioSf disse:

Renemelo vc ja usava e começou a acontecer ? No meu caso estou iniciando a nfse agora, entao e um erro novo esse INTERNET_OPTION_CLIENT_CERT_CONTEXT: 12046 ???

 

Bom dia.

Na verdade, eu estava a bastante tempo sem atualizar os componentes. e na versao antiga, nao tinha esse problema.

Foi depois que atualizei que comecou a dar esse problema.

Rene Melo

Postado

Acredito que já tenham percebido mas caso não, o erro em questão só aparece em homologação, qdo eu tento em produção pelo menos o erro não acontece. Não posso falar mais daqui pra frente, pq essa e a minha primeira implementação de nfse, então vou ter que fazer em produção mesmo, seja o que deus quiser.

  • Membros Pro
Postado

Bom dia, alguém conseguiu uma solução para isso? Também estou com atualização de sistema parada por conta desse erro. 

Eu acho que a solução seria colocar aquele IF dos provedores que está na imagem que o Daniel Caus mandou. Mas não consegui uma forma de dentro

da procedure TDFeCapicomDelphiSoap.OnBeforePost() saber se o componente que chamou foi um TACBrNFe ou TACBrNFSe. Se tiver como buscar 

esse componente, poderíamos criar o IF dos provedores novamente e sanar o problema.

Talvez o Juliomar (moderador) possa nos dar uma luz de como poderíamos fazer isso.

Abraços,

Leandro

 

Postado

Amigo leomcl pelo menos pra mim aqui, o erro so acontece no ambiente de homologacao no de produção ele não acontece ( então eu passei a usar o de producão pra continuar minha implementação ). Mas tive que para denovo pq o provedor pede assinatura tanto no lote quanto no rps e o componente ainda nao faz isso.

E tenso testar as coisas em produção, mas por hora e uma alternativa. 

 

  • Moderadores
Postado
10 horas atrás, AecioSf disse:

Amigo leomcl pelo menos pra mim aqui, o erro so acontece no ambiente de homologacao no de produção ele não acontece ( então eu passei a usar o de producão pra continuar minha implementação ). Mas tive que para denovo pq o provedor pede assinatura tanto no lote quanto no rps e o componente ainda nao faz isso.

E tenso testar as coisas em produção, mas por hora e uma alternativa. 

 

O Italo enviou alterações para isso está semana se não me engano, você está atualizado?

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
  • Membros Pro
Postado

Oi Regys,

Atualizei um dia antes do natal. Quando clico com botão direito na pasta do acbr aqui na minha máquina, vou em TortoiseSVN->Check for modifications, só aparece

alguns arquivos de exemplos do SAT. Essa é a forma correta de saber o que foi mudado antes de atualizar a pasta local? É que estou implementando um novo

provedor de NFSe (EReceita), e ainda não terminei, se atualizar tudo pode sobrescrever o que já alterei. 

Amigos que estão seguindo esse tópico, alguém atualizou essa semana o seu componente? O erro parou?

Desde já agradeço,

Leandro

Postado

Bom dia, 

na ultima revisão não tive o problema, porem está dando o erro 

A string literal was expected, but no opening quote character was found

é disparado nessa linha do ACBrDFeCapicom.pas

      xmldoc.setProperty('SelectionNamespaces', SelectionNamespaces);

Meu provedor é o Fiorilli 

  • Membros Pro
Postado

Olá, atualizei o meu ontem mas o erro continua. Foi criada alguma propriedade para dizer se é pra usar ou não o INTERNET_OPTION_CERT_CONTEXT?

Não achei nada do tipo dando uma olhada no código.

Obrigado,

Leandro

  • Membros Pro
Postado

Pessoal, acho que achei o problema. No ACBrDFeCapicomDelphiSoap.pas, na procedure:

TDFeCapicomDelphiSoap.OnBeforePost(...)

Faltou um 

if (UseCertificate) then 

antes da linha que usa o  INTERNET_OPTION_CERT_CONTEXT

Esse if já existe no TACBrHTTPReqResp.Execute(), mas não no evento OnBeforePost que falei acima.

Estou terminando a implementação de um novo provedor, e logo mandarei as units com tudo que alterei.

Obrigado,

Leandro

 

Postado
3 horas atrás, leomcl disse:

Pessoal, acho que achei o problema. No ACBrDFeCapicomDelphiSoap.pas, na procedure:

TDFeCapicomDelphiSoap.OnBeforePost(...)

Faltou um 

if (UseCertificate) then 

antes da linha que usa o  INTERNET_OPTION_CERT_CONTEXT

Esse if já existe no TACBrHTTPReqResp.Execute(), mas não no evento OnBeforePost que falei acima.

Estou terminando a implementação de um novo provedor, e logo mandarei as units com tudo que alterei.

Obrigado,

Leandro

 

Também estou com esse problema... encontrou a Solução?

Em 05/01/2016 at 08:45, Adonias disse:

Bom dia, 

na ultima revisão não tive o problema, porem está dando o erro 

A string literal was expected, but no opening quote character was found

é disparado nessa linha do ACBrDFeCapicom.pas

      xmldoc.setProperty('SelectionNamespaces', SelectionNamespaces);

Meu provedor é o Fiorilli 

Continuo com esse problema, to com tudo atualizado em 07/01/2016.... :-(

Conseguiu algo?

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