从 sgcWebSockets 4.5.1 起,SChannel 新增了 2 项功能:
1. TLSOptions.SChannel_Options 中新增了 CipherList 属性,用于设置使用哪些密码算法。
2. 新增了 GetInfo 函数,返回所使用的协议(TLS 1.2、TLS 1.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 Handler 的 GetInfo 函数访问此信息。可通过 OnSSLAfterCreateHandler 方法(在 SChannel Handler 创建后调用)访问 SSL Handler。客户端连接服务器后,若 SSL Handler 已分配,调用 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;
