TsgcUDPCLient › 속성 › DTLSOptions
DTLS가 활성화될 때 적용되는 인증서, 검증 및 OpenSSL 설정.
property DTLSOptions: TsgcUDPDTLSClient_Options read FDTLSOptions write SetDTLSOptions;
—
DTLS 핸드셰이크를 구동하는 매개변수를 그룹화합니다. RootCertFile은 상대편을 검증하는 데 사용되는 신뢰 저장소이며, TLS 및 QUIC 전송에서 이 속성이 갖는 의미와 동일합니다. CertFile은 이 클라이언트의 인증서이며, 인증서와 중간 인증서를 함께 담은 파일도 읽으므로 체인 파일도 사용할 수 있습니다. KeyFile은 CertFile과 짝을 이루는 개인 키입니다. VerifyCertificate는 서버 인증서 유효성 검사를 토글하고 VerifyDepth는 인증서 체인의 길이를 제한합니다. VerifyCertificate가 True이고 RootCertFile이 비어 있으면 운영 체제의 인증서 저장소가 신뢰 앵커로 사용됩니다. OpenSSL_Options는 OpenSSL API 버전(oslAPI_1_1 또는 oslAPI_3_0)과 OpenSSL 라이브러리를 로드하는 폴더를 선택합니다. 이러한 설정은 DTLS가 True일 때만 적용되며 일반 UDP 트래픽에서는 무시됩니다.
IOHandler(기본값 iohOpenSSL)는 DTLS 엔진을 선택합니다. iohNativeTLS는 sgcCrypto 팩의 네이티브 DTLS 1.2 엔진에서 핸드셰이크와 레코드를 처리하므로 OpenSSL 라이브러리를 로드하지 않습니다. X25519, P-256 또는 P-384 곡선의 ECDSA 또는 RSA 인증서를 사용하는 ECDHE AEAD 암호 스위트(AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305)만 지원하며, Extended Master Secret이 필요하고 세션을 재개하지 않습니다. CertFile과 KeyFile은 PEM 또는 DER일 수 있습니다. sgcCrypto 팩이 없는 빌드에서 iohNativeTLS를 시작하면 오류가 발생합니다. 그 외의 값은 OpenSSL 경로를 유지합니다. 네이티브 경로에서는 전달할 OpenSSL 인증서 객체가 없으므로 OnDTLSVerifyPeer가 발생하지 않습니다. VerifyCertificate가 True이면 체인은 RootCertFile 또는 시스템 루트에 대해 검사되며, 이 컴포넌트 뒤의 DTLS 엔진인 TsgcDTLS_Component가 대신 OnVerifyPeerNative 이벤트를 발생시켜 피어 체인(DER, 리프 우선), 판정 결과, var Accept를 전달합니다. OpenSSL 없이 실행하기를 참조하십시오.
RootCertFile의 의미가 변경되었으며, 이는 호환성을 깨는 변경입니다. 이전에는 이 엔드포인트 자신의 인증서로 로드되었는데, 이는 라이브러리의 나머지 부분과 일관되지 않았습니다. RootCertFile에 인증서를 지정하고 KeyFile에 키를 지정하면서 CertFile을 비워 둔 구성은 이제 컴포넌트가 시작될 때 오류를 발생시킵니다:
DTLS_error: RootCertFile is the trust store used to verify the other end, not this endpoint's own certificate. Set CertFile to the certificate that goes with KeyFile.
이러한 구성을 갱신하려면 인증서 경로를 RootCertFile에서 CertFile로 옮기고, RootCertFile에는 상대편을 검증하는 데 사용할 인증 기관을 남겨 두십시오. 이 오류는 의도적으로 치명적으로 만들어져 있습니다. 그렇지 않으면 클라이언트가 실행할 때마다 지문이 달라지는 자체 서명 인증서를 조용히 제시하게 됩니다.
VerifyCertificate가 이제 실제로 적용됩니다. 이전에는 검증 결과를 계산한 다음 그대로 폐기했기 때문에 검증을 켜 두어도 신뢰할 수 없는 기관이 발급한 인증서를 포함해 모든 인증서가 수락되었습니다. 이제는 체인 검증에 실패하면 핸드셰이크가 종료됩니다. VerifyCertificate의 기본값은 여전히 False이므로 기본 구성은 달라지지 않습니다.
TsgcRTCPeerConnection은 영향을 받지 않습니다. WebRTC는 인증서 체인이 아니라 SDP에 실려 오는 지문으로 상대편을 인증하며 VerifyCertificate를 끈 상태로 둡니다. 이것이 일반적인 WebRTC 구성이며 이전과 완전히 동일하게 계속 동작합니다.
oClient.DTLS := True;
oClient.DTLSOptions.CertFile := 'client.pem';
oClient.DTLSOptions.KeyFile := 'client.key';
oClient.DTLSOptions.VerifyCertificate := True;
oClient.DTLSOptions.OpenSSL_Options.APIVersion := oslAPI_3_0;