TsgcWebSocketProxyServer › Propiedades › SSLOptions
Contiene rutas de certificados, selección de versión TLS y ajuste de OpenSSL para el escucha TLS downstream.
property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;
Version=tlsUndefined, VerifyCertificate=False
Proporcione el material del certificado antes de activar el proxy cuando SSL es True: RootCertFile, CertFile y KeyFile apuntan a archivos PEM (use la misma ruta para los tres cuando el archivo contiene la cadena completa), y Password solo es necesario si la clave privada está cifrada. Establezca VerifyCertificate a True para solicitar y validar certificados de cliente (las subopciones FailIfNoCertificate y VerifyClientOnce refinan la comprobación) con VerifyDepth controlando la longitud de la cadena. Version selecciona una versión TLS específica (tls1_0, tls1_1, tls1_2, tls1_3) o deja la negociación abierta (tlsUndefined). Con iohNativeTLS es en cambio la versión mínima permitida, vea más abajo. OpenSSL_Options expone controles de bajo nivel: APIVersion (oslAPI_1_0/oslAPI_1_1/oslAPI_3_0), LibPath/LibPathCustom para localizar los binarios OpenSSL, UnixSymLinks, ECDHE, CipherList, CurveList, VersionMin y X509Checks para la validación de nombre de host/IP. Estos ajustes se aplican únicamente al tramo descendente; el tramo TLS ascendente se habilita a través de Proxy.TLS.
IOHandler selecciona el motor TLS. iohOpenSSL es el predeterminado e iohSChannel utiliza el proveedor de Windows. iohNativeTLS selecciona el motor TLS escrito en Object Pascal puro del paquete sgcCrypto, que habla TLS 1.3 y TLS 1.2: no se carga ninguna biblioteca OpenSSL, y en TLS 1.3 los grupos híbridos de intercambio de claves poscuántico de RFC 10024 se ofrecen con X25519MLKEM768 en primer lugar. Sus 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. El motor funciona igualmente con el motor clásico de un hilo por conexión y con los motores IOCP y EPOLL. iohAppleTLS e iohAndroidTLS son manejadores solo para cliente: un servidor con alguno de ellos genera una excepción al establecer Active en True, a menos que OnSSLGetHandler proporcione su propio manejador. Use en su lugar iohNativeTLS, iohOpenSSL o, en Windows, iohSChannel.
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 aceptan TLS 1.3 y TLS 1.2, tls1_3 acepta únicamente TLS 1.3, y tls1_0 o tls1_1 generan un error de configuración al arrancar el servidor, porque el motor solo admite TLS 1.2 y TLS 1.3. Para aceptar 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 valida los certificados de cliente frente a las raíces de RootCertFile, además de las raíces en las que confía el sistema operativo cuando NativeTLS_Options.UseSystemRoots es True (False de forma predeterminada). Con iohNativeTLS, CertFile también puede ser un archivo .pfx o .p12 que contenga el certificado, la cadena y la clave, abierto con Password. El motor reanuda sesiones con tickets de sesión de TLS 1.3 y TLS 1.2: NativeTLS_Options.SessionTickets (True de forma predeterminada) los activa y NativeTLS_Options.TicketLifetime (7200 segundos de forma predeterminada) establece cuánto tiempo puede usarse un ticket. La reanudación en TLS 1.2 requiere que el cliente admita el extended master secret. No acepta 0-RTT y no genera OnSSLVerifyPeer, que pertenece al IOHandler de OpenSSL. VerifyCertificate pide un certificado al cliente y lo valida, VerifyCertificate_Options.FailIfNoCertificate rechaza a un cliente que no envía ninguno, y VerifyClientOnce no tiene efecto porque el motor nunca renegocia. Consulte TLS nativo.
oProxy := TsgcWebSocketProxyServer.Create(nil);
oProxy.SSL := true;
oProxy.SSLOptions.CertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.KeyFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.RootCertFile := 'c:\certificates\mycert.pem';
oProxy.SSLOptions.Version := tls1_3;
oProxy.SSLOptions.OpenSSL_Options.VersionMin := tls1_2;
oProxy.SSLOptions.Port := 443;
oProxy.Proxy.Host := 'upstream.example.com';
oProxy.Proxy.Port := 8080;
oProxy.Active := true;