TsgcWebSocketServer › 属性 › 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)。OpenSSL_Options 公开低级选项:APIVersion(oslAPI_1_0/oslAPI_1_1/oslAPI_3_0)、用于定位 OpenSSL 二进制文件的 LibPath/LibPathCustom、UnixSymLinks、ECDHE、CipherList、CurveList、MinVersion 以及用于主机名/IP 验证的 X509Checks。
VerifyCertificate 完全无法说明客户端证书自颁发以来是否已被吊销,因此密钥被窃取、序列号随后被吊销的证书在过期之前仍然能够打开会话。使用 IOHandler=iohSChannel 时,只有将 SChannel_Options.Revocation.Check 设置为 scrcDisabled(默认值)以外的值,才会查询客户端证书的吊销状态:scrcEndCertificate 仅检查客户端证书,scrcChainExcludeRoot 连同中间证书一起检查,scrcChain 则包括根证书。Revocation.Timeout 限制整个 CRL 和 OCSP 获取过程(默认 5000 毫秒),使无法连接的响应方不会拖住握手过程;Revocation.CacheOnly 仅使用 Windows 已缓存的数据,绝不访问网络;Revocation.IgnoreRevocationOffline 和 Revocation.IgnoreNoRevocationCheck(两者均为 True)决定是否接受无法连接的响应方或未发布任何吊销信息的客户端证书。已确认被吊销的证书始终会被拒绝。设置 Preset := tlspSecureDefaults 会将该检查启用为 scrcChainExcludeRoot,并保留这两项软失败设置,因此原本可以接入的客户端仍然可以接入。请参阅 服务器 SSL | SChannel 客户端证书吊销。
oServer := TsgcWebSocketServer.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.MinVersion := tls1_2;
oServer.SSLOptions.Port := 443;
oServer.Active := true;