Los componentes de servidor basados en Indy (TsgcWebSocketServer, TsgcWebSocketHTTPServer) pueden usar Windows SChannel (Secure Channel) como proveedor TLS en lugar de OpenSSL. SChannel es la implementación TLS nativa de Windows, por lo que no requiere DLLs externos.
Cuando un componente servidor tiene SSL habilitado y el IOHandler está configurado como iohSChannel, el servidor crea una instancia de TsgcIdServerIOHandlerSSLSChannel que gestiona todas las operaciones TLS mediante la API SChannel de Windows. Para cada conexión de cliente entrante, el servidor realiza el protocolo de enlace TLS a través del proveedor SChannel, negociando la versión del protocolo, el conjunto de cifrado y vinculando el certificado configurado.
SChannel lee certificados del Almacén de certificados de Windows o de un archivo PFX (.pfx / .p12). No se necesitan archivos PEM ni es necesario desplegar bibliotecas OpenSSL.
Para habilitar SChannel en un servidor Indy, configure las siguientes propiedades:
1. Establezca la propiedad SSL en True.
2. Establezca SSLOptions.IOHandler en iohSChannel.
3. Establezca SSLOptions.Version a la versión TLS deseada (tls1_2, tls1_3, ...).
4. Establezca SSLOptions.Port en el puerto utilizado para las conexiones seguras.
5. Configure el certificado mediante uno de los dos métodos descritos a continuación.
La subpropiedad SSLOptions.SChannel_Options expone la configuración específica de SChannel:
| Propiedad | Descripción |
| CertHash | La huella digital (hash hexadecimal) de un certificado instalado en el almacén de certificados de Windows. |
| CertStoreName | Almacén de certificados en el que buscar: scsnMY (Personal), scsnRoot, scsnTrust, scsnCA. |
| CertStorePath | Ubicación del almacén: scspStoreLocalMachine o scspStoreCurrentUser. |
| CipherList | Lista opcional de algoritmos de cifrado separados por dos puntos (p. ej. CALG_AES_256:CALG_AES_128). Si está vacío, se usan los valores predeterminados del sistema. |
| UseLegacyCredentials | Cuando es True, utiliza la estructura heredada SCHANNEL_CRED en lugar de SCH_CREDENTIALS. Habilite esta opción para versiones antiguas de Windows que no admiten la API más reciente. |
Además, las propiedades generales SSLOptions CertFile y Password se utilizan al cargar un certificado desde un archivo PFX.
Si el certificado ya está instalado en el Almacén de Certificados de Windows, proporcione la huella digital del certificado e indique dónde se encuentra.
Para encontrar la huella digital, abra PowerShell y ejecute:
dir cert:\localmachine\my
La columna Thumbprint muestra el hash hexadecimal que necesita.
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 dispone de un archivo de certificado PFX (.pfx o .p12), establezca las propiedades CertFile y Password en SSLOptions. SChannel importará el certificado al inicio.
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 tiene un certificado PEM y una clave privada, conviértalos primero al formato PFX utilizando OpenSSL:
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
Use la propiedad SSLOptions.Version para controlar qué versión de TLS acepta el servidor:
| Valor | Descripción |
| tls1_0 | TLS 1.0 (no recomendado) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2 (recomendado) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | Aceptar TLS 1.0, 1.1 y 1.2 |
De forma predeterminada, SChannel utiliza la configuración de cifrado del sistema. Puede restringir los cifrados permitidos estableciendo SChannel_Options.CipherList en una lista de nombres de algoritmos separados por dos puntos, por ejemplo:
CALG_AES_256:CALG_AES_128
Deje esta propiedad vacía para usar los valores predeterminados de Windows.
Windows Server 2019 y versiones anteriores pueden no admitir la API más reciente SCH_CREDENTIALS. Si el servidor no se inicia en una versión anterior de Windows, establezca SChannel_Options.UseLegacyCredentials a True para usar la estructura heredada SCHANNEL_CRED en su lugar.
El componente detecta la versión de Windows automáticamente en la mayoría de los casos, pero puede forzar el modo heredado si es necesario.