在 Windows 上使用 sgcWebSockets 部署 TLS,一直意味着要在可执行文件旁边附带 libcrypto 和 libssl,并且要匹配正确的 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
静态链接同样适用于 TsgcWebSocketClient 和 TsgcWebSocketServer,以及任何其他通过 TLS 通信的 sgcWebSockets 或 sgcIndy 组件,在 32 位和 64 位构建中都是如此。无论是为数百个连接终止 TLS 的服务器,还是仅拨号连接单个端点的客户端,只要项目中包含该单元,都会以相同的方式使用链接进来的 OpenSSL。
OpenSSL 3.5.7,持续保持更新
目前链接的 OpenSSL 版本为 3.5.7。随着新的 OpenSSL 版本发布,未来的 sgcWebSockets 更新会同步刷新此版本,因此您无需自行跟踪、下载或重新部署 OpenSSL 二进制文件,只需正常更新组件即可。
系统要求
- 仅限 Windows,支持 32 位和 64 位。在 macOS、Android 或 iOS 上不可用,且不属于 .NET 版本的一部分。
- 需要 Delphi XE2 或更新版本。较旧的 Delphi 版本无法链接这种格式的目标文件,因此在这些版本上该单元不会编译出任何内容,应用程序会照常加载 OpenSSL DLL,无需修改代码。
- 仅在 sgcWebSockets 的 Enterprise 和 All-Access 版本中提供,并且仅当使用自定义 Indy 库时才可用,而这正是这两个版本的默认设置。
如果您使用早于 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 部署方案?联系我们,您会收到编写这些代码的人员的回复。
