Indy tabanlı sunucu bileşenleri (TsgcWebSocketServer, TsgcWebSocketHTTPServer), OpenSSL yerine TLS sağlayıcısı olarak Windows SChannel (Secure Channel) kullanabilir. SChannel, yerel Windows TLS uygulamasıdır, bu nedenle herhangi bir harici DLL gerektirmez.
Bir sunucu bileşeninde SSL etkinleştirildiğinde ve IOHandler iohSChannel olarak ayarlandığında, sunucu tüm TLS işlemlerini Windows SChannel API'sini kullanarak gerçekleştiren bir TsgcIdServerIOHandlerSSLSChannel örneği oluşturur. Her gelen istemci bağlantısı için sunucu, SChannel sağlayıcısı aracılığıyla TLS handshake gerçekleştirir, protokol sürümünü, şifre paketini ve yapılandırılmış sertifikayı bağlar.
SChannel, sertifikaları Windows Certificate Store öğesinden veya bir PFX dosyasından (.pfx / .p12) okur. PEM dosyaları gerekmez ve hiçbir OpenSSL kütüphanesinin dağıtılması gerekmez.
Bir Indy sunucusunda SChannel'ı etkinleştirmek için aşağıdaki özellikleri yapılandırın:
1. SSL özelliğini True olarak ayarlayın.
2. SSLOptions.IOHandler öğesini iohSChannel olarak ayarlayın.
3. SSLOptions.Version değerini istediğiniz TLS sürümüne (tls1_2, tls1_3, ...) ayarlayın.
4. SSLOptions.Port değerini güvenli bağlantılar için kullanılan bağlantı noktasına ayarlayın.
5. Aşağıda açıklanan iki yöntemden birini kullanarak sertifikayı yapılandırın.
SSLOptions.SChannel_Options alt özelliği SChannel'a özgü ayarları ortaya çıkarır:
| Özellik | Açıklama |
| CertHash | Windows Sertifika Deposu'na kurulmuş bir sertifikanın parmak izi (onaltılık özet). |
| CertStoreName | Hangi sertifika deposunun aranacağı: scsnMY (Personal), scsnRoot, scsnTrust, scsnCA. |
| CertStorePath | Depo konumu: scspStoreLocalMachine veya scspStoreCurrentUser. |
| CipherList | İsteğe bağlı iki nokta üst üste ile ayrılmış şifreleme algoritmaları listesi (örneğin CALG_AES_256:CALG_AES_128). Boş, sistem varsayılanlarını kullan anlamına gelir. |
| UseLegacyCredentials | True olduğunda, SCH_CREDENTIALS yerine eski SCHANNEL_CRED yapısını kullanır. Bunu, daha yeni API'yi desteklemeyen eski Windows sürümleri için etkinleştirin. |
Ayrıca, genel SSLOptions özellikleri CertFile ve Password bir PFX dosyasından sertifika yüklerken kullanılır.
Sertifika Windows Sertifika Deposunda zaten kuruluysa, sertifika parmak izini (thumbprint) sağlayın ve nerede bulunduğunu belirtin.
Thumbprint'i bulmak için PowerShell'i açın ve şunu çalıştırın:
dir cert:\localmachine\my
Thumbprint sütunu, ihtiyacınız olan onaltılık hash'i gösterir.
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;
Bir PFX (.pfx veya .p12) sertifika dosyanız varsa, SSLOptions üzerinde CertFile ve Password özelliklerini ayarlayın. SChannel, sertifikayı başlangıçta içe aktarır.
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;
Bir PEM sertifikanız ve özel anahtarınız varsa, önce OpenSSL kullanarak bunları PFX biçimine dönüştürün:
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
Sunucunun hangi TLS sürümünü kabul edeceğini kontrol etmek için SSLOptions.Version özelliğini kullanın:
| Value | Açıklama |
| tls1_0 | TLS 1.0 (önerilmez) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2 (önerilir) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | TLS 1.0, 1.1 ve 1.2'yi Kabul Et |
Varsayılan olarak SChannel sistem şifre yapılandırmasını kullanır. İzin verilen şifreleri, SChannel_Options.CipherList değerini iki nokta üst üste ile ayrılmış bir algoritma adları listesine ayarlayarak kısıtlayabilirsiniz, örneğin:
CALG_AES_256:CALG_AES_128
Windows varsayılanlarını kullanmak için bu özelliği boş bırakın.
Windows Server 2019 ve öncesi, daha yeni SCH_CREDENTIALS API'sini desteklemeyebilir. Sunucu eski bir Windows sürümünde başlatılamazsa, bunun yerine eski SCHANNEL_CRED yapısını kullanmak için SChannel_Options.UseLegacyCredentials'ı True olarak ayarlayın.
Bileşen çoğu durumda Windows sürümünü otomatik olarak algılar, ancak gerekirse legacy modunu zorlayabilirsiniz.