TsgcWebSocketClient › Eigenschaften › TLSOptions
Konfiguriert Zertifikate, TLS-Version, ALPN, IOHandler und weitere Details für sichere Verbindungen, die verwendet werden, wenn TLS aktiviert ist.
property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;
Preset=tlspCustom
Nur zugänglich, wenn TLS True ist. Zu den Untereigenschaften gehören RootCertFile, CertFile, KeyFile, Password, VerifyCertificate, VerifyDepth, Version (von tlsUndefined bis tls1_3), ALPNProtocols und IOHandler (iohOpenSSL, iohSChannel, iohAndroidTLS, iohAppleTLS oder iohNativeTLS). Unter Android verwendet iohAndroidTLS das plattformeigene native TLS (javax.net.ssl.SSLEngine) und unter iOS und macOS verwendet iohAppleTLS das native Apple-TLS, sodass keine OpenSSL-Bibliotheken bereitgestellt werden müssen; natives Plattform-TLS erfordert die Enterprise-Edition. OpenSSL-spezifische Einstellungen befinden sich unter OpenSSL_Options und SChannel-spezifische Einstellungen unter SChannel_Options.
VerifyCertificate steuert die Zertifikatsvalidierung für jeden IOHandler auf dieselbe Weise, einschließlich iohSChannel: Es ist standardmäßig auf False gesetzt, sodass ein Server, der ein selbstsigniertes, abgelaufenes oder für einen falschen Hostnamen ausgestelltes Zertifikat vorweist, ohne jede Warnung akzeptiert wird, bis die Eigenschaft auf True gesetzt wird. Bei SChannel erfolgt die Validierung dann anhand des Windows-Zertifikatspeichers; OnSChannelVerifyPeer ermöglicht es der Anwendung, die Kette zu prüfen oder ein Zertifikat zu akzeptieren, das andernfalls abgelehnt würde.
VerifyCertificate sagt nichts darüber aus, ob das Zertifikat seit seiner Ausstellung widerrufen wurde, sodass sich ein gestohlener Schlüssel, dessen Zertifikat widerrufen, aber noch nicht abgelaufen ist, weiterhin erfolgreich authentifiziert. Mit iohSChannel wird der Widerrufsstatus nur dann geprüft, wenn SChannel_Options.Revocation.Check auf einen anderen Wert als scrcDisabled (Standard) gesetzt ist: scrcEndCertificate prüft ausschließlich das Serverzertifikat, scrcChainExcludeRoot prüft es zusammen mit den Zwischenzertifikaten und scrcChain schließt das Stammzertifikat ein. Revocation.Timeout begrenzt den gesamten Abruf über CRL und OCSP (standardmäßig 5000 ms), sodass ein nicht erreichbarer Responder den Handshake nicht blockieren kann, Revocation.CacheOnly verwendet nur das, was Windows bereits zwischengespeichert hat, und greift nie auf das Netzwerk zu, und Revocation.IgnoreRevocationOffline sowie Revocation.IgnoreNoRevocationCheck (beide True) entscheiden, ob ein nicht erreichbarer Responder oder ein Zertifikat ohne veröffentlichte Widerrufsinformationen akzeptiert wird. Ein Zertifikat, dessen Widerruf bestätigt ist, wird immer abgelehnt. Siehe SChannel Certificate Revocation.
Preset wendet einen Satz sicherer Standardwerte in einer einzigen Zuweisung an. Mit tlspCustom (Standard) behält jede Option den manuell konfigurierten Wert, wodurch das bisherige Verhalten erhalten bleibt. Das Setzen von Preset := tlspSecureDefaults aktiviert die Zertifikatsprüfung (VerifyCertificate := True), hebt Version nur dann auf TLS 1.2 an, wenn sie auf tls1_0 oder tls1_1 gesetzt war (tlsUndefined bleibt unverändert, sodass TLS 1.3 verfügbar bleibt), setzt OpenSSL_Options.VersionMin und SChannel_Options.VersionMin auf tls1_2, wenn sie niedriger oder nicht definiert waren, aktiviert die Hostnamen-Prüfung des Serverzertifikats (OpenSSL-Hostnamen-Validierung über X509Checks) und aktiviert die SChannel-Widerrufsprüfung als scrcChainExcludeRoot. Einzelne Optionen können nach dem Anwenden des Presets weiterhin angepasst werden.
IOHandler akzeptiert außerdem iohNativeTLS, die in reinem Object Pascal geschriebene TLS-Engine des sgcCrypto-Packs, die TLS 1.3 und TLS 1.2 beherrscht. Sie lädt keine OpenSSL-Bibliothek und bietet bei TLS 1.3 die hybriden Post-Quanten-Schlüsselaustauschgruppen von RFC 10024 an, mit X25519MLKEM768 an erster Stelle, sodass ein Client, der sie auswählt, gegenüber jedem Server, der einen solchen unterstützt, einen Post-Quanten-Schlüsselaustausch aushandelt. Die 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.
Bei der nativen Engine ist Version die niedrigste zulässige Version, keine exakte Version wie bei iohOpenSSL. tlsUndefined (Standard) und tls1_2 handeln TLS 1.3 oder TLS 1.2 aus, tls1_3 handelt ausschließlich TLS 1.3 aus, und tls1_0 oder tls1_1 lösen beim Verbindungsaufbau einen Konfigurationsfehler aus, denn die Engine unterstützt ausschließlich TLS 1.2 und TLS 1.3. Für ausschließlich TLS 1.2 nennen Sie in NativeTLS_Options.CipherSuites nur TLS-1.2-Suites, etwa TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Die Engine vertraut den Vertrauensankern aus RootCertFile, und NativeTLS_Options.UseSystemRoots (False ist der Standard) fügt die Vertrauensanker hinzu, denen das Betriebssystem vertraut: den Windows-ROOT-Zertifikatspeicher, die Vertrauensanker von Security.framework unter macOS (mit /etc/ssl/cert.pem als Fallback), eine Auswertung der Zertifikatskette der Gegenstelle durch Security.framework unter iOS, das Conscrypt- oder /system/etc/security/cacerts-Verzeichnis unter Android, und unter Linux die erste gefundene CA-Bundle-Datei unter sechs Standardpfaden, beginnend mit /etc/ssl/certs/ca-certificates.crt. Wird kein Systemstamm gefunden, benötigt VerifyCertificate := True eine Root-Datei. CertFile kann auch eine .pfx- oder .p12-Datei sein, die mit Password geöffnet wird. Die Engine nimmt Sitzungen mit TLS-1.3- und TLS-1.2-Session-Tickets wieder auf, die in einem Sitzungscache der Komponente gehalten werden, sodass eine Wiederverbindung den vollständigen Handshake überspringt. NativeTLS_Options.SessionTickets (Standard True) schaltet dies ein, und die Wiederaufnahme bei TLS 1.2 setzt voraus, dass der Server das Extended Master Secret unterstützt. Sie sendet keine 0-RTT-Daten und löst OnSSLVerifyPeer nicht aus, das zum OpenSSL-Handler gehört. Um den Namen festzulegen, den das Zertifikat tragen muss, setzen Sie OpenSSL_Options.X509Checks.HostName oder IPAddress, die die native Engine ebenfalls liest. Siehe Native TLS.
oClient := TsgcWebSocketClient.Create(nil);
oClient.URL := 'wss://www.esegece.com:2053';
oClient.TLSOptions.Version := tls1_2;
oClient.TLSOptions.VerifyCertificate := true;
oClient.TLSOptions.RootCertFile := 'cacert.pem';
oClient.Active := true;