TsgcWebSocketHTTPServer › Properties › SSLOptions

SSLOptions Eigenschap

Bevat certificaatpaden, TLS-versieselectie en OpenSSL-afstemming voor de TLS-luisteraar.

Syntaxis

property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;

Standaardwaarde

Version=tlsUndefined, VerifyCertificate=False

Opmerkingen

Lever het certificaatmateriaal aan voordat u de server 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 private key versleuteld is. Password wordt ook gelezen door de HTTP/3-listener die via HTTP3Options wordt ingeschakeld, zodat hetzelfde versleutelde sleutelbestand beide listeners bedient. Stel VerifyCertificate in op True om clientcertificaten op te vragen en te valideren (de subopties FailIfNoCertificate en VerifyClientOnce verfijnen de controle) waarbij VerifyDepth de ketenlengte bepaalt. Version kiest een specifieke TLS-versie (tls1_0, tls1_1, tls1_2, tls1_3) of laat de onderhandeling open (tlsUndefined). Met iohNativeTLS is dit in plaats daarvan de laagste toegestane versie, zie hieronder. OpenSSL_Options stelt low-level-instellingen beschikbaar: APIVersion (oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), LibPath/LibPathCustom voor het lokaliseren van de OpenSSL-binaries, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin en X509Checks voor hostnaam-/IP-validatie.

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.

AllowPlainText (standaard False) laat de TLS-listener ook gewone HTTP- en WebSocket-verbindingen accepteren op dezelfde poort. De server bekijkt de eerste byte van elke nieuwe verbinding: $16 (TLS handshake record) betekent TLS, al het andere wordt als gewone tekst afgehandeld, en als er binnen PlainTextTimeout (milliseconden, standaard 5000) geen byte binnenkomt, wordt de verbinding als TLS behandeld. PlainTextPolicy bepaalt wat er met een gewone verbinding gebeurt: ptpServe (de standaard) handelt het verzoek normaal af, ptpRedirect antwoordt met 308 Permanent Redirect naar https://<Host><path>, waarbij de methode en de body behouden blijven (400 Bad Request als het verzoek geen Host-header heeft), en ptpReject antwoordt met 400 Bad Request en sluit de verbinding. De verbindingseigenschap TLS van TsgcWSConnectionServer geeft aan of een verbinding TLS gebruikt. Deze opties werken met de standaard Indy IOHandler en met de IOCP- en EPOLL-IOHandlers. In OnCommandGet geeft de servermethode IsTLS(AContext) aan of het verzoek TLS gebruikt. Zie TLS en gewone HTTP op dezelfde poort.

Voorbeeld


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;

Terug naar Properties