SSL / TLS 后端

sgcWebSockets 在单个属性 TLSOptions.IOHandler 背后提供五种可互换的 TLS 传输。选择 OpenSSL 以获得最大的可移植性,选择原生平台后端(Windows SChannel、Android、iOS/macOS)使用操作系统自带的 TLS 栈、无需部署任何 OpenSSL 库,或者选择原生 TLS 引擎,它是一个用 Object Pascal 编写的 TLS 1.3 与 TLS 1.2 栈,在任何目标平台上都不带依赖,并且默认协商后量子 X25519MLKEM768 密钥交换。在 Windows 上,OpenSSL 本身也可以静态链接进你的可执行文件,让你继续使用 OpenSSL 的同时同样无需部署任何东西。切换后端只需一行代码,其他一切都无需改动。

五种 TLS 传输,一个属性

每个后端都接入相同的 TLSOptions API。选择适合你平台和部署的那一个,然后设置 TLSOptions.IOHandler。

后端对比

每种传输的平台、部署占用、TLS 1.3 支持和版本。

后端 平台 需部署的库 TLS 1.3 版本
OpenSSL Windows、Linux、macOS、iOS、Android libssl/libcrypto,在 Windows 上可静态链接则无需任何库 是 所有版本
SChannel Windows 无(内置于 Windows) 是(Windows 11/Server 2022+) Professional、Enterprise
Android TLS Android 无(使用操作系统) 是 Enterprise
Apple TLS iOS、macOS 无(使用操作系统) 是(10.14+/iOS 12+) Enterprise
原生 TLS Windows、Linux、macOS、iOS、Android 无(纯 Object Pascal) 是(以及 TLS 1.2) Standard、Professional、Enterprise,或 sgcCrypto 产品包

选择一个后端

每种传输都有自己的页面,包含完整的设置、Delphi 和 C++Builder 代码、部署说明和版本细节。

OpenSSL (iohOpenSSL)

基于 Indy socket 的跨平台 TLS,在 sgcWebSockets 面向的每个平台上都可用,并且在大多数平台上是默认选择。完整支持 TLS 1.0 至 1.3,最广泛的加密套件覆盖,自定义 CA、客户端证书和 ALPN。你需要随应用一起部署 OpenSSL 运行时库。包含在所有版本中。在 Windows 上,它也可以改为静态链接进可执行文件,无需部署任何东西。

阅读完整指南 →

SChannel (iohSChannel)

Microsoft 的原生 TLS 栈(Secure Channel / SSPI),内置于 Windows。无需部署任何库,没有 OpenSSL DLL 需要随附或打补丁,并且使用 Windows 证书存储。仅限 Windows。包含在 Professional 和 Enterprise 版本中。

阅读完整指南 →

原生 Android TLS (iohAndroidTLS)

通过 JNI 使用平台 SSLEngine 的 Android 原生 TLS。你的 APK 中不含 OpenSSL .so,针对 Android 系统信任存储进行验证,支持 TLS 1.3,并在 Android 10(API 29)及更高版本上支持 ALPN。Enterprise 版本。

阅读完整指南 →

原生 Apple TLS (iohAppleTLS)

面向 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 (iohNativeTLS)

一个完全用 Object Pascal 写在 sgcCrypto 单元之上的 TLS 1.3 与 TLS 1.2 实现,因此在 Windows、Linux、macOS、iOS 或 Android 上都不需要部署任何东西。在客户端设置 TLSOptions.IOHandler := iohNativeTLS,在服务器设置 SSLOptions.IOHandler := iohNativeTLS,IOCP 和 EPOLL 服务器引擎同样支持。TLSOptions.NativeTLS_Options.Groups 和 TLSOptions.NativeTLS_Options.CipherSuites 接受 OpenSSL 风格、以冒号分隔的列表。它们的默认值分别是 X25519MLKEM768:X25519:secp256r1:secp384r1 和 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 外加 TLS 1.2 的默认值,因此只要对端支持,握手无需任何配置就是后量子混合的。

