TsgcWebSocketProxyServer › Properties › SSLOptions
Bevat certificaatpaden, TLS-versieselectie en OpenSSL-afstemming voor de downstream TLS-listener.
property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;
Version=tlsUndefined, VerifyCertificate=False
Geef het certificaatmateriaal op voordat u de proxy activeert wanneer SSL True is: RootCertFile, CertFile en KeyFile verwijzen naar PEM-bestanden (gebruik hetzelfde pad voor alle drie wanneer het bestand de volledige keten bevat), en Password is alleen vereist als de privésleutel versleuteld is. Stel VerifyCertificate in op True om clientcertificaten aan te vragen en te valideren (subopties FailIfNoCertificate en VerifyClientOnce verfijnen de controle) waarbij VerifyDepth de ketenlengte beheert. Version kiest een specifieke TLS-versie (tls1_0, tls1_1, tls1_2, tls1_3) of laat onderhandeling open (tlsUndefined). Met iohNativeTLS is dit in plaats daarvan de laagste toegestane versie, zie hieronder. OpenSSL_Options biedt knoppen op laag niveau: APIVersion (oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), LibPath/LibPathCustom voor het lokaliseren van de OpenSSL-binaire bestanden, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin en X509Checks voor hostnaam/IP-validatie. Deze instellingen gelden alleen voor het downstream-deel; het upstream TLS-deel wordt ingeschakeld via Proxy.TLS.
IOHandler selecteert de TLS-engine. iohOpenSSL is de standaardwaarde en iohSChannel gebruikt de Windows-provider. iohNativeTLS selecteert de pure Object Pascal TLS-engine van het sgcCrypto-pack, die TLS 1.3 en TLS 1.2 spreekt: er wordt geen OpenSSL-bibliotheek geladen, en bij TLS 1.3 worden de hybride post-quantum sleuteluitwisselingsgroepen van RFC 10024 aangeboden met X25519MLKEM768 als eerste. De twee voorkeurslijsten zijn NativeTLS_Options.Groups en NativeTLS_Options.CipherSuites, gescheiden door dubbele punten in de OpenSSL-stijl, en een lege lijst behoudt de standaardwaarden van de engine. De engine draait zowel op de klassieke engine met één thread per verbinding als op de IOCP- en EPOLL-engines. iohAppleTLS en iohAndroidTLS zijn client-only handlers: een server met een van beide geeft een uitzondering wanneer Active op True wordt gezet, tenzij OnSSLGetHandler een eigen handler levert. Gebruik in plaats daarvan iohNativeTLS, iohOpenSSL of, op Windows, iohSChannel.
Voor de native engine is Version de laagste toegestane versie, niet een exacte versie zoals bij iohOpenSSL. tlsUndefined (de standaardwaarde) en tls1_2 accepteren TLS 1.3 en TLS 1.2, tls1_3 accepteert uitsluitend TLS 1.3, en tls1_0 of tls1_1 geven een configuratiefout wanneer de server start, omdat de engine alleen TLS 1.2 en TLS 1.3 ondersteunt. Om uitsluitend TLS 1.2 te accepteren, geeft u alleen TLS 1.2-suites op, zoals TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, in NativeTLS_Options.CipherSuites. De engine valideert clientcertificaten aan de hand van de roots in RootCertFile, aangevuld met de roots die het besturingssysteem vertrouwt wanneer NativeTLS_Options.UseSystemRoots True is (standaard False). Met iohNativeTLS mag CertFile ook een .pfx- of .p12-bestand zijn met het certificaat, de keten en de sleutel, geopend met Password. De engine hervat sessies met TLS 1.3- en TLS 1.2-sessietickets: NativeTLS_Options.SessionTickets (standaard True) schakelt ze in en NativeTLS_Options.TicketLifetime (standaard 7200 seconden) bepaalt hoe lang een ticket gebruikt kan worden. TLS 1.2-hervatting vereist dat de client het extended master secret ondersteunt. Hij accepteert geen 0-RTT en genereert geen OnSSLVerifyPeer, dat bij de OpenSSL-handler hoort. VerifyCertificate vraagt de client om een certificaat en valideert dit, VerifyCertificate_Options.FailIfNoCertificate weigert een client die er geen verzendt, en VerifyClientOnce heeft geen effect omdat de engine nooit heronderhandelt. Zie 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;