QuickStart
Recompile e depois alcance o TLS 1.3
A primeira aba é como o seu projeto existente já se parece. A segunda é a linha nova que vale adicionar. A terceira prova que você está no sgcIndy e não no Indy padrão.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL, IdSSLOpenSSLHeaders, StdCtrls;
Seu projeto existente já se parece com isto, e esse é o ponto. Não há sgcIdTCPClient nem TsgcIdSSLIOHandlerSocketOpenSSL, porque nenhuma unit e nenhuma classe da biblioteca tem prefixo sgc. Instale, recompile, pronto.
procedure TFRMHttpClient.btnGoToClick(Sender: TObject);
var
oStream: TStringStream;
begin
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;
oStream := TStringStream.Create('');
try
IdHTTP1.Get(txtURL.Text, oStream);
finally
FreeAndNil(oStream);
end;
end;
TIdSSLAPIVersion tem os membros sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 e sslvAPI_3_0. Nem o tipo nem a propriedade existem no Indy padrão, o que faz deste trecho uma prova em tempo de compilação de qual biblioteca você está usando.
procedure TfrmTCPClient.btnConnectClick(Sender: TObject);
begin
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.APIVersion := sslvAPI_3_0;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1_3;
IdTCPClient1.Host := txtHost.Text;
IdTCPClient1.Port := StrToInt(txtPort.Text);
IdSSLIOHandlerSocketOpenSSL1.PassThrough := False;
IdTCPClient1.Connect;
end;
procedure TfrmTCPClient.btnDisconnectClick(Sender: TObject);
begin
IdTCPClient1.Disconnect;
end;
Mesmos componentes, mesmas propriedades, mesma página da paleta. PassThrough := False é o que transforma o socket simples em um socket TLS, exatamente como no Indy padrão. A leitura é IdTCPClient1.IOHandler.ReadLn e a escrita é IOHandler.Write, sem alterações.