Fórum Handshake failure IdHTTP - Encapsular certificado digital #595435
11/07/2018
0
Consegui obter resposta do webserve, mas ele está retornando o seguinte erro: 14094410: SSL routines: ssk3_read_bytes:sslv3 alert handshake failure.
Eu preciso encapsular um ceritificado digital junto a requisição e não sei como fazer isso, pelo que pesquisei preciso fazer algo com as propriedades da classe TIdSSLIOHandlerSocketOpenSSL, mas não sei como proceder.
egue o código que estou utilizando:
procedure TForm2.Button2Click(Sender: TObject);
var
str: TStringList;
strResp : TStringStream;
IdHTTP: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
str := TStringList.Create;
strResp := TStringStream.Create('');
IdHTTP := TIdHTTP.Create(nil);
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdHTTP.Request.CustomHeaders.Clear;
IdHTTP.Request.CustomHeaders.AddValue('Role-Type','IMPEXP');
IdHTTP.Post('https://val.portalunico.siscomex.gov.br/portal/api/autenticar',str, strResp);
Memo1.Lines.Text := strResp.ToString;
end;
Eu preciso encapsular um ceritificado digital junto a requisição e não sei como fazer isso, pelo que pesquisei preciso fazer algo com as propriedades da classe TIdSSLIOHandlerSocketOpenSSL, mas não sei como proceder.
egue o código que estou utilizando:
procedure TForm2.Button2Click(Sender: TObject);
var
str: TStringList;
strResp : TStringStream;
IdHTTP: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
str := TStringList.Create;
strResp := TStringStream.Create('');
IdHTTP := TIdHTTP.Create(nil);
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1_2;
IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdHTTP.Request.CustomHeaders.Clear;
IdHTTP.Request.CustomHeaders.AddValue('Role-Type','IMPEXP');
IdHTTP.Post('https://val.portalunico.siscomex.gov.br/portal/api/autenticar',str, strResp);
Memo1.Lines.Text := strResp.ToString;
end;
Marcio Almeida
Curtir tópico
+ 0
Responder
Posts
31/07/2018
Felipe Morais
MCastro,
Qual a versão do seu Indy? Este alerta é genérico e pode ter sido gerado por diversas razões. A primeira delas é que o peer pode estar requisitando TLS 1.1 ou superior e o default do Indy é TLS 1.0. Poderia ser isso(?) Tente alterar property SSLVersions do seu IOHandler e verifique.
A versão 10.5.7 do Indy já está bem defazada, então se o proposto acima não resolver, atualize seu Indy. Não sei qual atualização está agora, mas a partir da versão 10.6.2 do Indy o erro de HandShake SSL3 não acontece mais.
Exemplo para teste:
Espero ter ajudado!
Qual a versão do seu Indy? Este alerta é genérico e pode ter sido gerado por diversas razões. A primeira delas é que o peer pode estar requisitando TLS 1.1 ou superior e o default do Indy é TLS 1.0. Poderia ser isso(?) Tente alterar property SSLVersions do seu IOHandler e verifique.
A versão 10.5.7 do Indy já está bem defazada, então se o proposto acima não resolver, atualize seu Indy. Não sei qual atualização está agora, mas a partir da versão 10.6.2 do Indy o erro de HandShake SSL3 não acontece mais.
Exemplo para teste:
procedure TForm1.Button1Click(Sender: TObject);
var
IdHTTP: TIdHTTP;
URL, Str: string;
SSL: TIdSSLIOHandlerSocketOpenSSL;
begin
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar',str, strResp';
Memo1.Lines.Clear;
IdHTTP := TIdHTTP.Create(nil);
try
IdHttp.HandleRedirects := True;
SSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
try
IdHTTP.IOHandler := SSL;
Str := IdHTTP.Get(URL);
Memo1.Text := Str;
finally
SSL.Free;
end;
finally
IdHTTP.Free;
end;
end;
Espero ter ajudado!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)