QuickStart
Recompila y llega a TLS 1.3
La primera pestaña es el aspecto que ya tiene tu proyecto existente. La segunda es la única línea nueva que merece la pena añadir. La tercera demuestra que estás en sgcIndy y no en Indy estándar.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL, IdSSLOpenSSLHeaders, StdCtrls;
Tu proyecto existente ya tiene este aspecto, y ese es el objetivo. No hay sgcIdTCPClient ni TsgcIdSSLIOHandlerSocketOpenSSL, porque ninguna unit ni clase de la biblioteca lleva un prefijo sgc. Instala, recompila y listo.
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 tiene los miembros sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 y sslvAPI_3_0. Ni el tipo ni la propiedad existen en Indy estándar, lo que hace de este fragmento una prueba en tiempo de compilación de contra qué biblioteca estás compilando.
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;
Mismos componentes, mismas propiedades, misma página de la paleta. PassThrough := False es lo que convierte el socket normal en uno TLS, exactamente igual que en Indy estándar. Leer es IdTCPClient1.IOHandler.ReadLn, escribir es IOHandler.Write, sin cambios.