Indy-basierte Serverkomponenten (TsgcWebSocketServer, TsgcWebSocketHTTPServer) können Windows SChannel (Secure Channel) als TLS-Anbieter anstelle von OpenSSL verwenden. SChannel ist die native Windows-TLS- Implementierung, sodass es keine externen DLLs erfordert.
Wenn eine Server-Komponente SSL aktiviert hat und der IOHandler auf iohSChannel gesetzt ist, erstellt der Server eine TsgcIdServerIOHandlerSSLSChannel-Instanz, die alle TLS-Operationen über die Windows-SChannel-API verarbeitet. Für jede eingehende Client-Verbindung führt der Server den TLS-Handshake über den SChannel-Anbieter durch, handelt die Protokollversion und Cipher-Suite aus und bindet das konfigurierte Zertifikat.
SChannel liest Zertifikate aus dem Windows- Zertifikatspeicher oder aus einer PFX- Datei (.pfx / .p12). Es werden keine PEM-Dateien benötigt und es müssen keine OpenSSL-Bibliotheken bereitgestellt werden.
Um SChannel auf einem Indy-Server zu aktivieren, konfigurieren Sie die folgenden Eigenschaften:
1. Setzen Sie die Eigenschaft SSL auf True.
2. Setzen Sie SSLOptions.IOHandler auf iohSChannel.
3. Setzen Sie SSLOptions.Version auf die gewünschte TLS-Version (tls1_2, tls1_3, ...).
4. Setzen Sie SSLOptions.Port auf den für sichere Verbindungen verwendeten Port.
5. Konfigurieren Sie das Zertifikat mit einer der beiden unten beschriebenen Methoden.
Die Untereigenschaft SSLOptions.SChannel_Options stellt die SChannel-spezifischen Einstellungen bereit:
| Eigenschaft | Beschreibung |
| CertHash | Der Thumbprint (hexadezimaler Hash) eines im Windows-Zertifikatspeicher installierten Zertifikats. |
| CertStoreName | Welcher Zertifikatspeicher durchsucht werden soll: scsnMY (Personal), scsnRoot, scsnTrust, scsnCA. |
| CertStorePath | Speicherort: scspStoreLocalMachine oder scspStoreCurrentUser. |
| CipherList | Optionale, durch Doppelpunkt getrennte Liste von Verschlüsselungsalgorithmen (z. B. CALG_AES_256:CALG_AES_128). Leer bedeutet, Systemstandards verwenden. |
| UseLegacyCredentials | Wenn True, wird die Legacy-Struktur SCHANNEL_CRED anstelle von SCH_CREDENTIALS verwendet. Aktivieren Sie dies für ältere Windows-Versionen, die die neuere API nicht unterstützen. |
Zusätzlich werden die allgemeinen SSLOptions- Eigenschaften CertFile und Password verwendet, wenn ein Zertifikat aus einer PFX-Datei geladen wird.
Wenn das Zertifikat bereits im Windows-Zertifikatspeicher installiert ist, geben Sie den Fingerabdruck des Zertifikats an und geben Sie an, wo es sich befindet.
Um den Thumbprint zu finden, öffnen Sie PowerShell und führen Sie aus:
dir cert:\localmachine\my
Die Spalte Thumbprint zeigt den hexadezimalen Hash an, den Sie benötigen.
Directory: Microsoft.PowerShell.Security\Certificate::localmachine\my
Thumbprint Subject
---------- -------
C12A8FC8AE668F866B48F23E753C93D357E9BE10 CN=*.mydomain.com
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.Version := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Port := 443;
oServer.SSLOptions.SChannel_Options.CertHash := 'C12A8FC8AE668F866B48F23E753C93D357E9BE10';
oServer.SSLOptions.SChannel_Options.CertStoreName := scsnMY;
oServer.SSLOptions.SChannel_Options.CertStorePath := scspStoreLocalMachine;
oServer.Active := True;
Wenn Sie eine PFX-(.pfx- oder .p12-)Zertifikatdatei haben, setzen Sie die Eigenschaften CertFile und Password in SSLOptions. SChannel importiert das Zertifikat beim Start.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SSL := True;
oServer.SSLOptions.IOHandler := iohSChannel;
oServer.SSLOptions.Version := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Port := 443;
oServer.SSLOptions.CertFile := 'c:\certificates\server.pfx';
oServer.SSLOptions.Password := 'mypassword';
oServer.Active := True;
Wenn Sie ein PEM-Zertifikat und einen privaten Schlüssel haben, konvertieren Sie sie zuerst mit OpenSSL in das PFX-Format:
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
Verwenden Sie die Eigenschaft SSLOptions.Version, um zu steuern, welche TLS-Version der Server akzeptiert:
| Value | Beschreibung |
| tls1_0 | TLS 1.0 (nicht empfohlen) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2 (empfohlen) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | TLS 1.0, 1.1 und 1.2 akzeptieren |
Standardmäßig verwendet SChannel die System-Cipher-Konfiguration. Sie können die erlaubten Cipher einschränken, indem Sie SChannel_Options.CipherList auf eine durch Doppelpunkte getrennte Liste von Algorithmusnamen setzen, zum Beispiel:
CALG_AES_256:CALG_AES_128
Lassen Sie diese Eigenschaft leer, um die Windows-Standardwerte zu verwenden.
Windows Server 2019 und früher unterstützen möglicherweise nicht die neuere SCH_CREDENTIALS- API. Wenn der Server auf einer älteren Windows-Version nicht startet, setzen Sie SChannel_Options.UseLegacyCredentials auf True, um stattdessen die veraltete SCHANNEL_CRED-Struktur zu verwenden.
Die Komponente erkennt die Windows-Version in den meisten Fällen automatisch, aber Sie können bei Bedarf den Legacy-Modus erzwingen.