TsgcTCPClient › Properties › TLSOptions
Configura certificati, versione TLS, ALPN, IOHandler e altri dettagli di connessione sicura utilizzati quando TLS è abilitato.
property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;
—
Accessibile solo quando TLS è True. Le sotto-proprietà includono RootCertFile, CertFile, KeyFile, Password, VerifyCertificate, VerifyDepth, Version (da tlsUndefined fino a tls1_3), ALPNProtocols e IOHandler (iohOpenSSL, iohSChannel, iohAndroidTLS, iohAppleTLS o iohNativeTLS). Su Android, iohAndroidTLS utilizza il TLS nativo della piattaforma (javax.net.ssl.SSLEngine) e su iOS e macOS, iohAppleTLS utilizza il TLS nativo di Apple, quindi non è necessario distribuire alcuna libreria OpenSSL; il TLS nativo della piattaforma richiede l'edizione Enterprise. Le impostazioni specifiche di OpenSSL si trovano in OpenSSL_Options e quelle specifiche di SChannel in SChannel_Options.
VerifyCertificate controlla la verifica del certificato allo stesso modo per ogni IOHandler, incluso iohSChannel: il valore predefinito è False, quindi un server che presenta un certificato autofirmato, scaduto o con un hostname errato viene accettato senza alcun avviso finché non viene impostato su True. Con SChannel, la verifica viene quindi eseguita rispetto allo store di certificati di Windows; OnSChannelVerifyPeer consente all'applicazione di ispezionare la catena o di accettare un certificato che altrimenti verrebbe rifiutato.
VerifyCertificate non dice nulla sul fatto che il certificato sia stato revocato dopo la sua emissione, quindi una chiave rubata il cui certificato è stato revocato ma non è ancora scaduto continua ad autenticarsi. Con iohSChannel, lo stato di revoca viene verificato solo quando SChannel_Options.Revocation.Check è impostato su un valore diverso da scrcDisabled (il predefinito): scrcEndCertificate verifica solo il certificato del server, scrcChainExcludeRoot lo verifica insieme ai certificati intermedi e scrcChain include anche la radice. Revocation.Timeout limita l'intero recupero di CRL e OCSP (5000 ms per impostazione predefinita) in modo che un responder irraggiungibile non possa bloccare l'handshake, Revocation.CacheOnly utilizza solo ciò che Windows ha già presente nella cache e non accede mai alla rete, e Revocation.IgnoreRevocationOffline e Revocation.IgnoreNoRevocationCheck (entrambe True) decidono se accettare un responder irraggiungibile o un certificato che non pubblica informazioni di revoca. Un certificato confermato revocato viene sempre rifiutato. Impostando Preset := tlspSecureDefaults si abilita il controllo come scrcChainExcludeRoot. Vedere SChannel Certificate Revocation.
IOHandler accetta anche iohNativeTLS, il motore TLS scritto interamente in Object Pascal del pack sgcCrypto, che parla TLS 1.3 e TLS 1.2. Non carica alcuna libreria OpenSSL e in TLS 1.3 offre i gruppi ibridi di scambio di chiavi post-quantistico della RFC 10024, con X25519MLKEM768 al primo posto, quindi un client che lo seleziona negozia uno scambio di chiavi post-quantistico con qualsiasi server che ne supporti uno. Le due liste di preferenza sono NativeTLS_Options.Groups e NativeTLS_Options.CipherSuites, separate da due punti nello stile OpenSSL, e una lista vuota mantiene i valori predefiniti del motore.
Per il motore nativo, Version è la versione minima consentita, non una versione esatta come con iohOpenSSL. tlsUndefined (il valore predefinito) e tls1_2 negoziano TLS 1.3 o TLS 1.2, tls1_3 negozia solo TLS 1.3, e tls1_0 o tls1_1 generano un errore di configurazione alla connessione, perché il motore supporta solo TLS 1.2 e TLS 1.3. Per il solo TLS 1.2, indicare solo suite TLS 1.2, come TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, in NativeTLS_Options.CipherSuites. Il motore si fida delle radici in RootCertFile, e NativeTLS_Options.UseSystemRoots (False per impostazione predefinita) aggiunge le radici di cui si fida il sistema operativo: lo store di certificati ROOT di Windows, i certificati di ancoraggio di Security.framework su macOS (con /etc/ssl/cert.pem come ripiego), una valutazione della catena del peer tramite Security.framework su iOS, la cartella Conscrypt o /system/etc/security/cacerts su Android, e su Linux il primo file di bundle CA trovato tra sei posizioni standard, a partire da /etc/ssl/certs/ca-certificates.crt. Quando non si trova alcuna radice di sistema, VerifyCertificate := True richiede un file di radici. CertFile può anche essere un file .pfx o .p12, aperto con Password. Il motore riprende le sessioni con i session ticket di TLS 1.3 e TLS 1.2, conservati in una cache di sessione del componente, così una riconnessione salta l'handshake completo. NativeTLS_Options.SessionTickets (True per impostazione predefinita) attiva questo comportamento, e la ripresa in TLS 1.2 richiede che il server supporti l'extended master secret. Non invia dati 0-RTT e non genera OnSSLVerifyPeer, che appartiene all'handler OpenSSL. Per fissare il nome che il certificato deve riportare, impostare OpenSSL_Options.X509Checks.HostName o IPAddress, che anche il motore nativo legge. Vedere TLS nativo.
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;