TsgcWebSocketProxyServer › Properties › SSLOptions
Contient les chemins de certificat, la sélection de version TLS et le réglage OpenSSL pour l'écouteur TLS en aval.
property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;
Version=tlsUndefined, VerifyCertificate=False
Fournissez le matériel de certificat avant d'activer le proxy lorsque SSL est True : RootCertFile, CertFile et KeyFile pointent vers des fichiers PEM (utilisez le même chemin pour les trois si le fichier contient la chaîne complète), et Password est requis uniquement si la clé privée est chiffrée. Définissez VerifyCertificate à True pour demander et valider les certificats clients (les sous-options FailIfNoCertificate et VerifyClientOnce affinent le contrôle) avec VerifyDepth contrôlant la longueur de la chaîne. Version sélectionne une version TLS spécifique (tls1_0, tls1_1, tls1_2, tls1_3) ou laisse la négociation ouverte (tlsUndefined). Avec iohNativeTLS, il s'agit plutôt de la version minimale autorisée, voir plus bas. OpenSSL_Options expose des réglages de bas niveau : APIVersion (oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), LibPath/LibPathCustom pour localiser les binaires OpenSSL, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin et X509Checks pour la validation du nom d'hôte/IP. Ces paramètres s'appliquent uniquement au tronçon aval ; le tronçon TLS amont est activé via Proxy.TLS.
IOHandler sélectionne le moteur TLS. iohOpenSSL est la valeur par défaut et iohSChannel utilise le fournisseur Windows. iohNativeTLS sélectionne le moteur TLS écrit en Object Pascal pur du pack sgcCrypto, qui parle TLS 1.3 et TLS 1.2 : aucune bibliothèque OpenSSL n'est chargée, et, en TLS 1.3, les groupes d'échange de clés hybrides post-quantiques de la RFC 10024 sont proposés avec X25519MLKEM768 en premier. Ses 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. Le moteur fonctionne aussi bien sur le moteur classique à un thread par connexion que sur les moteurs IOCP et EPOLL. iohAppleTLS et iohAndroidTLS sont des gestionnaires réservés au client : un serveur qui en utilise un déclenche une exception quand Active passe à True, sauf si OnSSLGetHandler fournit son propre gestionnaire. Utilisez iohNativeTLS, iohOpenSSL ou, sous Windows, iohSChannel à la place.
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 acceptent TLS 1.3 et TLS 1.2, tls1_3 n'accepte que TLS 1.3, et tls1_0 ou tls1_1 déclenchent une erreur de configuration au démarrage du proxy, 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 valide les certificats client par rapport aux racines de RootCertFile, plus les racines auxquelles le système d'exploitation fait confiance lorsque NativeTLS_Options.UseSystemRoots est à True (False par défaut). Avec iohNativeTLS, CertFile peut aussi être un fichier .pfx ou .p12 contenant le certificat, la chaîne et la clé, ouvert avec Password. Le moteur reprend les sessions avec des tickets de session TLS 1.3 et TLS 1.2 : NativeTLS_Options.SessionTickets (True par défaut) les active et NativeTLS_Options.TicketLifetime (7200 secondes par défaut) fixe la durée d'utilisation d'un ticket. La reprise TLS 1.2 nécessite que le client prenne en charge le secret maître étendu. Il n'accepte pas le 0-RTT et ne déclenche pas OnSSLVerifyPeer, qui appartient au gestionnaire OpenSSL. VerifyCertificate demande un certificat au client et le valide, VerifyCertificate_Options.FailIfNoCertificate refuse un client qui n'en envoie aucun, et VerifyClientOnce n'a aucun effet car le moteur ne renégocie jamais. Voir TLS natif.
oProxy := TsgcWebSocketProxyServer.Create(nil);
oProxy.SSL := true;
oProxy.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.Version := tls1_3;
oProxy.SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
oProxy.SSLOptions.Port := 443;
oProxy.Proxy.Host := 'upstream.example.com';
oProxy.Proxy.Port := 8080;
oProxy.Active := true;