TsgcTCPClient › Właściwości › TLSOptions
Konfiguruje certyfikaty, wersję TLS, ALPN, IOHandler i inne szczegóły bezpiecznego połączenia używane gdy TLS jest włączony.
property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;
—
Dostępne tylko wtedy, gdy TLS ma wartość True. Podwłaściwości obejmują RootCertFile, CertFile, KeyFile, Password, VerifyCertificate, VerifyDepth, Version (od tlsUndefined po tls1_3), ALPNProtocols oraz IOHandler (iohOpenSSL, iohSChannel, iohAndroidTLS, iohAppleTLS lub iohNativeTLS). W systemie Android iohAndroidTLS używa natywnego TLS platformy (javax.net.ssl.SSLEngine), a w iOS i macOS iohAppleTLS używa natywnego TLS firmy Apple, dzięki czemu nie trzeba wdrażać żadnych bibliotek OpenSSL; natywny TLS platformy wymaga edycji Enterprise. Ustawienia specyficzne dla OpenSSL znajdują się w OpenSSL_Options, a ustawienia specyficzne dla SChannel w SChannel_Options.
VerifyCertificate kontroluje walidację certyfikatu w ten sam sposób dla każdego IOHandler, w tym iohSChannel: domyślnie ma wartość False, dlatego serwer prezentujący certyfikat samopodpisany, wygasły lub z niezgodną nazwą hosta jest akceptowany bez żadnego ostrzeżenia, dopóki nie zostanie ustawiona wartość True. W przypadku SChannel walidacja jest następnie przeprowadzana w oparciu o magazyn certyfikatów systemu Windows; zdarzenie OnSChannelVerifyPeer pozwala aplikacji sprawdzić łańcuch certyfikatów lub zaakceptować certyfikat, który w innym przypadku zostałby odrzucony.
VerifyCertificate nie mówi nic o tym, czy certyfikat został unieważniony od chwili jego wystawienia, dlatego skradziony klucz, którego certyfikat unieważniono, ale który jeszcze nie wygasł, nadal się uwierzytelnia. W przypadku iohSChannel stan unieważnienia jest sprawdzany tylko wtedy, gdy SChannel_Options.Revocation.Check ma wartość inną niż scrcDisabled (domyślna): scrcEndCertificate sprawdza wyłącznie certyfikat serwera, scrcChainExcludeRoot sprawdza go razem z certyfikatami pośrednimi, a scrcChain obejmuje także certyfikat główny. Revocation.Timeout ogranicza całe pobieranie informacji CRL i OCSP (domyślnie 5000 ms), aby nieosiągalny responder nie mógł zablokować uzgadniania, Revocation.CacheOnly używa wyłącznie tego, co system Windows ma już w pamięci podręcznej, i nigdy nie sięga do sieci, a Revocation.IgnoreRevocationOffline oraz Revocation.IgnoreNoRevocationCheck (obie True) decydują, czy nieosiągalny responder lub certyfikat niepublikujący informacji o unieważnieniu są akceptowane. Certyfikat potwierdzony jako unieważniony jest zawsze odrzucany. Ustawienie Preset := tlspSecureDefaults włącza to sprawdzanie jako scrcChainExcludeRoot. Zobacz SChannel Certificate Revocation.
IOHandler przyjmuje również wartość iohNativeTLS, czyli silnik TLS napisany w całości w Object Pascal, wchodzący w skład pakietu sgcCrypto, który obsługuje TLS 1.3 i TLS 1.2. Nie ładuje on żadnej biblioteki OpenSSL i w TLS 1.3 oferuje hybrydowe postkwantowe grupy wymiany kluczy z RFC 10024, z X25519MLKEM768 na pierwszym miejscu, dzięki czemu klient, który go wybierze, negocjuje postkwantową wymianę kluczy z każdym serwerem, który ją obsługuje. Dwie listy preferencji to NativeTLS_Options.Groups i NativeTLS_Options.CipherSuites, rozdzielane dwukropkami w stylu OpenSSL, a pusta lista pozostawia domyślne ustawienia silnika.
Dla silnika natywnego Version to najniższa dozwolona wersja, a nie dokładna wersja, jak w przypadku iohOpenSSL. tlsUndefined (wartość domyślna) i tls1_2 negocjują TLS 1.3 lub TLS 1.2, tls1_3 negocjuje wyłącznie TLS 1.3, a tls1_0 lub tls1_1 zgłaszają błąd konfiguracji przy połączeniu, ponieważ silnik obsługuje wyłącznie TLS 1.2 i TLS 1.3. Dla samego TLS 1.2 należy podać w NativeTLS_Options.CipherSuites tylko zestawy szyfrów TLS 1.2, na przykład TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Silnik ufa certyfikatom głównym z RootCertFile, a NativeTLS_Options.UseSystemRoots (domyślnie False) dodaje certyfikaty, którym ufa system operacyjny: systemowy magazyn certyfikatów Windows ROOT, certyfikaty zakotwiczenia (anchor) z Security.framework na macOS (z /etc/ssl/cert.pem jako rezerwą), ocena łańcucha drugiej strony przez Security.framework na iOS, folder Conscrypt albo /system/etc/security/cacerts na Androidzie, a w systemie Linux pierwszy znaleziony plik pakietu CA spośród sześciu standardowych lokalizacji, poczynając od /etc/ssl/certs/ca-certificates.crt. Gdy nie znaleziono żadnego certyfikatu systemowego, VerifyCertificate := True wymaga pliku z certyfikatami głównymi. CertFile może być też plikiem .pfx lub .p12, otwieranym za pomocą Password. Silnik wznawia sesje za pomocą biletów sesji TLS 1.3 i TLS 1.2, przechowywanych w pamięci podręcznej sesji komponentu, dzięki czemu ponowne połączenie pomija pełne uzgadnianie. NativeTLS_Options.SessionTickets (domyślnie True) włącza to, a wznowienie w TLS 1.2 wymaga, aby serwer obsługiwał rozszerzony sekret główny. Nie wysyła danych 0-RTT i nie zgłasza zdarzenia OnSSLVerifyPeer, które należy do handlera OpenSSL. Aby wskazać nazwę, którą musi nieść certyfikat, ustaw OpenSSL_Options.X509Checks.HostName albo IPAddress, ponieważ silnik natywny również odczytuje te wartości. Zobacz Natywny TLS.
oTCP := TsgcTCPClient.Create(nil);
oTCP.Host := 'www.esegece.com';
oTCP.Port := 2053;
oTCP.TLS := true;
oTCP.TLSOptions.Version := tls1_2;
oTCP.TLSOptions.VerifyCertificate := true;
oTCP.TLSOptions.RootCertFile := 'cacert.pem';
oTCP.Active := true;