TsgcWebSocketProxyServer › 속성 › SSLOptions

SSLOptions 속성

다운스트림 TLS 리스너를 위한 인증서 경로, TLS 버전 선택 및 OpenSSL 튜닝을 보유합니다.

구문

property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;

기본값

Version=tlsUndefined, VerifyCertificate=False

설명

SSL이 True일 때 프록시를 활성화하기 전에 인증서 자료를 제공하십시오: RootCertFile, CertFile 및 KeyFile은 PEM 파일을 가리킵니다(파일에 전체 체인이 포함된 경우 세 개 모두에 동일한 경로 사용). Password는 개인 키가 암호화된 경우에만 필요합니다. 클라이언트 인증서를 요청하고 검증하려면 VerifyCertificate를 True로 설정하십시오(하위 옵션 FailIfNoCertificate 및 VerifyClientOnce가 검사를 세분화함). VerifyDepth는 체인 길이를 제어합니다. Version은 특정 TLS 버전(tls1_0, tls1_1, tls1_2, tls1_3)을 선택하거나 협상을 열어 둡니다(tlsUndefined). iohNativeTLS를 사용하면 이는 대신 허용되는 가장 낮은 버전입니다. 아래를 참조하십시오. OpenSSL_Options는 저수준 설정을 노출합니다: APIVersion(oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), OpenSSL 바이너리를 찾기 위한 LibPath/LibPathCustom, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin 및 호스트 이름/IP 검증을 위한 X509Checks. 이러한 설정은 다운스트림 구간에만 적용됩니다. 업스트림 TLS 구간은 Proxy.TLS를 통해 활성화됩니다.

IOHandler는 TLS 엔진을 선택합니다. iohOpenSSL이 기본값이고 iohSChannel은 Windows 제공자를 사용합니다. iohNativeTLS는 TLS 1.3과 TLS 1.2를 구사하는 sgcCrypto 팩의 순수 Object Pascal TLS 엔진을 선택합니다. OpenSSL 라이브러리를 전혀 로드하지 않으며, TLS 1.3에서는 RFC 10024의 하이브리드 포스트 양자 키 교환 그룹을 X25519MLKEM768부터 제공합니다. 두 가지 우선순위 목록은 NativeTLS_Options.Groups와 NativeTLS_Options.CipherSuites이며, OpenSSL 방식대로 콜론으로 구분하고, 목록을 비워 두면 엔진 기본값이 유지됩니다. 이 엔진은 연결당 스레드를 쓰는 고전적인 엔진에서도 IOCP와 EPOLL 엔진에서도 똑같이 동작합니다. iohAppleTLS와 iohAndroidTLS는 클라이언트 전용 핸들러입니다. 이 중 하나를 사용하는 서버는 Active가 True로 설정될 때 예외를 발생시킵니다. 단, OnSSLGetHandler가 자체 핸들러를 제공하는 경우는 예외입니다. 대신 iohNativeTLS, iohOpenSSL, 또는 Windows에서는 iohSChannel을 사용하십시오.

네이티브 엔진에서 Version은 iohOpenSSL과 달리 정확한 버전이 아니라 허용되는 가장 낮은 버전입니다. tlsUndefined(기본값)와 tls1_2는 TLS 1.3과 TLS 1.2를 모두 받아들이고, tls1_3은 TLS 1.3만 받아들이며, tls1_0이나 tls1_1은 서버가 시작할 때 구성 오류를 발생시킵니다. 이 엔진은 TLS 1.2와 TLS 1.3만 지원하기 때문입니다. TLS 1.2만 받아들이려면 NativeTLS_Options.CipherSuites에 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256과 같은 TLS 1.2 제품군만 지정하십시오. 이 엔진은 클라이언트 인증서를 RootCertFile의 루트, 그리고 NativeTLS_Options.UseSystemRoots가 True(기본값은 False)일 때는 운영체제가 신뢰하는 루트까지 함께 사용해 검증합니다. iohNativeTLS를 사용하면 CertFile은 인증서, 체인, 키를 담은 .pfx나 .p12 파일일 수도 있으며, Password로 엽니다. 이 엔진은 TLS 1.3과 TLS 1.2 세션 티켓으로 세션을 재개합니다. NativeTLS_Options.SessionTickets(기본값 True)가 이를 켜고, NativeTLS_Options.TicketLifetime(기본값 7200초)이 티켓을 사용할 수 있는 시간을 정합니다. TLS 1.2 재개에는 클라이언트가 확장 마스터 시크릿을 지원해야 합니다. 0-RTT는 받아들이지 않으며, OpenSSL 핸들러에 속하는 OnSSLVerifyPeer를 발생시키지 않습니다. VerifyCertificate는 클라이언트에 인증서를 요청하고 이를 검증하며, VerifyCertificate_Options.FailIfNoCertificate는 인증서를 보내지 않는 클라이언트를 거부하고, 이 엔진은 결코 재협상하지 않으므로 VerifyClientOnce는 아무 효과가 없습니다. 네이티브 TLS를 참조하십시오.

예제


oProxy := TsgcWebSocketProxyServer.Create(nil);
oProxy.SSL := true;
oProxy.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.Version := tls1_3;
oProxy.SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
oProxy.SSLOptions.Port := 443;
oProxy.Proxy.Host := 'upstream.example.com';
oProxy.Proxy.Port := 8080;
oProxy.Active := true;

속성으로 돌아가기