Server SSL | Indy Sunucuları için SChannel

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.

Nasıl çalışır

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.

Configuration

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.

SChannel_Options özellikleri

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.

Windows Store'dan Sertifika

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 := TsgcWebSocketHTTPServer.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;

PFX dosyasından Sertifika

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 := TsgcWebSocketHTTPServer.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

TLS Sürümü

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

Cipher List

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.

Legacy Credentials

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.UseLegacyCredentialsTrue olarak ayarlayın.

Bileşen çoğu durumda Windows sürümünü otomatik olarak algılar, ancak gerekirse legacy modunu zorlayabilirsiniz.

OpenSSL'ye Göre Avantajlar

Notlar