TsgcWebSocketHTTPServer › Propriétés › SSLOptions

SSLOptions Propriété

Contient les chemins de certificat, la sélection de version TLS et le réglage OpenSSL pour l'écouteur TLS.

Syntaxe

property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;

Valeur par défaut

Version=tlsUndefined, VerifyCertificate=False

Remarques

Fournissez le matériel de certificat avant d'activer le serveur 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 n'est requis que si la clé privée est chiffrée. Password est également lu par l'écouteur HTTP/3 activé via HTTP3Options, le même fichier de clé chiffrée sert donc les deux écouteurs. Définissez VerifyCertificate sur True pour demander et valider les certificats client (les sous-options FailIfNoCertificate et VerifyClientOnce affinent la vérification) 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.

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 serveur, 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.

AllowPlainText (False par défaut) permet au listener TLS d'accepter aussi les connexions HTTP et WebSocket en clair sur le même port. Le serveur examine le premier octet de chaque nouvelle connexion : $16 (enregistrement de handshake TLS) signifie TLS, tout autre octet est traité en clair, et lorsqu'aucun octet n'arrive avant PlainTextTimeout (en millisecondes, 5000 par défaut) la connexion est traitée comme TLS. PlainTextPolicy décide du sort d'une connexion en clair : ptpServe (valeur par défaut) traite la requête normalement, ptpRedirect répond 308 Permanent Redirect vers https://<Host><path> en conservant la méthode et le corps (400 Bad Request lorsque la requête n'a pas d'en-tête Host), et ptpReject répond 400 Bad Request et ferme la connexion. La propriété de connexion TLS de TsgcWSConnectionServer indique si une connexion utilise TLS. Ces options fonctionnent avec l'IOHandler Indy par défaut et avec les IOHandlers IOCP et EPOLL. Dans OnCommandGet, la méthode serveur IsTLS(AContext) indique si la requête utilise TLS. Voir TLS et HTTP en clair sur le même port.

Exemple


oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SSL := true;
oServer.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.Version := tls1_3;
oServer.SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Active := true;

Retour aux propriétés