TsgcWebSocketClient › Properties › TLSOptions

TLSOptions 속성

TLS가 활성화될 때 사용되는 인증서, TLS 버전, ALPN, IOHandler 및 기타 보안 연결 세부 정보를 구성합니다.

구문

property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;

기본값

Preset=tlspCustom

설명

TLS가 True일 때만 접근할 수 있습니다. 하위 속성에는 RootCertFile, CertFile, KeyFile, Password, VerifyCertificate, VerifyDepth, Version(tlsUndefined부터 tls1_3까지), ALPNProtocols 및 IOHandler(iohOpenSSL, iohSChannel, iohAndroidTLS, iohAppleTLS 또는 iohNativeTLS)가 포함됩니다. Android에서 iohAndroidTLS는 플랫폼 네이티브 TLS(javax.net.ssl.SSLEngine)를 사용하고, iOS 및 macOS에서 iohAppleTLS는 Apple 네이티브 TLS를 사용하므로 OpenSSL 라이브러리를 배포할 필요가 없습니다. 네이티브 플랫폼 TLS에는 Enterprise 에디션이 필요합니다. OpenSSL 관련 설정은 OpenSSL_Options 아래에, SChannel 관련 설정은 SChannel_Options 아래에 있습니다.

VerifyCertificate는 iohSChannel을 포함한 모든 IOHandler에 대해 동일한 방식으로 인증서 검증을 제어합니다. 기본값은 False이므로, 자체 서명되었거나 만료되었거나 호스트 이름이 일치하지 않는 인증서를 제시하는 서버도 이 값을 True로 설정하기 전까지는 아무 경고 없이 수락됩니다. SChannel을 사용하는 경우 검증은 Windows 인증서 저장소를 기준으로 수행되며, OnSChannelVerifyPeer를 사용하면 애플리케이션이 체인을 검사하거나 그렇지 않으면 거부될 인증서를 수락할 수 있습니다.

VerifyCertificate는 인증서가 발급된 이후에 해지되었는지 여부에 대해서는 아무것도 알려주지 않으므로, 인증서가 해지되었지만 아직 만료되지 않은 도난당한 키도 여전히 인증에 성공합니다. iohSChannel을 사용하는 경우, 해지 상태는 SChannel_Options.Revocation.Check가 기본값인 scrcDisabled 이외의 값으로 설정된 경우에만 확인됩니다. scrcEndCertificate는 서버 인증서만 확인하고, scrcChainExcludeRoot는 중간 인증서까지 함께 확인하며, scrcChain은 루트도 포함합니다. Revocation.Timeout은 CRL 및 OCSP 조회 전체에 대한 제한 시간을 정하여(기본값 5000ms) 도달할 수 없는 응답자가 핸드셰이크를 지연시키지 못하도록 하고, Revocation.CacheOnly는 Windows가 이미 캐시해 둔 데이터만 사용하며 네트워크에 접속하지 않습니다. 그리고 Revocation.IgnoreRevocationOffline과 Revocation.IgnoreNoRevocationCheck(둘 다 True)는 도달할 수 없는 응답자나 해지 정보를 게시하지 않는 인증서를 수락할지 여부를 결정합니다. 해지가 확인된 인증서는 항상 거부됩니다. SChannel Certificate Revocation을 참조하십시오.

Preset은 한 번의 할당으로 일련의 보안 기본값을 적용합니다. tlspCustom(기본값)이면 모든 옵션이 수동으로 구성한 값을 유지하여 이전 동작이 보존됩니다. Preset := tlspSecureDefaults를 설정하면 인증서 검증(VerifyCertificate := True)이 활성화되고, Version이 tls1_0이나 tls1_1로 설정되어 있었을 때만 TLS 1.2로 올라가며(tlsUndefined는 그대로 두어 TLS 1.3을 계속 쓸 수 있게 합니다), OpenSSL_Options.VersionMin과 SChannel_Options.VersionMin이 더 낮거나 정의되지 않았을 때 tls1_2로 설정되고, 서버 인증서의 호스트 이름 확인(OpenSSL X509Checks 호스트 이름 검증)이 활성화되고, SChannel 해지 확인이 scrcChainExcludeRoot로 활성화됩니다. 프리셋을 적용한 후에도 개별 옵션을 계속 조정할 수 있습니다.

IOHandler는 TLS 1.3과 TLS 1.2를 구사하는 sgcCrypto 팩의 순수 Object Pascal TLS 엔진인 iohNativeTLS도 받아들입니다. 이 엔진은 OpenSSL 라이브러리를 전혀 로드하지 않으며 TLS 1.3에서는 RFC 10024의 하이브리드 포스트 양자 키 교환 그룹을 X25519MLKEM768부터 제공하므로, 이를 선택한 클라이언트는 이를 지원하는 모든 서버와 포스트 양자 키 교환을 협상합니다. 두 가지 우선순위 목록은 NativeTLS_Options.Groups와 NativeTLS_Options.CipherSuites이며, OpenSSL 방식대로 콜론으로 구분하고, 목록을 비워 두면 엔진 기본값이 유지됩니다.

네이티브 엔진에서 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(기본값 False)를 설정하면 운영체제가 신뢰하는 루트가 추가됩니다. Windows ROOT 인증서 저장소, macOS에서는 Security.framework의 앵커 인증서(대체 수단으로 /etc/ssl/cert.pem), iOS에서는 Security.framework가 피어 체인을 평가하는 방식, Android에서는 Conscrypt 또는 /system/etc/security/cacerts 폴더, 그리고 Linux에서는 여섯 개의 표준 위치 중 처음 발견되는 CA 번들 파일(가장 먼저 /etc/ssl/certs/ca-certificates.crt)입니다. 시스템 루트를 찾지 못하면 VerifyCertificate := True에는 루트 파일이 필요합니다. CertFile은 .pfx나 .p12 파일일 수도 있으며, Password로 엽니다. 이 엔진은 TLS 1.3과 TLS 1.2 세션 티켓으로 세션을 재개하며, 이는 구성 요소의 세션 캐시에 보관되므로 재연결은 전체 핸드셰이크를 건너뜁니다. NativeTLS_Options.SessionTickets(기본값 True)가 이를 켜며, TLS 1.2 재개에는 서버가 확장 마스터 시크릿을 지원해야 합니다. 0-RTT 데이터는 보내지 않으며, OpenSSL 핸들러에 속하는 OnSSLVerifyPeer를 발생시키지 않습니다. 인증서가 담고 있어야 할 이름을 고정하려면 OpenSSL_Options.X509Checks.HostName이나 IPAddress를 설정하십시오. 네이티브 엔진도 이 두 값을 읽습니다. 네이티브 TLS를 참조하십시오.

예제


oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLSOptions.Version := tls1_2;
oClient.TLSOptions.VerifyCertificate := true;
oClient.TLSOptions.RootCertFile := 'cacert.pem';
oClient.Active := true;

속성으로 돌아가기