QuickStart
Neu bauen, dann TLS 1.3 erreichen
Der erste Tab zeigt, wie dein bestehendes Projekt bereits aussieht. Der zweite ist die eine neue Zeile, die sich lohnt. Der dritte belegt, dass du auf sgcIndy bist und nicht auf dem Standard-Indy.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL,
IdSSLOpenSSL, IdSSLOpenSSLHeaders, StdCtrls;
Dein bestehendes Projekt sieht bereits so aus, und das ist der Punkt. Es gibt kein sgcIdTCPClient und kein TsgcIdSSLIOHandlerSocketOpenSSL, denn keine Unit und keine Klasse der Bibliothek trägt ein sgc-Präfix. Installieren, neu bauen, fertig.
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 hat die Member sslvAPIDefault, sslvAPI_1_0, sslvAPI_1_1 und sslvAPI_3_0. Weder der Typ noch die Eigenschaft existiert im Standard-Indy, was dieses Snippet zu einem Beleg zur Kompilierzeit macht, gegen welche Bibliothek du baust.
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;
Dieselben Komponenten, dieselben Eigenschaften, dieselbe Palettenseite. PassThrough := False verwandelt den einfachen Socket in einen TLS-Socket, genau wie im Standard-Indy. Gelesen wird mit IdTCPClient1.IOHandler.ReadLn, geschrieben mit IOHandler.Write, unverändert.