TsgcWebSocketProxyServer › Properties › SSLOptions

SSLOptions 属性

保存下游 TLS 侦听器的证书路径、TLS 版本选择和 OpenSSL 调优选项。

语法

property SSLOptions: TsgcWSSSL_Options read FSSLOptions write SetSSLOptions;

默认值

Version=tlsUndefined,VerifyCertificate=False

备注

在激活代理之前,当 SSL 为 True 时,请提供证书材料:RootCertFile、CertFile 和 KeyFile 指向 PEM 文件(当文件包含完整证书链时,对三者使用相同路径),仅在私钥已加密时才需要 Password。将 VerifyCertificate 设置为 True 以请求并验证客户端证书(子选项 FailIfNoCertificate 和 VerifyClientOnce 可细化检查),VerifyDepth 控制链长度。Version 选择特定的 TLS 版本(tls1_0、tls1_1、tls1_2、tls1_3)或保持协商开放(tlsUndefined)。使用 iohNativeTLS 时,它表示允许的最低版本,见下文。OpenSSL_Options 提供低级旋钮:APIVersion(oslAPI_1_0/oslAPI_1_1/oslAPI_3_0)、用于定位 OpenSSL 二进制文件的 LibPath/LibPathCustom、UnixSymLinks、ECDHE、CipherList、CurveList、VersionMin 以及用于主机名/IP 验证的 X509Checks。这些设置仅适用于下游 TLS 连接;上游 TLS 连接通过 Proxy.TLS 启用。

IOHandler 用于选择 TLS 引擎。iohOpenSSL 是默认值,iohSChannel 使用 Windows 提供程序。iohNativeTLS 选择的是 sgcCrypto 包中用纯 Object Pascal 实现的 TLS 引擎,可同时使用 TLS 1.3 和 TLS 1.2:不会加载任何 OpenSSL 库,并在 TLS 1.3 中提供 RFC 10024 的混合后量子密钥交换组,其中 X25519MLKEM768 排在最前。它的两个偏好列表是 NativeTLS_Options.Groups 和 NativeTLS_Options.CipherSuites,采用 OpenSSL 风格以冒号分隔,列表留空则保留引擎的默认值。该引擎在经典的每连接一线程引擎上运行,也同样能在 IOCP 和 EPOLL 引擎上运行。iohAppleTLS 和 iohAndroidTLS 是仅限客户端的处理器:服务器若使用其中之一,会在 Active 设为 True 时引发异常,除非 OnSSLGetHandler 提供了自己的处理器。请改用 iohNativeTLS、iohOpenSSL,或在 Windows 上使用 iohSChannel。

对于原生引擎,Version 表示允许的最低版本,而不像 iohOpenSSL 那样表示确切版本。tlsUndefined(默认值)和 tls1_2 接受 TLS 1.3 和 TLS 1.2,tls1_3 只接受 TLS 1.3,而 tls1_0 或 tls1_1 会在服务器启动时引发配置错误,因为该引擎只支持 TLS 1.2 和 TLS 1.3。要仅接受 TLS 1.2,请在 NativeTLS_Options.CipherSuites 中只列出 TLS 1.2 的套件,例如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。该引擎依据 RootCertFile 中的根证书验证客户端证书,当 NativeTLS_Options.UseSystemRoots 为 True(默认为 False)时,还会加上操作系统信任的证书。使用 iohNativeTLS 时,CertFile 也可以是一个 .pfx 或 .p12 文件,其中保存证书、证书链和密钥,以 Password 打开。该引擎通过 TLS 1.3 和 TLS 1.2 的会话票据恢复会话:NativeTLS_Options.SessionTickets(默认值为 True)用于开启该功能,NativeTLS_Options.TicketLifetime(默认值为 7200 秒)设定票据可使用的时长。TLS 1.2 的会话恢复要求客户端支持扩展主密钥。它不接受 0-RTT,也不会触发 OnSSLVerifyPeer,该事件属于 OpenSSL 处理器。VerifyCertificate 会向客户端索取证书并进行验证,VerifyCertificate_Options.FailIfNoCertificate 会拒绝不提供证书的客户端,而 VerifyClientOnce 不起作用,因为该引擎从不重新协商。请参阅 原生 TLS。

示例


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;

返回属性