sgcWebSockets 4.5.1 sürümünden itibaren SChannel, 2 yeni özellikle geliştirildi:
1. TLSOptions.SChannel_Options içinde, hangi Cipher'ların kullanılacağını ayarlayabileceğiniz CipherList adlı yeni bir özellik vardır.
2. Kullanılan Protokol (TLS1.2, TLS1.1...), cipher, cipher gücü... gibi bilgileri ve daha fazlasını döndüren GetInfo adlı yeni bir işlev vardır
Cipher Listesi
Varsayılan olarak, SChannel kullanılırken istemci, sistemde yapılandırılmış cipher'ları kullanır. Kullanılan cipher'ları özelleştirmek isterseniz, güvenli bir sunucuya bağlanmak için hangi Cipher'ların kullanılacağını ayarlamak üzere TLSOptions_SChannel_Options.CipherList özelliğini kullanabilirsiniz.
Örnek: cipher listesinde "CALG_AES_256:CALG_AES_128" değerlerini ayarlarsanız, bu, istemcinin önce AES256 kullanarak bağlanmayı deneyeceği ve bağlanamazsa AES128 kullanacağı anlamına gelir.
Tam cipher listesini Microsoft belgelerinden okuyabilirsiniz.
https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Bağlantı Bilgisi
İstemci güvenli sunucuya bağlandıktan sonra, hangi Sürümün kullanıldığı (TLS 1.2, TLS 1.3...), kullanılan cipher, güç... ve daha fazlası hakkında bilgi isteyebilirsiniz.
Bu bilgiye erişmek için SChannel Handler'ın GetInfo işlevini çağırın. SSL Handler'a, SChannel Handler oluşturulduktan sonra çağrılan OnSSLAfterCreateHandler metodunu kullanarak erişebilirsiniz. İstemci sunucuya bağlandıktan sonra ve SSL Handler atanmışsa, GetInfo işlevini çağırın; başarılı olursa bağlantı verilerini döndürür.
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;
