sgcWebSockets 中的静态 OpenSSL 链接:无需 libcrypto 和 libssl DLL | eSeGeCe 博客

sgcWebSockets 中的静态 OpenSSL 链接:无需 libcrypto 和 libssl DLL

· 组件

在 Windows 上使用 sgcWebSockets 部署 TLS,一直意味着要在可执行文件旁边附带 libcryptolibssl,并且要匹配正确的 OpenSSL 版本和位数。现在,sgcWebSockets 可以直接将 OpenSSL 链接到可执行文件内部,因此不再需要部署 DLL,不再需要匹配版本,也不再需要专门的文件夹存放它们。此功能适用于 Enterprise 和 All-Access 版本。

一个单元,无需其他配置

无需启用任何编译器指令,也无需选择 OpenSSL API 版本。只需将单元 sgcIdSSLOpenSSL_Static 添加到项目的 uses 子句中,从下一次运行开始,您的应用程序(无论是客户端组件还是服务器端组件)都会使用链接到 .exe 中的 OpenSSL 库。

uses
  sgcWebSocket, sgcWebSocket_Classes,
  sgcIdSSLOpenSSL_Static;

将该单元从 uses 子句中移除,应用程序就会恢复到和以前一样加载 OpenSSL DLL 的方式。代码中无需做任何其他修改,无论采用哪种方式,您的 TLS 设置、证书和连接逻辑都保持不变。

适用于客户端和服务器,支持 Win32 和 Win64

静态链接同样适用于 TsgcWebSocketClientTsgcWebSocketServer,以及任何其他通过 TLS 通信的 sgcWebSockets 或 sgcIndy 组件,在 32 位和 64 位构建中都是如此。无论是为数百个连接终止 TLS 的服务器,还是仅拨号连接单个端点的客户端,只要项目中包含该单元,都会以相同的方式使用链接进来的 OpenSSL。

OpenSSL 3.5.7,持续保持更新

目前链接的 OpenSSL 版本为 3.5.7。随着新的 OpenSSL 版本发布,未来的 sgcWebSockets 更新会同步刷新此版本,因此您无需自行跟踪、下载或重新部署 OpenSSL 二进制文件,只需正常更新组件即可。

系统要求

如果您使用早于 XE2 的 Delphi 版本进行编译,却仍然引用该单元并期望其被链接,就会看到 E2045 Bad object file format 错误。解决方法很简单:从 uses 子句中移除 sgcIdSSLOpenSSL_Static,应用程序就会继续使用 OpenSSL DLL 正常工作。

适用场景

在以下情况下,静态链接会非常有用:您希望只发布一个文件;无法保证目标机器上已经安装了正确的 OpenSSL DLL;或者您的部署流程不允许在可执行文件旁边放置额外文件,例如一个受限的安装目录,或者一个以单一二进制文件形式分发的工具。

可用性

静态 OpenSSL 链接功能包含在 sgcWebSockets 的 Enterprise 和 All-Access 版本中。要全面了解 sgcWebSockets 在各个平台上支持的 TLS 后端,请参阅 SSL / TLS 部分OpenSSL TLS 后端页面。

您可以从 sgcWebSockets 下载页面获取,也可以通过 GetIt 或您的注册账户获取。

有疑问、反馈,或者需要帮助规划无 DLL 部署方案?联系我们,您会收到编写这些代码的人员的回复。