Server SSL | SChannel voor Indy-servers

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.

Hoe het werkt

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.

Configuratie

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.

SChannel_Options eigenschappen

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.

Certificaat uit Windows-opslag

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;

Certificaat uit PFX-bestand

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

TLS-versie

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

Cipherlijst

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.

Verouderde referenties

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.

Voordelen ten opzichte van OpenSSL

Opmerkingen