SSL / TLS 后端
sgcWebSockets 在单个属性 TLSOptions.IOHandler 背后提供四种可互换的 TLS 传输。选择 OpenSSL 以获得最大的可移植性,或选择原生平台后端(Windows SChannel、Android、iOS/macOS),它使用操作系统自带的 TLS 栈,无需部署任何 OpenSSL 库。切换后端只需一行代码,其他一切都无需改动。
sgcWebSockets 在单个属性 TLSOptions.IOHandler 背后提供四种可互换的 TLS 传输。选择 OpenSSL 以获得最大的可移植性,或选择原生平台后端(Windows SChannel、Android、iOS/macOS),它使用操作系统自带的 TLS 栈,无需部署任何 OpenSSL 库。切换后端只需一行代码,其他一切都无需改动。
每个后端都接入相同的 TLSOptions API。选择适合你平台和部署的那一个,然后设置 TLSOptions.IOHandler。
通过 OpenSSL 库实现的跨平台 TLS。默认且最具可移植性的后端,拥有最广泛的协议和加密套件覆盖。包含在所有版本中。
Windows 原生 TLS(Microsoft Secure Channel)。无需部署任何库,使用 Windows 证书存储。仅限 Windows。Professional 和 Enterprise。
通过平台 SSLEngine 实现的 Android 原生 TLS。无需打包 OpenSSL .so。仅限 Android。Enterprise 版本。
iOS/macOS 原生 TLS。无需 OpenSSL .dylib。在现代系统上自动选用 Network.framework(TLS 1.3)。Enterprise 版本。
每种传输的平台、部署占用、TLS 1.3 支持和版本。
| 后端 | 平台 | 需部署的库 | TLS 1.3 | 版本 |
|---|---|---|---|---|
| OpenSSL | Windows、Linux、macOS、iOS、Android | OpenSSL(libssl/libcrypto) | 是 | 所有版本 |
| SChannel | Windows | 无(内置于 Windows) | 是(Windows 11/Server 2022+) | Professional、Enterprise |
| Android TLS | Android | 无(使用操作系统) | 是 | Enterprise |
| Apple TLS | iOS、macOS | 无(使用操作系统) | 是(10.14+/iOS 12+) | Enterprise |
每种传输都有自己的页面,包含完整的设置、Delphi 和 C++Builder 代码、部署说明和版本细节。
基于 Indy socket 的跨平台 TLS,在 sgcWebSockets 面向的每个平台上都可用,并且在大多数平台上是默认选择。完整支持 TLS 1.0 至 1.3,最广泛的加密套件覆盖,自定义 CA、客户端证书和 ALPN。你需要随应用一起部署 OpenSSL 运行时库。包含在所有版本中。
Microsoft 的原生 TLS 栈(Secure Channel / SSPI),内置于 Windows。无需部署任何库,没有 OpenSSL DLL 需要随附或打补丁,并且使用 Windows 证书存储。仅限 Windows。包含在 Professional 和 Enterprise 版本中。
通过 JNI 使用平台 SSLEngine 的 Android 原生 TLS。你的 APK 中不含 OpenSSL .so,针对 Android 系统信任存储进行验证,支持 TLS 1.3,并在 Android 10(API 29)及更高版本上支持 ALPN。Enterprise 版本。
面向 iOS 和 macOS 的 Apple 原生 TLS,无需部署 OpenSSL .dylib。在 macOS 10.14+ / iOS 12+ 上自动选用 Network.framework(TLS 1.3),在较旧系统上回退到 Secure Transport(TLS 1.2),支持系统信任、SNI、自定义 CA、客户端证书 / mTLS 和 ALPN。Enterprise 版本。
原生平台 TLS,即 Android(iohAndroidTLS)和 Apple(iohAppleTLS),需要 Enterprise 版本。OpenSSL(iohOpenSSL)包含在所有版本中;SChannel(iohSChannel)包含在 Professional 和 Enterprise 版本中。
四种后端共享相同的 TLSOptions API,因此在它们之间切换只需更改一个属性。你代码中的其他一切都无需改动。
在每个后端上以相同方式启用 TLS 并切换对端证书验证。
指向自定义 CA 根证书,以信任私有或自签名的证书颁发机构。
提供客户端证书及其密码,以进行双向 TLS(mTLS)身份验证。
在 TLS 握手期间通告应用协议(例如 http/1.1)。
// Same TLSOptions, only the IOHandler line changes per platform.
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohOpenSSL; // or iohSChannel / iohAndroidTLS / iohAppleTLS
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.RootCertFile := '';
WSClient.TLSOptions.CertFile := '';
WSClient.TLSOptions.Password := '';
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1');
WSClient.Active := True;
// Same TLSOptions, only the IOHandler line changes per platform.
WSClient->TLS = true;
WSClient->TLSOptions->IOHandler = iohOpenSSL; // or iohSChannel / iohAndroidTLS / iohAppleTLS
WSClient->TLSOptions->VerifyCertificate = true;
WSClient->TLSOptions->RootCertFile = "";
WSClient->TLSOptions->CertFile = "";
WSClient->TLSOptions->Password = "";
WSClient->TLSOptions->ALPNProtocols->Add("http/1.1");
WSClient->Active = true;