TsgcWebSocketClient › Propriétés › TLSOptions

TLSOptions Propriété

Configure les certificats, la version TLS, ALPN, IOHandler et d'autres détails de connexion sécurisée utilisés lorsque TLS est activé.

Syntaxe

property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;

Valeur par défaut

Preset=tlspCustom

Remarques

Accessible uniquement lorsque TLS vaut True. Les sous-propriétés incluent RootCertFile, CertFile, KeyFile, Password, VerifyCertificate, VerifyDepth, Version (de tlsUndefined à tls1_3), ALPNProtocols et IOHandler (iohOpenSSL, iohSChannel, iohAndroidTLS, iohAppleTLS ou iohNativeTLS). Sous Android, iohAndroidTLS utilise le TLS natif de la plateforme (javax.net.ssl.SSLEngine) et sous iOS et macOS, iohAppleTLS utilise le TLS natif Apple, de sorte qu'aucune bibliothèque OpenSSL n'a besoin d'être déployée ; le TLS natif de la plateforme nécessite l'édition Enterprise. Les paramètres spécifiques à OpenSSL se trouvent sous OpenSSL_Options et les paramètres spécifiques à SChannel sous SChannel_Options.

VerifyCertificate contrôle la validation du certificat de la même manière pour chaque IOHandler, y compris iohSChannel : elle vaut False par défaut, de sorte qu'un serveur présentant un certificat auto-signé, expiré ou dont le nom d'hôte est incorrect est accepté sans aucun avertissement tant qu'elle n'est pas définie sur True. Avec SChannel, la validation est alors effectuée par rapport au magasin de certificats Windows ; OnSChannelVerifyPeer permet à l'application d'inspecter la chaîne ou d'accepter un certificat qui serait autrement rejeté.

VerifyCertificate ne dit rien sur le fait que le certificat ait été révoqué ou non depuis sa délivrance, de sorte qu'une clé volée dont le certificat a été révoqué mais n'a pas encore expiré s'authentifie toujours. Avec iohSChannel, le statut de révocation n'est vérifié que lorsque SChannel_Options.Revocation.Check est défini sur une valeur autre que scrcDisabled (la valeur par défaut) : scrcEndCertificate vérifie uniquement le certificat du serveur, scrcChainExcludeRoot le vérifie avec les intermédiaires, et scrcChain inclut la racine. Revocation.Timeout limite l'ensemble de la récupération CRL et OCSP (5000 ms par défaut) afin qu'un répondeur inaccessible ne puisse pas bloquer le handshake, Revocation.CacheOnly utilise uniquement ce que Windows a déjà mis en cache et ne va jamais sur le réseau, et Revocation.IgnoreRevocationOffline et Revocation.IgnoreNoRevocationCheck (toutes deux True) décident si un répondeur inaccessible ou un certificat ne publiant aucune information de révocation est accepté. Un certificat confirmé révoqué est toujours rejeté. Voir SChannel Certificate Revocation.

Preset applique un ensemble de valeurs par défaut sécurisées en une seule affectation. Avec tlspCustom (valeur par défaut), chaque option conserve la valeur que vous configurez manuellement, préservant le comportement antérieur. Définir Preset := tlspSecureDefaults active la vérification du certificat (VerifyCertificate := True), élève Version à TLS 1.2 uniquement lorsqu'elle était réglée sur tls1_0 ou tls1_1 (tlsUndefined reste inchangée, de sorte que TLS 1.3 demeure disponible), définit OpenSSL_Options.VersionMin et SChannel_Options.VersionMin sur tls1_2 lorsqu'elles étaient inférieures ou non définies, active le contrôle du nom d'hôte du certificat du serveur (validation du nom d'hôte OpenSSL X509Checks) et active la vérification de révocation SChannel en tant que scrcChainExcludeRoot. Les options individuelles peuvent toujours être ajustées après l'application du preset.

IOHandler accepte également iohNativeTLS, le moteur TLS écrit en Object Pascal pur du pack sgcCrypto, qui parle TLS 1.3 et TLS 1.2. Il ne charge aucune bibliothèque OpenSSL et, en TLS 1.3, propose les groupes d'échange de clés hybrides post-quantiques de la RFC 10024, avec X25519MLKEM768 en premier, de sorte qu'un client qui le sélectionne négocie un échange de clés post-quantique avec tout serveur qui en prend un en charge. Les deux listes de préférence sont NativeTLS_Options.Groups et NativeTLS_Options.CipherSuites, séparées par des deux-points dans le style OpenSSL, et une liste vide conserve les valeurs par défaut du moteur.

Pour le moteur natif, Version est la version minimale autorisée, et non une version exacte comme avec iohOpenSSL. tlsUndefined (valeur par défaut) et tls1_2 négocient TLS 1.3 ou TLS 1.2, tls1_3 ne négocie que TLS 1.3, et tls1_0 ou tls1_1 déclenchent une erreur de configuration à la connexion, car le moteur ne prend en charge que TLS 1.2 et TLS 1.3. Pour n'accepter que TLS 1.2, ne nommez que des suites TLS 1.2, comme TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, dans NativeTLS_Options.CipherSuites. Le moteur fait confiance aux racines de RootCertFile, et NativeTLS_Options.UseSystemRoots (False par défaut) ajoute les racines auxquelles le système d'exploitation fait confiance : le magasin de certificats ROOT de Windows, les ancres de Security.framework sous macOS (avec /etc/ssl/cert.pem en repli), une évaluation de la chaîne du pair par Security.framework sous iOS, le dossier Conscrypt ou /system/etc/security/cacerts sous Android, et sous Linux le premier fichier de racines CA trouvé parmi six emplacements standard, en commençant par /etc/ssl/certs/ca-certificates.crt. Lorsqu'aucune racine système n'est trouvée, VerifyCertificate := True exige un fichier de racines. CertFile peut aussi être un fichier .pfx ou .p12, ouvert avec Password. Le moteur reprend les sessions avec des tickets de session TLS 1.3 et TLS 1.2, conservés dans un cache de session du composant, de sorte qu'une reconnexion évite le handshake complet. NativeTLS_Options.SessionTickets (True par défaut) active ceci, et la reprise TLS 1.2 nécessite que le serveur prenne en charge le secret maître étendu. Il n'envoie pas de données 0-RTT et ne déclenche pas OnSSLVerifyPeer, qui appartient au gestionnaire OpenSSL. Pour épingler le nom que le certificat doit porter, définissez OpenSSL_Options.X509Checks.HostName ou IPAddress, que le moteur natif lit également. Voir TLS natif.

Exemple


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;

Retour aux propriétés