OpenSSL TLS 后端
OpenSSL(iohOpenSSL)是 sgcWebSockets 的跨平台 TLS 传输。它在该库面向的每个平台上运行,并且在大多数平台上是默认选择,拥有所有后端中最广泛的协议和加密套件覆盖。通过将 TLSOptions.IOHandler 设置为 iohOpenSSL 来启用它,然后随应用一起部署 OpenSSL 运行时库。
OpenSSL(iohOpenSSL)是 sgcWebSockets 的跨平台 TLS 传输。它在该库面向的每个平台上运行,并且在大多数平台上是默认选择,拥有所有后端中最广泛的协议和加密套件覆盖。通过将 TLSOptions.IOHandler 设置为 iohOpenSSL 来启用它,然后随应用一起部署 OpenSSL 运行时库。
基于 Indy socket 实现的跨平台 TLS,在 sgcWebSockets 面向的每个平台上都可用。
OpenSSL 是 sgcWebSockets 在 Indy socket 之上构建的跨平台 TLS 实现。它在 Windows、Linux、macOS、iOS 和 Android 上都可用,并且在大多数平台上是默认后端。当你需要在每个平台上获得一致的 TLS 行为,或者依赖只有 OpenSSL 才暴露的某项能力时,请选择 OpenSSL。
该后端覆盖 TLS 1.0 至 TLS 1.3,拥有所有 sgcWebSockets 传输中最广泛的加密套件选择。你可以使用自定义 CA 根证书(RootCertFile)信任私有或自签名机构,提供客户端证书以进行双向 TLS,并通过 ALPN 通告诸如 http/1.1 之类的应用协议。由于四种后端共享相同的 TLSOptions API,针对 OpenSSL 编写的代码只需更改 IOHandler 这一行即可迁移到原生后端。
代价在于部署。OpenSSL 是外部依赖,因此你需要随应用一起发布其运行时库并保持其打补丁更新。在 Windows 上这意味着 libssl-3.dll 和 libcrypto-3.dll,在 Linux 和 Android 上是相应的 .so 文件,在 Apple 平台上是 .dylib 文件。如果你想要无需部署任何库的原生 TLS,请查看 Windows 上的 SChannel 或原生 Android 和 Apple 后端。
将 TLSOptions.IOHandler 设置为 iohOpenSSL,然后随你的构建一起部署 OpenSSL 库。
uses
sgcWebSocket, sgcWebSocket_Types;
// ...
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohOpenSSL;
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.RootCertFile := ''; // optional custom CA (PEM/DER)
WSClient.TLSOptions.CertFile := ''; // optional client cert for mTLS
WSClient.TLSOptions.Password := '';
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1');
WSClient.Host := 'your.server.com';
WSClient.Port := 443;
WSClient.Active := True;
WSClient->TLS = true;
WSClient->TLSOptions->IOHandler = iohOpenSSL;
WSClient->TLSOptions->VerifyCertificate = true;
WSClient->TLSOptions->RootCertFile = ""; // optional custom CA (PEM/DER)
WSClient->TLSOptions->CertFile = ""; // optional client cert for mTLS
WSClient->TLSOptions->Password = "";
WSClient->TLSOptions->ALPNProtocols->Add("http/1.1");
WSClient->Host = "your.server.com";
WSClient->Port = 443;
WSClient->Active = true;
OpenSSL 是外部依赖,因此运行时库在每个平台上都随你的应用一起发布。
将 libssl-3.dll 和 libcrypto-3.dll 部署在可执行文件旁边(32 位或 64 位构建需与你的目标匹配)。
打包匹配的 libssl 和 libcrypto .so 文件,然后从应用在运行时可访问的路径加载它们。
随应用包一起发布 libssl 和 libcrypto .dylib 文件,使 OpenSSL 运行时在设备上可用。
由于这些库由你负责部署,因此当发布安全修复时,你有责任对其进行更新。
OpenSSL(iohOpenSSL)包含在 sgcWebSockets 的所有版本中。完整细分请参见功能矩阵。