TsgcTCPClient › Propiedades › TLSOptions

TLSOptions Propiedad

Configura certificados, versión TLS, ALPN, IOHandler y otros detalles de conexión segura utilizados cuando TLS está habilitado.

Sintaxis

property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;

Valor Predeterminado

—

Observaciones

Accesible solo cuando TLS es True. Las subpropiedades incluyen RootCertFile, CertFile, KeyFile, Password, VerifyCertificate, VerifyDepth, Version (desde tlsUndefined hasta tls1_3), ALPNProtocols y IOHandler (iohOpenSSL, iohSChannel, iohAndroidTLS, iohAppleTLS o iohNativeTLS). En Android, iohAndroidTLS utiliza el TLS nativo de la plataforma (javax.net.ssl.SSLEngine) y en iOS y macOS, iohAppleTLS utiliza el TLS nativo de Apple, por lo que no es necesario desplegar bibliotecas de OpenSSL; el TLS nativo de la plataforma requiere la edición Enterprise. La configuración específica de OpenSSL reside bajo OpenSSL_Options y la configuración específica de SChannel bajo SChannel_Options.

VerifyCertificate controla la validación del certificado de la misma manera para todos los IOHandler, incluido iohSChannel: su valor predeterminado es False, por lo que un servidor que presente un certificado autofirmado, caducado o con un nombre de host incorrecto se acepta sin ninguna advertencia hasta que se establece en True. Con SChannel, la validación se realiza entonces frente al almacén de certificados de Windows; OnSChannelVerifyPeer permite a la aplicación inspeccionar la cadena o aceptar un certificado que de otro modo sería rechazado.

VerifyCertificate no dice nada sobre si el certificado ha sido revocado desde que se emitió, por lo que una clave robada cuyo certificado fue revocado pero aún no ha caducado sigue autenticándose. Con iohSChannel, el estado de revocación se comprueba únicamente cuando SChannel_Options.Revocation.Check se establece en un valor distinto de scrcDisabled (el valor predeterminado): scrcEndCertificate comprueba solo el certificado del servidor, scrcChainExcludeRoot lo comprueba junto con los intermedios, y scrcChain incluye la raíz. Revocation.Timeout limita toda la obtención de CRL y OCSP (5000 ms de forma predeterminada) para que un respondedor inaccesible no pueda bloquear el protocolo de enlace, Revocation.CacheOnly utiliza únicamente lo que Windows ya tiene en caché y nunca accede a la red, y Revocation.IgnoreRevocationOffline y Revocation.IgnoreNoRevocationCheck (ambas True) deciden si se acepta un respondedor inaccesible o un certificado que no publica información de revocación. Un certificado confirmado como revocado siempre se rechaza. Establecer Preset := tlspSecureDefaults habilita la comprobación como scrcChainExcludeRoot. Consulte SChannel Certificate Revocation.

IOHandler también acepta iohNativeTLS, el motor TLS escrito en Object Pascal puro del paquete sgcCrypto, que habla TLS 1.3 y TLS 1.2. No carga ninguna biblioteca OpenSSL y en TLS 1.3 ofrece los grupos híbridos de intercambio de claves poscuántico de RFC 10024, con X25519MLKEM768 en primer lugar, de modo que un cliente que lo seleccione negocia un intercambio de claves poscuántico contra cualquier servidor que admita uno. Las dos listas de preferencia son NativeTLS_Options.Groups y NativeTLS_Options.CipherSuites, separadas por dos puntos al estilo de OpenSSL, y una lista vacía conserva los valores predeterminados del motor.

Para el motor nativo, Version es la versión mínima permitida, no una versión exacta como con iohOpenSSL. tlsUndefined (el valor predeterminado) y tls1_2 negocian TLS 1.3 o TLS 1.2, tls1_3 negocia únicamente TLS 1.3, y tls1_0 o tls1_1 generan un error de configuración al conectar, porque el motor solo admite TLS 1.2 y TLS 1.3. Para admitir solo TLS 1.2, indique únicamente conjuntos de cifrado TLS 1.2, como TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, en NativeTLS_Options.CipherSuites. El motor confía en las raíces de RootCertFile, y NativeTLS_Options.UseSystemRoots (False de forma predeterminada) añade las raíces en las que confía el sistema operativo: el almacén de certificados ROOT de Windows, los anclajes de Security.framework en macOS (con /etc/ssl/cert.pem como alternativa), una evaluación de la cadena del par mediante Security.framework en iOS, la carpeta Conscrypt o /system/etc/security/cacerts en Android, y en Linux el primer archivo de paquete de CA encontrado entre seis ubicaciones estándar, empezando por /etc/ssl/certs/ca-certificates.crt. Cuando no se encuentra ninguna raíz del sistema, VerifyCertificate := True necesita un archivo de raíces. CertFile también puede ser un archivo .pfx o .p12, abierto con Password. El motor reanuda sesiones con tickets de sesión de TLS 1.3 y TLS 1.2, guardados en una caché de sesión del componente, de modo que una reconexión omite el protocolo de enlace completo. NativeTLS_Options.SessionTickets (True de forma predeterminada) lo activa, y la reanudación en TLS 1.2 requiere que el servidor admita el extended master secret. No envía datos 0-RTT y no genera OnSSLVerifyPeer, que pertenece al IOHandler de OpenSSL. Para fijar el nombre que debe llevar el certificado, establezca OpenSSL_Options.X509Checks.HostName o IPAddress, que el motor nativo también lee. Consulte TLS nativo.

Ejemplo


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;

Volver a Propiedades