Ir para conteúdo
  • Cadastre-se

dev botao

Idhttp: Erro ao se conectar com o SSL.


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

Recommended Posts

Pessoal, estou tentando fazer uma requisição post para a api de BOLETOS do banco Itau. Eu consegui pegar a o accessToken utilizando o http, porém na hora de enviar o boleto, recebo a menagem de erro que enviei anexo deste post ("sslv3 alert handshake failure").

Vi em outro post, a recomendação de utilizar o Arat Synapse. Porém fiquei com dúvida de como enviar os certificados.

Aqui está o meu código:

  http := TIdHTTP.Create(nil);
  ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  params := TStringList.Create;
  jObject:= TJsonObject.Create(nil);

//    ssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    ssl.SSLOptions.CertFile := 'caminho\ARQUIVO_CERTIFICADO.crt';
    ssl.SSLOptions.KeyFile := 'caminho\ARQUIVO_CHAVE_PRIVADA.key';
    ssl.SSLOptions.Mode := sslmClient;

//    SSL.SSLOptions.Method := sslvTLSv1;
//    SSL.SSLOptions.Mode := sslmUnassigned;

    http.IOHandler := ssl;
    http.Request.ContentType := 'application/json';


      http.Request.CustomHeaders.AddValue('x-itau-apikey', 'client_key');
      http.Request.CustomHeaders.Add('Authorization:Bearer ' + token);

      response := http.Post(url, payStream);

O código comentado, foram opções que já usei. 

Tentei utilizar também o TRequest.

client    := TRESTClient.Create(nil);
  certFile  := TMemoryStream.Create;
  certFile2 := TMemoryStream.Create;
  try
    client.BaseURL := 'url';
    request := TRESTRequest.Create(nil);
    certFile.LoadFromFile('caminho\ARQUIVO_CERTIFICADO.crt');
    certFile2.LoadFromFile('caminho\ARQUIVO_CHAVE_PRIVADA.key');
   

  try
        request.Client := client;
        request.Method := rmPOST;
        request.AddParameter('x-itau-apikey', 'client_key', pkHTTPHEADER);
        request.AddParameter('Content-Type', 'application/x-www-form-urlencoded', pkHTTPHEADER);
        request.AddParameter('Authorization', 'Bearer ' +token, pkHTTPHEADER);
        request.AddBody(certFile, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
        request.AddBody(certFile2, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
        request.AddBody(payload.text, TRESTContentType.ctAPPLICATION_JSON);

        request.Execute;

        response := request.Response;

Se puderem dar alguma dica do que posso fazer, ficaria muito grato.

image.png

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois ...
Em 09/06/2023 at 13:21, Lucasmed disse:

Pessoal, estou tentando fazer uma requisição post para a api de BOLETOS do banco Itau. Eu consegui pegar a o accessToken utilizando o http, porém na hora de enviar o boleto, recebo a menagem de erro que enviei anexo deste post ("sslv3 alert handshake failure").

Vi em outro post, a recomendação de utilizar o Arat Synapse. Porém fiquei com dúvida de como enviar os certificados.

Aqui está o meu código:

  http := TIdHTTP.Create(nil);
  ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  params := TStringList.Create;
  jObject:= TJsonObject.Create(nil);

//    ssl.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
    ssl.SSLOptions.CertFile := 'caminho\ARQUIVO_CERTIFICADO.crt';
    ssl.SSLOptions.KeyFile := 'caminho\ARQUIVO_CHAVE_PRIVADA.key';
    ssl.SSLOptions.Mode := sslmClient;

//    SSL.SSLOptions.Method := sslvTLSv1;
//    SSL.SSLOptions.Mode := sslmUnassigned;

    http.IOHandler := ssl;
    http.Request.ContentType := 'application/json';


      http.Request.CustomHeaders.AddValue('x-itau-apikey', 'client_key');
      http.Request.CustomHeaders.Add('Authorization:Bearer ' + token);

      response := http.Post(url, payStream);

O código comentado, foram opções que já usei. 

Tentei utilizar também o TRequest.

client    := TRESTClient.Create(nil);
  certFile  := TMemoryStream.Create;
  certFile2 := TMemoryStream.Create;
  try
    client.BaseURL := 'url';
    request := TRESTRequest.Create(nil);
    certFile.LoadFromFile('caminho\ARQUIVO_CERTIFICADO.crt');
    certFile2.LoadFromFile('caminho\ARQUIVO_CHAVE_PRIVADA.key');
   

  try
        request.Client := client;
        request.Method := rmPOST;
        request.AddParameter('x-itau-apikey', 'client_key', pkHTTPHEADER);
        request.AddParameter('Content-Type', 'application/x-www-form-urlencoded', pkHTTPHEADER);
        request.AddParameter('Authorization', 'Bearer ' +token, pkHTTPHEADER);
        request.AddBody(certFile, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
        request.AddBody(certFile2, TRESTContentType.ctAPPLICATION_OCTET_STREAM);
        request.AddBody(payload.text, TRESTContentType.ctAPPLICATION_JSON);

        request.Execute;

        response := request.Response;

Se puderem dar alguma dica do que posso fazer, ficaria muito grato.

image.png

Eu também estou com o mesmo problema, conseguiu corrigir?

Link para o comentário
Compartilhar em outros sites

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