Handshake failure IdHTTP - Encapsular certificado digital
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
Clique aqui para fazer login e interagir na Comunidade :)