sgcWebSockets 4.5.1부터 SChannel이 두 가지 새로운 기능으로 개선됐어요:
1. TLSOptions.SChannel_Options에 CipherList라는 새로운 속성이 추가되어 사용할 암호를 설정할 수 있어요.
2. 사용된 프로토콜(TLS1.2, TLS1.1 등), 암호, 암호 강도 등의 정보를 반환하는 GetInfo 함수가 추가됐어요.
암호 목록
기본적으로 SChannel을 사용하면 클라이언트는 시스템에 설정된 암호를 사용해요. 사용할 암호를 커스텀하려면 TLSOptions_SChannel_Options.CipherList 속성을 사용해 보안 서버에 연결할 때 사용할 암호를 설정할 수 있어요.
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.
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;
