I componenti server basati su Indy (TsgcWebSocketServer, TsgcWebSocketHTTPServer) possono utilizzare Windows SChannel (Secure Channel) come provider TLS invece di OpenSSL. SChannel è l'implementazione TLS nativa di Windows, quindi non richiede alcuna DLL esterna.
Quando un componente server ha SSL abilitato e l'IOHandler è impostato su iohSChannel, il server crea un'istanza di TsgcIdServerIOHandlerSSLSChannel che gestisce tutte le operazioni TLS tramite l'API Windows SChannel. Per ogni connessione client in entrata, il server esegue l'handshake TLS tramite il provider SChannel, negoziando la versione del protocollo, la suite di cifratura e associando il certificato configurato.
SChannel legge i certificati dal Windows Certificate Store o da un file PFX (.pfx / .p12). Non sono necessari file PEM e non è necessario distribuire librerie OpenSSL.
Per abilitare SChannel su un server Indy, configuri le seguenti proprietà:
1. Impostare la proprietà SSL su True.
2. Impostare SSLOptions.IOHandler su iohSChannel.
3. Imposti SSLOptions.Version alla versione TLS desiderata (tls1_2, tls1_3, ...).
4. Impostare SSLOptions.Port sulla porta utilizzata per le connessioni sicure.
5. Configurare il certificato utilizzando uno dei due metodi descritti di seguito.
La sotto-proprietà SSLOptions.SChannel_Options espone le impostazioni specifiche di SChannel:
| Proprietà | Descrizione |
| CertHash | L'impronta digitale (hash esadecimale) di un certificato installato nell'archivio certificati di Windows. |
| CertStoreName | Quale archivio di certificati cercare: scsnMY (Personale), scsnRoot, scsnTrust, scsnCA. |
| CertStorePath | Posizione dell'archivio: scspStoreLocalMachine o scspStoreCurrentUser. |
| CipherList | Elenco facoltativo separato da due punti di algoritmi di cifratura (ad es. CALG_AES_256:CALG_AES_128). Vuoto significa utilizzare le impostazioni predefinite del sistema. |
| UseLegacyCredentials | Se True, utilizza la struttura SCHANNEL_CRED legacy invece di SCH_CREDENTIALS. Abilitare questa opzione per le versioni precedenti di Windows che non supportano la nuova API. |
Inoltre, le proprietà generali di SSLOptions CertFile e Password vengono utilizzate durante il caricamento di un certificato da un file PFX.
Se il certificato è già installato nell'archivio certificati di Windows, fornire l'impronta digitale del certificato e indicare dove si trova.
Per trovare il thumbprint, aprire PowerShell ed eseguire:
dir cert:\localmachine\my
La colonna Thumbprint mostra l'hash esadecimale necessario.
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;
Se si dispone di un file di certificato PFX (.pfx o .p12), impostare le proprietà CertFile e Password su SSLOptions. SChannel importerà il certificato all'avvio.
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;
Se si dispone di un certificato PEM e di una chiave privata, convertirli prima nel formato PFX utilizzando OpenSSL:
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
Usi la proprietà SSLOptions.Version per controllare quale versione TLS il server accetta:
| Valore | Descrizione |
| tls1_0 | TLS 1.0 (non raccomandato) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2 (consigliato) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | Accetta TLS 1.0, 1.1 e 1.2 |
Per impostazione predefinita SChannel utilizza la configurazione dei cifrari di sistema. È possibile limitare i cifrari consentiti impostando SChannel_Options.CipherList su un elenco di nomi di algoritmi separati da due punti, ad esempio:
CALG_AES_256:CALG_AES_128
Lasciare questa proprietà vuota per utilizzare le impostazioni predefinite di Windows.
Windows Server 2019 e versioni precedenti potrebbero non supportare la nuova API SCH_CREDENTIALS . Se il server non si avvia su una versione precedente di Windows, impostare SChannel_Options.UseLegacyCredentials su True per utilizzare la struttura legacy SCHANNEL_CRED.
Il componente rileva automaticamente la versione di Windows nella maggior parte dei casi, ma se necessario può forzare la modalità legacy.