Desde sgcWebSockets 4.4.7 se admite el uso de certificados usando SChannel como librería criptográfica.
La implementación de SChannel admite 2 tipos de autenticación con certificado:
1. Usando un certificado PFX
2. Estableciendo el Hash Thumbprint de un certificado ya instalado en el sistema Windows.
Certificado PFX
Un certificado PFX es un archivo que contiene el certificado y la clave privada; a veces tienes un certificado en formato PEM, así que antes de usarlo debes convertirlo a PFX.
Usa el siguiente comando openssl para convertir un certificado PEM a PFX
openssl pkcs12 -inkey certificate-pem.key -in certificate-pem.crt -export -out certificate.pfx
Una vez que el certificado está en formato PFX, solo tienes que desplegar el certificado y establecer en la propiedad TLSOptions.Certificate la ruta al mismo.
TLSOptions.IOHandler := iohSChannel; TLSOptions.CertFile := '<certificate path>'; TLSOptions.Password := '<certificate optional password>';
Hash Thumbprint
Si el certificado ya está instalado en el almacén de certificados de Windows, solo necesitas conocer el thumbprint del certificado y establecerlo en la propiedad TLSOptions.SChannel_Options.
Encontrar el hash de un certificado es tan fácil en powershell como ejecutar un comando dir sobre el contenedor de certificados.
dir cert:\localmachine\my
El hash es el valor hexadecimal del Thumbprint.
Directory: Microsoft.PowerShell.Security\Certificate::localmachine\myThumbprint Subject---------- -------C12A8FC8AE668F866B48F23E753C93D357E9BE10 CN=*.mydomain.com
Una vez tengas el valor del Thumbprint, debes establecer en la propiedad TLSOptions.SChannel_Options el hash y la ubicación del certificado.
TLSOptions.IOHandler := iohSChannel; TLSOptions.SChannel_Options.CertHash := '<certificate thumbprint>'; TLSOptions.SChannel_Options.CertStoreName := '<certificate store name>'; TLSOptions.SChannel_Options.CertStorePath := '<certificate store path>'; TLSOptions.Password := '<certificate optional password>';
