TsgcWebSocketServer › Eigenschappen › 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. 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.

VerifyCertificate zegt niets over de vraag of het clientcertificaat sinds de uitgifte is ingetrokken, dus een certificaat waarvan de sleutel is gestolen en waarvan het serienummer sindsdien is ingetrokken, opent nog steeds een sessie totdat het verloopt. Met IOHandler=iohSChannel wordt de intrekkingsstatus van het clientcertificaat alleen opgezocht wanneer SChannel_Options.Revocation.Check op iets anders dan scrcDisabled (de standaardwaarde) is ingesteld: scrcEndCertificate controleert alleen het clientcertificaat, scrcChainExcludeRoot controleert het samen met de tussenliggende certificaten, en scrcChain neemt het rootcertificaat mee. Revocation.Timeout begrenst het volledige ophalen van CRL- en OCSP-gegevens (standaard 5000 ms) zodat een onbereikbare responder de handshake niet kan blokkeren, Revocation.CacheOnly gebruikt alleen wat Windows al in de cache heeft en gaat nooit het netwerk op, en Revocation.IgnoreRevocationOffline en Revocation.IgnoreNoRevocationCheck (beide True) bepalen of een onbereikbare responder of een clientcertificaat dat geen intrekkingsinformatie publiceert wordt geaccepteerd. Een certificaat dat bevestigd ingetrokken is, wordt altijd geweigerd. Door Preset := tlspSecureDefaults in te stellen wordt de controle ingeschakeld als scrcChainExcludeRoot en blijven beide soft-fail-instellingen behouden, zodat een client die voorheen werd toegelaten nog steeds wordt toegelaten. Zie Server SSL | Intrekking van clientcertificaten in SChannel.

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 := TsgcWebSocketServer.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