TsgcWebSocketProxyServer › Eigenschaften › SSLOptions
Enthält Zertifikatspfade, die TLS-Versionsauswahl und das OpenSSL-Tuning für den nachgelagerten TLS-Listener.
property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;
Version=tlsUndefined, VerifyCertificate=False
Stellen Sie das Zertifikatsmaterial vor der Aktivierung des Proxys bereit, wenn SSL True ist: RootCertFile, CertFile und KeyFile zeigen auf PEM-Dateien (verwenden Sie denselben Pfad für alle drei, wenn die Datei die vollständige Kette enthält), und Password ist nur erforderlich, wenn der private Schlüssel verschlüsselt ist. Setzen Sie VerifyCertificate auf True, um Client-Zertifikate anzufordern und zu validieren (die Unteroptionen FailIfNoCertificate und VerifyClientOnce verfeinern die Prüfung), wobei VerifyDepth die Kettenlänge steuert. Version wählt eine bestimmte TLS-Version (tls1_0, tls1_1, tls1_2, tls1_3) oder lässt die Aushandlung offen (tlsUndefined). Bei iohNativeTLS ist sie stattdessen die niedrigste zulässige Version, siehe unten. OpenSSL_Options stellt Low-Level-Stellgrößen bereit: APIVersion (oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), LibPath/LibPathCustom zum Lokalisieren der OpenSSL-Binärdateien, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin und X509Checks für die Hostname-/IP-Validierung. Diese Einstellungen gelten nur für die nachgelagerte Strecke; die vorgelagerte TLS-Strecke wird über Proxy.TLS aktiviert.
IOHandler wählt die TLS-Engine aus. iohOpenSSL ist der Standard und iohSChannel verwendet den Windows-Provider. iohNativeTLS wählt die in reinem Object Pascal geschriebene TLS-Engine des sgcCrypto-Packs, die TLS 1.3 und TLS 1.2 beherrscht: Es wird keine OpenSSL-Bibliothek geladen, und bei TLS 1.3 werden die hybriden Post-Quanten-Schlüsselaustauschgruppen von RFC 10024 angeboten, mit X25519MLKEM768 an erster Stelle. Ihre beiden Präferenzlisten sind NativeTLS_Options.Groups und NativeTLS_Options.CipherSuites, durch Doppelpunkte getrennt im OpenSSL-Stil, und eine leere Liste behält die Standardwerte der Engine bei. Die Engine läuft auf der klassischen Engine mit einem Thread pro Verbindung ebenso wie auf den IOCP- und EPOLL-Engines. iohAppleTLS und iohAndroidTLS sind reine Client-Handler: Ein Server mit einem von beiden löst eine Ausnahme aus, wenn Active auf True gesetzt wird, sofern OnSSLGetHandler nicht selbst einen Handler liefert. Verwenden Sie stattdessen iohNativeTLS, iohOpenSSL oder unter Windows iohSChannel.
Bei der nativen Engine ist Version die niedrigste zulässige Version, keine exakte Version wie bei iohOpenSSL. tlsUndefined (Standard) und tls1_2 akzeptieren TLS 1.3 und TLS 1.2, tls1_3 akzeptiert ausschließlich TLS 1.3, und tls1_0 oder tls1_1 lösen beim Start des Servers einen Konfigurationsfehler aus, denn die Engine unterstützt ausschließlich TLS 1.2 und TLS 1.3. Um ausschließlich TLS 1.2 zu akzeptieren, nennen Sie in NativeTLS_Options.CipherSuites nur TLS-1.2-Suites, etwa TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Die Engine validiert Client-Zertifikate anhand der Vertrauensanker aus RootCertFile, zuzüglich der Vertrauensanker, denen das Betriebssystem vertraut, wenn NativeTLS_Options.UseSystemRoots True ist (Standard ist False). Bei iohNativeTLS kann CertFile auch eine .pfx- oder .p12-Datei sein, die das Zertifikat, die Kette und den Schlüssel enthält und mit Password geöffnet wird. Die Engine nimmt Sitzungen mit TLS-1.3- und TLS-1.2-Session-Tickets wieder auf: NativeTLS_Options.SessionTickets (Standard True) schaltet dies ein, und NativeTLS_Options.TicketLifetime (Standard 7200 Sekunden) legt fest, wie lange ein Ticket verwendet werden kann. Die Wiederaufnahme bei TLS 1.2 setzt voraus, dass der Client das Extended Master Secret unterstützt. Sie akzeptiert kein 0-RTT, und sie löst OnSSLVerifyPeer nicht aus, das zum OpenSSL-Handler gehört. VerifyCertificate fordert vom Client ein Zertifikat an und validiert es, VerifyCertificate_Options.FailIfNoCertificate weist einen Client ab, der keines sendet, und VerifyClientOnce hat keine Wirkung, weil die Engine nie neu aushandelt. Siehe Native TLS.
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;