TLS 1.3 与 TLS 1.2。客户端的 TLSOptions.Version 和服务器的 SSLOptions.Version 是允许的最低版本:tls1_2 或 tlsUndefined 会协商 TLS 1.3 或 TLS 1.2,tls1_3 则只允许 TLS 1.3。若只想使用 TLS 1.2,请在 NativeTLS_Options.CipherSuites 中只列出 TLS 1.2 套件。TLS 1.2 默认提供带 AES-128-GCM、AES-256-GCM 和 ChaCha20-Poly1305 的 ECDHE_ECDSA 与 ECDHE_RSA,而 ECDHE AES-CBC 套件和 RSA 密钥交换只有在您明确指定时才会启用。它使用 X25519、secp256r1 或 secp384r1,因为后量子混合分组仅存在于 TLS 1.3 中。TLS 1.2 具备 RFC 7627 的扩展主密钥,双方都启用了 RFC 8446 的降级保护,并且拒绝重新协商和 SHA-1 签名。

它不做什么。该引擎只支持 TLS 1.3 和 TLS 1.2,不支持 TLS 1.1、TLS 1.0 或 SSL。没有会话恢复,也没有 PSK,没有 0-RTT,没有 QUIC。信任根来自 TLSOptions.RootCertFile,当 NativeTLS_Options.UseSystemRoots 为 True 时,还会加上操作系统信任的根证书,这些证书读取自 Windows 的 ROOT 存储或一个 CA 证书包文件,绝不会读取 macOS 或 iOS 的钥匙串或 Android 的证书存储;并且组件事件 OnSSLVerifyPeer 对它不可用,引擎有自己的验证钩子。如果您需要其中任何一项,请继续使用 OpenSSL 或某个平台后端。

它属于 sgcCrypto,因此自 Standard 版本起随附提供,也包含在独立的 sgcCrypto 产品包中。

版本说明

原生平台 TLS,即 Android(iohAndroidTLS)和 Apple(iohAppleTLS),需要 Enterprise 版本。OpenSSL(iohOpenSSL)包含在所有版本中;SChannel(iohSChannel)包含在 Professional 和 Enterprise 版本中。在 Windows 上静态链接 OpenSSL 同样需要 Enterprise 或 All-Access 版本。原生 TLS(iohNativeTLS)属于 sgcCrypto,因此自 Standard 版本起随附提供,也包含在独立的 sgcCrypto 产品包中。

一行代码即可切换

五种后端共享相同的 TLSOptions API,因此在它们之间切换只需更改一个属性。你代码中的其他一切都无需改动。

TLS 和 VerifyCertificate

在每个后端上以相同方式启用 TLS 并切换对端证书验证。

RootCertFile

指向自定义 CA 根证书,以信任私有或自签名的证书颁发机构。

CertFile 和 Password

提供客户端证书及其密码,以进行双向 TLS(mTLS)身份验证。

ALPNProtocols

在 TLS 握手期间通告应用协议(例如 http/1.1)。

// Same TLSOptions, only the IOHandler line changes per platform.
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohOpenSSL;   // or iohSChannel / iohAndroidTLS / iohAppleTLS / iohNativeTLS
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 / iohNativeTLS
WSClient->TLSOptions->VerifyCertificate = true;
WSClient->TLSOptions->RootCertFile = "";
WSClient->TLSOptions->CertFile = "";
WSClient->TLSOptions->Password = "";
WSClient->TLSOptions->ALPNProtocols->Add("http/1.1");
WSClient->Active = true;
超值之选:All-AccesseSeGeCe 全部产品,含高级支持,每年 €1,059 起。
查看 All-Access 价格

原生 TLS,无需部署任何 OpenSSL

下载免费试用版,只需一行代码即可切换 TLS 后端。