Server SSL | SChannel pour les serveurs Indy

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.

Comment ça fonctionne

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.

Configuration

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.

Propriétés de SChannel_Options

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.

Certificat depuis le magasin Windows

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;

Certificat depuis un fichier PFX

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

Version TLS

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

Liste de chiffrements

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.

Informations d'identification héritées

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.

Avantages par rapport à OpenSSL

Remarques