TsgcUDPCLient › Propriétés › DTLSOptions

DTLSOptions Propriété

Certificat, paramètres de vérification et OpenSSL appliqués lorsque DTLS est activé.

Syntaxe

property DTLSOptions: TsgcUDPDTLSClient_Options read FDTLSOptions write SetDTLSOptions;

Valeur par défaut

—

Remarques

Regroupe les paramètres qui pilotent la poignée de main DTLS. RootCertFile est le magasin de confiance utilisé pour vérifier l'autre extrémité, le sens que cette propriété a également sur les transports TLS et QUIC. CertFile est le certificat de ce client, et il lit un fichier qui contient le certificat accompagné de ses intermédiaires, un fichier de chaîne fonctionne donc. KeyFile est la clé privée qui accompagne CertFile. VerifyCertificate active/désactive la validation du certificat serveur et VerifyDepth limite la longueur de la chaîne de certificats. Lorsque VerifyCertificate vaut True et que RootCertFile est vide, le magasin de certificats du système d'exploitation est utilisé comme ancre de confiance. OpenSSL_Options sélectionne la version de l'API OpenSSL (oslAPI_1_1 ou oslAPI_3_0) et le dossier d'où les bibliothèques OpenSSL sont chargées. Ces paramètres ne prennent effet que lorsque DTLS est True et sont ignorés pour le trafic UDP en clair.

IOHandler (par défaut iohOpenSSL) sélectionne le moteur DTLS. iohNativeTLS exécute la poignée de main et les enregistrements sur le moteur DTLS 1.2 natif du pack sgcCrypto, de sorte qu'aucune bibliothèque OpenSSL n'est chargée. Il prend en charge uniquement les suites AEAD ECDHE (AES-128-GCM, AES-256-GCM et ChaCha20-Poly1305) avec des certificats ECDSA ou RSA sur X25519, P-256 ou P-384, requiert Extended Master Secret et ne reprend pas les sessions. CertFile et KeyFile peuvent être au format PEM ou DER. Démarrer avec iohNativeTLS dans une compilation sans le pack sgcCrypto lève une erreur. Toute autre valeur conserve la voie OpenSSL. OnDTLSVerifyPeer ne se déclenche pas sur la voie native, car il n'existe aucun objet certificat OpenSSL à transmettre. Lorsque VerifyCertificate vaut True, la chaîne est vérifiée par rapport à RootCertFile ou aux racines système, et TsgcDTLS_Component, le moteur DTLS derrière ce composant, déclenche à la place son événement OnVerifyPeerNative, avec la chaîne du pair en DER (feuille en premier), le verdict et un var Accept. Voir Fonctionner sans OpenSSL.

RootCertFile a changé de signification, et il s'agit d'un changement incompatible. Cette propriété était auparavant chargée comme le certificat de cette extrémité, ce qui était incohérent avec le reste de la bibliothèque. Une configuration qui indique un certificat dans RootCertFile et une clé dans KeyFile en laissant CertFile vide lève désormais une erreur au démarrage du composant :

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.

Pour mettre à jour une telle configuration, déplacez le chemin du certificat de RootCertFile vers CertFile, et réservez RootCertFile à l'autorité de certification qui sert à vérifier l'autre extrémité. L'erreur est délibérément fatale. Sans elle, le client présenterait silencieusement un certificat auto-signé généré, avec une empreinte différente à chaque exécution.

VerifyCertificate est désormais appliqué. Auparavant, le résultat de la vérification était calculé puis ignoré : avec la vérification activée, n'importe quel certificat était accepté, y compris un certificat émis par une autorité non fiable. Une chaîne qui échoue met désormais fin à la poignée de main. VerifyCertificate vaut toujours False par défaut, la configuration par défaut est donc inchangée.

TsgcRTCPeerConnection n'est pas concerné. WebRTC authentifie l'autre extrémité par l'empreinte transportée dans le SDP, et non par une chaîne de certificats, et laisse VerifyCertificate désactivé. C'est la configuration WebRTC normale et elle continue de fonctionner exactement comme auparavant.

Exemple

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;

Retour aux propriétés