TsgcTCPClient › Propriedades › TLSOptions

TLSOptions Property

Configura certificados, versão de TLS, ALPN, IOHandler e outros detalhes de conexão segura usados quando o TLS está habilitado.

Sintaxe

property TLSOptions: TsgcWSTLS_Options read FTLSOptions write SetTLSOptions;

Valor Padrão

—

Observações

Acessível somente quando TLS é True. As subpropriedades incluem RootCertFile, CertFile, KeyFile, Password, VerifyCertificate, VerifyDepth, Version (de tlsUndefined até tls1_3), ALPNProtocols e IOHandler (iohOpenSSL, iohSChannel, iohAndroidTLS, iohAppleTLS ou iohNativeTLS). No Android, iohAndroidTLS usa o TLS nativo da plataforma (javax.net.ssl.SSLEngine) e no iOS e macOS, iohAppleTLS usa o TLS nativo da Apple, portanto nenhuma biblioteca OpenSSL precisa ser implantada; o TLS nativo da plataforma requer a edição Enterprise. As configurações específicas do OpenSSL ficam em OpenSSL_Options e as configurações específicas do SChannel em SChannel_Options.

VerifyCertificate controla a validação de certificado da mesma forma para todos os IOHandler, incluindo iohSChannel: o padrão é False, portanto um servidor que apresenta um certificado autoassinado, expirado ou com host incorreto é aceito sem nenhum aviso até que seja definido como True. Com o SChannel, a validação é então realizada em relação ao armazenamento de certificados do Windows; OnSChannelVerifyPeer permite que a aplicação inspecione a cadeia ou aceite um certificado que de outra forma seria rejeitado.

VerifyCertificate não diz nada sobre se o certificado foi revogado desde que foi emitido, portanto uma chave roubada cujo certificado foi revogado, mas ainda não expirou, continua se autenticando. Com iohSChannel, o status de revogação só é verificado quando SChannel_Options.Revocation.Check está definido como algo diferente de scrcDisabled (o padrão): scrcEndCertificate verifica somente o certificado do servidor, scrcChainExcludeRoot o verifica junto com os intermediários e scrcChain inclui a raiz. Revocation.Timeout limita toda a obtenção de CRL e OCSP (5000 ms por padrão) para que um respondedor inacessível não possa travar o handshake, Revocation.CacheOnly usa somente o que o Windows já armazenou em cache e nunca vai à rede, e Revocation.IgnoreRevocationOffline e Revocation.IgnoreNoRevocationCheck (ambos True) decidem se um respondedor inacessível ou um certificado que não publica informações de revogação é aceito. Um certificado comprovadamente revogado é sempre rejeitado. Definir Preset := tlspSecureDefaults habilita a verificação como scrcChainExcludeRoot. Consulte SChannel Certificate Revocation.

IOHandler também aceita iohNativeTLS, o mecanismo TLS em Object Pascal puro do pacote sgcCrypto, que fala TLS 1.3 e TLS 1.2. Ele não carrega nenhuma biblioteca OpenSSL e, no TLS 1.3, oferece os grupos híbridos de troca de chaves pós-quântica da RFC 10024, com X25519MLKEM768 em primeiro lugar, de modo que um cliente que o selecione negocia uma troca de chaves pós-quântica contra qualquer servidor que suporte uma. As duas listas de preferência são NativeTLS_Options.Groups e NativeTLS_Options.CipherSuites, separadas por dois-pontos no estilo do OpenSSL, e uma lista vazia mantém os padrões do mecanismo.

Para o mecanismo nativo, Version é a versão mínima permitida, não uma versão exata como ocorre com iohOpenSSL. tlsUndefined (o padrão) e tls1_2 negociam TLS 1.3 ou TLS 1.2, tls1_3 negocia apenas TLS 1.3, e tls1_0 ou tls1_1 geram um erro de configuração ao conectar, porque o mecanismo aceita apenas TLS 1.2 e TLS 1.3. Para usar apenas TLS 1.2, informe somente conjuntos de cifras TLS 1.2, como TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, em NativeTLS_Options.CipherSuites. O mecanismo confia nas raízes de RootCertFile, e NativeTLS_Options.UseSystemRoots (False por padrão) adiciona as raízes em que o sistema operacional confia: o armazenamento de certificados ROOT do Windows, os certificados âncora do Security.framework no macOS (com /etc/ssl/cert.pem como alternativa), uma avaliação da cadeia do peer pelo Security.framework no iOS, a pasta do Conscrypt ou /system/etc/security/cacerts no Android, e no Linux o primeiro arquivo de pacote de CAs encontrado entre seis locais padrão, começando por /etc/ssl/certs/ca-certificates.crt. Quando nenhuma raiz do sistema é encontrada, VerifyCertificate := True precisa de um arquivo de raízes. CertFile também pode ser um arquivo .pfx ou .p12, aberto com Password. O mecanismo retoma sessões com tíquetes de sessão de TLS 1.3 e TLS 1.2, mantidos em um cache de sessão do componente, de modo que uma reconexão pula o handshake completo. NativeTLS_Options.SessionTickets (True por padrão) ativa isso, e a retomada em TLS 1.2 exige que o servidor suporte o extended master secret. Ele não envia dados 0-RTT e não dispara OnSSLVerifyPeer, que pertence ao handler do OpenSSL. Para fixar o nome que o certificado deve carregar, defina OpenSSL_Options.X509Checks.HostName ou IPAddress, que o mecanismo nativo também lê. Consulte TLS Nativo.

Exemplo


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;

Voltar para Propriedades