sgcWebSockets 4.5.1 から SChannel に 2 つの新機能が追加されました:
1. TLSOptions.SChannel_Options に CipherList という新しいプロパティが追加され、使用する暗号を設定できます。
2. GetInfo という新しい関数が追加され、使用中のプロトコル(TLS1.2・TLS1.1 など)・暗号・暗号強度などの情報を返します。
暗号リスト
デフォルトでは SChannel を使用する際、クライアントはシステムで設定された暗号を使用します。使用する暗号をカスタマイズする場合は、TLSOptions_SChannel_Options.CipherList プロパティを使用してセキュアサーバーへの接続に使用する暗号を設定できます。
例:暗号リストに「CALG_AES_256:CALG_AES_128」を設定すると、クライアントはまず AES256 で接続を試み、できない場合は AES128 を使用します。
完全な暗号リストは Microsoft のドキュメントで確認できます。
https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
接続情報
クライアントがセキュアサーバーに接続した後、使用中のバージョン(TLS 1.2・TLS 1.3 など)・使用された暗号・強度などの情報をリクエストできます。
SChannel ハンドラーの GetInfo 関数を呼び出してこの情報にアクセスします。SChannel ハンドラーの作成後に呼び出される OnSSLAfterCreateHandler メソッドを使用して SSL ハンドラーにアクセスできます。クライアントがサーバーに接続し、SSL ハンドラーが割り当てられている場合に GetInfo 関数を呼び出すと、成功すれば接続データが返されます。
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;
