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 ライブラリは読み込まれません。対応するのは ECDHE の AEAD 暗号スイートのみ(AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305)で、証明書は ECDSA または RSA を X25519、P-256 または P-384 上で使用し、拡張マスターシークレットが必須で、セッションは再開されません。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;