SChannel Cipher Listesi ve Bağlantı Bilgisi

· Özellikler

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;