Les composants serveur basés sur Indy (TsgcWebSocketServer, TsgcWebSocketHTTPServer) peuvent utiliser Windows SChannel (Secure Channel) comme fournisseur TLS à la place d'OpenSSL. SChannel est l'implémentation TLS native de Windows ; il ne nécessite donc aucune DLL externe.
Lorsqu'un composant serveur a SSL activé et que l'IOHandler est défini sur iohSChannel, le serveur crée une instance TsgcIdServerIOHandlerSSLSChannel qui gère toutes les opérations TLS en utilisant l'API Windows SChannel. Pour chaque connexion client entrante, le serveur effectue le handshake TLS via le fournisseur SChannel, négociant la version du protocole, la suite de chiffrement et liant le certificat configuré.
SChannel lit les certificats depuis le Magasin de certificats Windows ou depuis un fichier PFX (.pfx / .p12). Aucun fichier PEM n'est nécessaire et aucune bibliothèque OpenSSL ne doit être déployée.
Pour activer SChannel sur un serveur Indy, configurer les propriétés suivantes :
1. Définissez la propriété SSL sur True.
2. Définir SSLOptions.IOHandler sur iohSChannel.
3. Définissez SSLOptions.Version sur la version TLS souhaitée (tls1_2, tls1_3, ...).
4. Définissez SSLOptions.Port sur le port utilisé pour les connexions sécurisées.
5. Configurez le certificat en utilisant l'une des deux méthodes décrites ci-dessous.
La sous-propriété SSLOptions.SChannel_Options expose les paramètres spécifiques à SChannel :
| Propriété | Description |
| CertHash | L'empreinte numérique (hachage hexadécimal) d'un certificat installé dans le magasin de certificats Windows. |
| CertStoreName | Quel magasin de certificats rechercher : scsnMY (Personnel), scsnRoot, scsnTrust, scsnCA. |
| CertStorePath | Emplacement du magasin : scspStoreLocalMachine ou scspStoreCurrentUser. |
| CipherList | Liste optionnelle d'algorithmes de chiffrement séparés par des deux-points (ex. CALG_AES_256:CALG_AES_128). Vide signifie utiliser les valeurs par défaut du système. |
| UseLegacyCredentials | Lorsque True, utilise la structure SCHANNEL_CRED héritée au lieu de SCH_CREDENTIALS. Activez cette option pour les versions de Windows plus anciennes qui ne prennent pas en charge la nouvelle API. |
De plus, les propriétés générales SSLOptions CertFile et Password sont utilisées lors du chargement d'un certificat depuis un fichier PFX.
Si le certificat est déjà installé dans le magasin de certificats Windows, fournissez l'empreinte numérique du certificat et indiquez où il se trouve.
Pour trouver l'empreinte numérique, ouvrir PowerShell et exécuter :
dir cert:\localmachine\my
La colonne Thumbprint affiche le hash hexadécimal dont vous avez besoin.
Directory: Microsoft.PowerShell.Security\Certificate::localmachine\my
Thumbprint Subject
---------- -------
C12A8FC8AE668F866B48F23E753C93D357E9BE10 CN=*.mydomain.com
oServer := TsgcWebSocketServer.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;
Si vous disposez d'un fichier de certificat PFX (.pfx ou .p12), définissez les propriétés CertFile et Password dans SSLOptions. SChannel importera le certificat au démarrage.
oServer := TsgcWebSocketServer.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;
Si vous disposez d'un certificat PEM et d'une clé privée, convertissez-les d'abord au format PFX en utilisant OpenSSL :
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
Utilisez la propriété SSLOptions.Version pour contrôler la version TLS que le serveur accepte :
| Valeur | Description |
| tls1_0 | TLS 1.0 (non recommandé) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2 (recommandé) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | Accepter TLS 1.0, 1.1 et 1.2 |
Par défaut, SChannel utilise la configuration de chiffrement du système. Vous pouvez restreindre les chiffrements autorisés en définissant SChannel_Options.CipherList sur une liste d'algorithmes séparés par des deux-points, par exemple :
CALG_AES_256:CALG_AES_128
Laissez cette propriété vide pour utiliser les paramètres par défaut de Windows.
Windows Server 2019 et versions antérieures peuvent ne pas prendre en charge la nouvelle API SCH_CREDENTIALS. Si le serveur ne démarre pas sur une ancienne version de Windows, définissez SChannel_Options.UseLegacyCredentials à True pour utiliser la structure héritée SCHANNEL_CRED à la place.
Le composant détecte automatiquement la version Windows dans la plupart des cas, mais vous pouvez forcer le mode hérité si nécessaire.