Op Indy gebaseerde servercomponenten (TsgcWebSocketServer, TsgcWebSocketHTTPServer) kunnen Windows SChannel (Secure Channel) gebruiken als TLS-provider in plaats van OpenSSL. SChannel is de native Windows TLS-implementatie, dus vereist geen externe DLL's.
Wanneer een servercomponent SSL ingeschakeld heeft en de IOHandler is ingesteld op iohSChannel, maakt de server een instantie van TsgcIdServerIOHandlerSSLSChannel aan die alle TLS-bewerkingen afhandelt via de Windows SChannel API. Voor elke inkomende clientverbinding voert de server de TLS-handshake uit via de SChannel-provider, waarbij de protocolversie, cipher suite worden onderhandeld en het geconfigureerde certificaat wordt gebonden.
SChannel leest certificaten uit de Windows-certificaatopslag of uit een PFX-bestand (.pfx / .p12). Er zijn geen PEM-bestanden nodig en er hoeven geen OpenSSL-bibliotheken te worden geïmplementeerd.
Om SChannel op een Indy-server in te schakelen, configureert u de volgende eigenschappen:
1. Stel de eigenschap SSL in op True.
2. Stel SSLOptions.IOHandler in op iohSChannel.
3. Stel SSLOptions.Version in op de gewenste TLS-versie (tls1_2, tls1_3, ...).
4. Stel SSLOptions.Port in op de poort die wordt gebruikt voor beveiligde verbindingen.
5. Configureer het certificaat met een van de twee hieronder beschreven methoden.
De sub-eigenschap SSLOptions.SChannel_Options stelt de SChannel-specifieke instellingen beschikbaar:
| Eigenschap | Beschrijving |
| CertHash | De vingerafdruk (hexadecimale hash) van een certificaat geïnstalleerd in het Windows-certificaatarchief. |
| CertStoreName | Welk certificaatarchief te doorzoeken: scsnMY (Persoonlijk), scsnRoot, scsnTrust, scsnCA. |
| CertStorePath | Store location: scspStoreLocalMachine or scspStoreCurrentUser. |
| CipherList | Optionele door dubbele punten gescheiden lijst van coderingsalgoritmen (bijv. CALG_AES_256:CALG_AES_128). Leeg betekent systeemstandaardinstellingen gebruiken. |
| UseLegacyCredentials | Wanneer True, wordt de verouderde SCHANNEL_CRED-structuur gebruikt in plaats van SCH_CREDENTIALS. Schakel dit in voor oudere Windows-versies die de nieuwere API niet ondersteunen. |
Daarnaast worden de algemene SSLOptions-eigenschappen CertFile en Password gebruikt bij het laden van een certificaat uit een PFX-bestand.
Als het certificaat al is geïnstalleerd in het Windows-certificaatarchief, geeft u de vingerafdruk van het certificaat op en geeft u aan waar het zich bevindt.
Om de vingerafdruk te vinden, opent u PowerShell en voert u het volgende uit:
dir cert:\localmachine\my
De kolom Thumbprint toont de hexadecimale hash die u nodig heeft.
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;
Als u een PFX-certificaatbestand (.pfx of .p12) heeft, stel dan de eigenschappen CertFile en Password in op SSLOptions. SChannel importeert het certificaat bij het opstarten.
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;
Als u een PEM-certificaat en een privésleutel hebt, converteert u deze eerst naar PFX-indeling met OpenSSL:
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
Gebruik de eigenschap SSLOptions.Version om te bepalen welke TLS-versie de server accepteert:
| Waarde | Beschrijving |
| tls1_0 | TLS 1.0 (niet aanbevolen) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2 (aanbevolen) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | Accepteer TLS 1.0, 1.1 en 1.2 |
Standaard gebruikt SChannel de systeemcipherconfiguratie. U kunt de toegestane ciphers beperken door SChannel_Options.CipherList in te stellen op een door dubbele punten gescheiden lijst van algoritmennamen, bijvoorbeeld:
CALG_AES_256:CALG_AES_128
Laat deze eigenschap leeg om de Windows-standaarden te gebruiken.
Windows Server 2019 en eerder ondersteunen mogelijk niet de nieuwere SCH_CREDENTIALS-API. Als de server niet start op een oudere Windows-versie, stel dan SChannel_Options.UseLegacyCredentials in op True om in plaats daarvan de oudere SCHANNEL_CRED-structuur te gebruiken.
Het component detecteert de Windows-versie automatisch in de meeste gevallen, maar u kunt de verouderde modus forceren als dat nodig is.