Od sgcWebSockets 4.5.1 SChannel został ulepszony o 2 nowe funkcje:
1. W TLSOptions.SChannel_Options dostępna jest nowa właściwość CipherList, w której możesz ustawić, jakie szyfry będą używane.
2. Dostępna jest nowa funkcja GetInfo, która zwraca informacje takie jak używany protokół (TLS 1.2, TLS 1.1...), szyfr, siła szyfru i inne.
Cipher List
Domyślnie, używając SChannel, klient korzysta z szyfrów skonfigurowanych w systemie. Jeśli chcesz dostosować używane szyfry, możesz użyć właściwości TLSOptions_SChannel_Options.CipherList, aby określić, jakie szyfry będą używane do łączenia się z bezpiecznym serwerem.
Example: if you set in the cipher list the following values "CALG_AES_256:CALG_AES_128", this means that first the client will try to connect using AES256 and if can't, will use AES128.
Pełną listę szyfrów znajdziesz w dokumentacji Microsoft.
https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Connection Info
Po połączeniu klienta z bezpiecznym serwerem możesz zapytać o informacje dotyczące używanej wersji (TLS 1.2, TLS 1.3...), używanego szyfru, jego siły i innych.
Wywołaj funkcję GetInfo handlera SChannel, aby uzyskać dostęp do tych informacji. Dostęp do handlera SSL możesz uzyskać za pomocą metody OnSSLAfterCreateHandler, wywoływanej po utworzeniu handlera SChannel. Po połączeniu klienta z serwerem i jeśli handler SSL jest przypisany, wywołaj funkcję GetInfo — w przypadku powodzenia zwróci dane połączenia.
var
SSL: TsgcIdSSLIOHandlerSocketSChannel;
oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLSOptions.Version := tls1_2;
oClient.TLSOptions.IOHandler := iohSChannel;
oClient.OnSSLAfterCreateHandler := OnSSLAfterCreateHandlerEvent;
oClient.OnConnect := OnConnectEvent;
oClient.Active := True;
procedure OnSSLAfterCreateHandlerEvent(Sender: TObject; aType: TwsSSLHandler; aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
if aSSLHandler.ClassType = TsgcIdSSLIOHandlerSocketSChannel then
SSL := TsgcIdSSLIOHandlerSocketSChannel(aSSLHandler);
end;
procedure OnConnectEvent(Connection: TsgcWSConnection);
var
oInfo: TsgcSChannelConnectionInfo;
begin
if Assigned(SSL) then
begin
oInfo := SSL.GetInfo;
if (oInfo.Protocol <> tls1_2) then
raise Exception.Create('Client cannot connect using TLS 1.2');
end;
end;
