TsgcWebSocketHTTPServer › Propriedades › SSLOptions

SSLOptions Propriedade

Mantém os caminhos de certificado, a seleção de versão TLS e o ajuste OpenSSL para o listener TLS.

Sintaxe

property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;

Valor Padrão

Version=tlsUndefined, VerifyCertificate=False

Observações

Forneça o material de certificado antes de ativar o servidor quando SSL for True: RootCertFile, CertFile e KeyFile apontam para arquivos PEM (utilize o mesmo caminho para os três quando o arquivo contiver a cadeia completa), e Password é necessária apenas se a chave privada estiver criptografada. Password também é lida pelo listener HTTP/3 habilitado por meio de HTTP3Options, portanto o mesmo arquivo de chave criptografada atende aos dois listeners. Defina VerifyCertificate como True para solicitar e validar certificados de cliente (as subopções FailIfNoCertificate e VerifyClientOnce refinam a verificação) com VerifyDepth controlando o comprimento da cadeia. Version seleciona uma versão TLS específica (tls1_0, tls1_1, tls1_2, tls1_3) ou deixa a negociação aberta (tlsUndefined). Com iohNativeTLS, é a versão mínima permitida; veja abaixo. OpenSSL_Options expõe ajustes de baixo nível: APIVersion (oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), LibPath/LibPathCustom para localizar os binários OpenSSL, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin e X509Checks para validação de hostname/IP.

IOHandler seleciona o mecanismo TLS. iohOpenSSL é o padrão e iohSChannel usa o provedor do Windows. iohNativeTLS seleciona o mecanismo TLS em Object Pascal puro do pacote sgcCrypto, que fala TLS 1.3 e TLS 1.2: nenhuma biblioteca OpenSSL é carregada, e no TLS 1.3 os grupos híbridos de troca de chaves pós-quântica da RFC 10024 são oferecidos com X25519MLKEM768 em primeiro lugar. Suas 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. O mecanismo funciona igualmente no modelo clássico de uma thread por conexão e nos mecanismos IOCP e EPOLL. iohAppleTLS e iohAndroidTLS são handlers somente de cliente: um servidor com um deles gera uma exceção quando Active é definido como True, a menos que OnSSLGetHandler forneça seu próprio handler. Use iohNativeTLS, iohOpenSSL ou, no Windows, iohSChannel.

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 aceitam TLS 1.3 e TLS 1.2, tls1_3 aceita apenas TLS 1.3, e tls1_0 ou tls1_1 geram um erro de configuração quando o servidor inicia, porque o mecanismo aceita apenas TLS 1.2 e TLS 1.3. Para aceitar 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 valida os certificados de cliente em relação às raízes de RootCertFile, além das raízes em que o sistema operacional confia quando NativeTLS_Options.UseSystemRoots é True (False por padrão). Com iohNativeTLS, CertFile também pode ser um arquivo .pfx ou .p12 contendo o certificado, a cadeia e a chave, aberto com Password. O mecanismo retoma sessões com tíquetes de sessão de TLS 1.3 e TLS 1.2: NativeTLS_Options.SessionTickets (True por padrão) os ativa, e NativeTLS_Options.TicketLifetime (7200 segundos por padrão) define por quanto tempo um tíquete pode ser usado. A retomada em TLS 1.2 exige que o cliente suporte o extended master secret. Ele não aceita 0-RTT e não dispara OnSSLVerifyPeer, que pertence ao handler do OpenSSL. VerifyCertificate pede um certificado ao cliente e o valida, VerifyCertificate_Options.FailIfNoCertificate recusa um cliente que não envia nenhum, e VerifyClientOnce não tem efeito porque o mecanismo nunca renegocia. Consulte TLS Nativo.

AllowPlainText (False por padrão) permite que o listener TLS também aceite conexões HTTP e WebSocket simples na mesma porta. O servidor inspeciona o primeiro byte de cada nova conexão: $16 (registro de handshake TLS) significa TLS, qualquer outro valor é tratado como texto simples, e quando nenhum byte chega dentro de PlainTextTimeout (milissegundos, 5000 por padrão) a conexão é tratada como TLS. PlainTextPolicy decide o que acontece com uma conexão simples: ptpServe (o padrão) atende a requisição normalmente, ptpRedirect responde 308 Permanent Redirect para https://<Host><path>, mantendo o método e o corpo (400 Bad Request quando a requisição não tem cabeçalho Host), e ptpReject responde 400 Bad Request e fecha a conexão. A propriedade de conexão TLS de TsgcWSConnectionServer informa se uma conexão usa TLS. Estas opções funcionam com o IOHandler Indy padrão e com os IOHandlers IOCP e EPOLL. Dentro de OnCommandGet, o método do servidor IsTLS(AContext) informa se a requisição usa TLS. Consulte TLS e HTTP simples na mesma porta.

Exemplo


oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.SSL := true;
oServer.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oServer.SSLOptions.Version := tls1_3;
oServer.SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Active := true;

Voltar para Propriedades