TsgcUDPCLient › Eigenschaften › DTLSOptions

DTLSOptions Eigenschaft

Zertifikat-, Verifizierungs- und OpenSSL-Einstellungen, die angewendet werden, wenn DTLS aktiviert ist.

Syntax

property DTLSOptions: TsgcUDPDTLSClient_Options read FDTLSOptions write SetDTLSOptions;

Standardwert

—

Hinweise

Gruppiert die Parameter, die den DTLS-Handshake steuern. RootCertFile ist der Vertrauensspeicher, mit dem die Gegenstelle überprüft wird, dieselbe Bedeutung, die diese Eigenschaft bei den TLS- und QUIC-Transporten hat. CertFile ist das Zertifikat dieses Clients, und es liest eine Datei, die das Zertifikat zusammen mit seinen Zwischenzertifikaten enthält, eine Kettendatei funktioniert also. KeyFile ist der private Schlüssel, der zu CertFile gehört. VerifyCertificate schaltet die Serverzertifikatsvalidierung um und VerifyDepth begrenzt die Länge der Zertifikatskette. Ist VerifyCertificate True und RootCertFile leer, wird der Zertifikatspeicher des Betriebssystems als Vertrauensanker verwendet. OpenSSL_Options wählt die OpenSSL-API-Version (oslAPI_1_1 oder oslAPI_3_0) und den Ordner, aus dem die OpenSSL-Bibliotheken geladen werden. Diese Einstellungen werden nur wirksam, wenn DTLS True ist, und werden bei reinem UDP-Datenverkehr ignoriert.

IOHandler (Standard iohOpenSSL) wählt die DTLS-Engine. iohNativeTLS führt den Handshake und die Records auf der nativen DTLS-1.2-Engine des sgcCrypto-Packs aus, sodass keine OpenSSL-Bibliothek geladen wird. Sie unterstützt ausschließlich die ECDHE-AEAD-Cipher-Suiten (AES-128-GCM, AES-256-GCM und ChaCha20-Poly1305) mit ECDSA- oder RSA-Zertifikaten über X25519, P-256 oder P-384, erfordert Extended Master Secret und nimmt keine Sitzungen wieder auf. CertFile und KeyFile können PEM oder DER sein. Der Start mit iohNativeTLS in einem Build ohne das sgcCrypto-Pack löst einen Fehler aus. Jeder andere Wert behält den OpenSSL-Pfad bei. OnDTLSVerifyPeer wird auf dem nativen Pfad nicht ausgelöst, da es kein OpenSSL-Zertifikatsobjekt zu übergeben gibt. Wenn VerifyCertificate True ist, wird die Kette gegen RootCertFile oder die Systemvertrauensanker geprüft, und TsgcDTLS_Component, die hinter dieser Komponente stehende DTLS-Engine, löst dort stattdessen ihr OnVerifyPeerNative-Ereignis aus, mit der Peer-Kette in DER (Leaf zuerst), dem Ergebnis und einem var Accept. Siehe SSL ohne OpenSSL.

RootCertFile hat seine Bedeutung geändert, und das ist eine Breaking Change. Es wurde bisher als Zertifikat dieses Endpunkts geladen, was mit dem Rest der Bibliothek inkonsistent war. Eine Konfiguration, die ein Zertifikat in RootCertFile und einen Schlüssel in KeyFile angibt, CertFile aber leer lässt, löst jetzt beim Start der Komponente einen Fehler aus:

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.

Um eine solche Konfiguration zu aktualisieren, verschieben Sie den Zertifikatspfad von RootCertFile nach CertFile und lassen Sie RootCertFile für die Zertifizierungsstelle, gegen die die Gegenstelle überprüft wird. Der Fehler ist bewusst fatal. Ohne ihn würde der Client stillschweigend ein generiertes selbstsigniertes Zertifikat mit bei jedem Lauf anderem Fingerabdruck präsentieren.

VerifyCertificate wird jetzt durchgesetzt. Bisher wurde das Überprüfungsergebnis berechnet und anschließend verworfen, sodass bei eingeschalteter Überprüfung jedes Zertifikat akzeptiert wurde, auch eines, das von einer nicht vertrauenswürdigen Zertifizierungsstelle ausgestellt wurde. Eine fehlschlagende Kette beendet jetzt den Handshake. VerifyCertificate ist weiterhin standardmäßig False, die Standardkonfiguration bleibt also unverändert.

TsgcRTCPeerConnection ist nicht betroffen. WebRTC authentifiziert die Gegenstelle über den im SDP übertragenen Fingerabdruck und nicht über eine Zertifikatskette und lässt VerifyCertificate deaktiviert. Das ist die normale WebRTC-Konfiguration und sie funktioniert genau wie bisher.

Beispiel

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;

Zurück zu Properties