Komponenty serwerowe oparte na Indy (TsgcWebSocketServer, TsgcWebSocketHTTPServer) mogą używać Windows SChannel (Secure Channel) jako dostawcy TLS zamiast OpenSSL. SChannel jest natywną implementacją TLS systemu Windows, dlatego nie wymaga zewnętrznych bibliotek DLL.
Gdy komponent serwera ma włączony SSL i IOHandler jest ustawiony na iohSChannel, serwer tworzy instancję TsgcIdServerIOHandlerSSLSChannel, która obsługuje wszystkie operacje TLS za pomocą Windows SChannel API. Dla każdego przychodzącego połączenia klienta serwer wykonuje uzgadnianie TLS przez dostawcę SChannel, negocjując wersję protokołu, zestaw szyfrów i wiążąc skonfigurowany certyfikat.
SChannel odczytuje certyfikaty z magazynu certyfikatów systemu Windows lub z pliku PFX (.pfx / .p12). Pliki PEM nie są wymagane i nie trzeba wdrażać bibliotek OpenSSL.
Aby włączyć SChannel na serwerze Indy, skonfiguruj następujące właściwości:
1. Ustaw właściwość SSL na True.
2. Ustaw SSLOptions.IOHandler na iohSChannel.
3. Ustaw właściwość SSLOptions.Version na żądaną wersję TLS (tls1_2, tls1_3, ...).
4. Ustaw wartość SSLOptions.Port na port używany do bezpiecznych połączeń.
5. Skonfiguruj certyfikat przy użyciu jednej z dwóch opisanych poniżej metod.
Właściwość podrzędna SSLOptions.SChannel_Options udostępnia ustawienia specyficzne dla SChannel:
| Właściwość | Opis |
| CertHash | Odcisk palca (skrót w formacie szesnastkowym) certyfikatu zainstalowanego w magazynie certyfikatów systemu Windows. |
| CertStoreName | Magazyn certyfikatów do przeszukania: scsnMY (Osobisty), scsnRoot, scsnTrust, scsnCA. |
| CertStorePath | Lokalizacja magazynu: scspStoreLocalMachine lub scspStoreCurrentUser. |
| CipherList | Opcjonalna lista algorytmów szyfrowania oddzielona dwukropkami (np. CALG_AES_256:CALG_AES_128). Pusta wartość oznacza użycie domyślnych ustawień systemowych. |
| UseLegacyCredentials | Gdy wartość wynosi True, zamiast SCH_CREDENTIALS używana jest starsza struktura SCHANNEL_CRED. Należy włączyć tę opcję w starszych wersjach systemu Windows, które nie obsługują nowszego API. |
Ponadto ogólne właściwości SSLOptions CertFile i Password są używane podczas ładowania certyfikatu z pliku PFX.
Jeśli certyfikat jest już zainstalowany w magazynie certyfikatów Windows, należy podać odcisk palca certyfikatu i wskazać jego lokalizację.
Aby znaleźć odcisk palca, otwórz PowerShell i uruchom:
dir cert:\localmachine\my
Kolumna Thumbprint pokazuje szesnastkowy skrót, który jest potrzebny.
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;
Jeśli posiadasz plik certyfikatu PFX (.pfx lub .p12), ustaw właściwości CertFile i Password w SSLOptions. SChannel zaimportuje certyfikat podczas uruchamiania.
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;
Jeśli posiadasz certyfikat PEM i klucz prywatny, należy je najpierw przekonwertować do formatu PFX przy użyciu OpenSSL:
openssl pkcs12 -inkey server.key -in server.crt -export -out server.pfx
Użyj właściwości SSLOptions.Version do kontrolowania, które wersje TLS serwer akceptuje:
| Wartość | Opis |
| tls1_0 | TLS 1.0 (niezalecane) |
| tls1_1 | TLS 1.1 |
| tls1_2 | TLS 1.2 (zalecane) |
| tls1_3 | TLS 1.3 |
| tlsUndefined | Akceptuj TLS 1.0, 1.1 i 1.2 |
Domyślnie SChannel używa systemowej konfiguracji szyfrowania. Można ograniczyć dozwolone szyfry, ustawiając SChannel_Options.CipherList na listę nazw algorytmów oddzielonych dwukropkami, na przykład:
CALG_AES_256:CALG_AES_128
Pozostaw tę właściwość pustą, aby używać wartości domyślnych systemu Windows.
Windows Server 2019 i wcześniejsze wersje mogą nie obsługiwać nowszego interfejsu API SCH_CREDENTIALS. Jeśli uruchomienie serwera na starszej wersji systemu Windows nie powiedzie się, należy ustawić SChannel_Options.UseLegacyCredentials na True, aby użyć starszej struktury SCHANNEL_CRED.
Komponent automatycznie wykrywa wersję systemu Windows w większości przypadków, ale w razie potrzeby można wymusić tryb legacy.