QuickStart
Ricompila, poi raggiungi TLS 1.3
La prima scheda è l'aspetto che ha già il tuo progetto esistente. La seconda è l'unica nuova riga che vale la pena aggiungere. La terza dimostra che stai usando sgcIndy e non Indy standard.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL, IdSSLOpenSSLHeaders, StdCtrls;
Il tuo progetto esistente ha già questo aspetto, ed è proprio il punto. Non esiste sgcIdTCPClient né TsgcIdSSLIOHandlerSocketOpenSSL, perché nessuna unit e nessuna classe della libreria porta un prefisso sgc. Installa, ricompila, fatto.
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 ha i membri sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 e sslvAPI_3_0. Né il tipo né la proprietà esistono in Indy standard, il che rende questo frammento una prova in fase di compilazione di quale libreria stai 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;
Stessi componenti, stesse proprietà, stessa pagina della palette. PassThrough := False è ciò che trasforma il socket semplice in uno TLS, esattamente come in Indy standard. Si legge con IdTCPClient1.IOHandler.ReadLn, si scrive con IOHandler.Write, senza modifiche.