原生 Android TLS 后端

原生 Android TLS(iohAndroidTLS)是 sgcWebSockets 的 Android 原生 TLS 传输。它通过 JNI 驱动平台自带的 javax.net.ssl.SSLEngine,因此你的 APK 中不含任何 OpenSSL .so 文件。通过将 TLSOptions.IOHandler 设置为 iohAndroidTLS 来启用它。

← 所有 TLS 后端

原生 Android TLS (iohAndroidTLS)

通过 JNI 使用平台 SSLEngine 的 Android 原生 TLS。你的 APK 中不含 OpenSSL .so。

原生 Android TLS 将加密工作交给 Android 本身。sgcWebSockets 通过 JNI 调用平台的 javax.net.ssl.SSLEngine,因此由操作系统执行握手、记录加密和证书处理。直接的好处是你的 APK 不携带任何 OpenSSL .so 文件。包更小,而且你永远不必为第三方加密库打补丁或进行版本匹配,因为 TLS 栈由操作系统维护和更新。

该后端针对 Android 系统信任存储验证服务器并执行主机名验证,因此连接到知名证书颁发机构无需额外配置即可工作。它协商 TLS 1.3,并在 Android 10(API 29)及更高版本上支持 ALPN,这让你可以在握手期间通告诸如 http/1.1 之类的应用协议。

如果你的 Android 应用必须避免随附或修补 OpenSSL,或者更倾向于完全交由平台的 TLS 策略处理,请选择此后端。与每个 sgcWebSockets 后端一样,它位于相同的 TLSOptions API 之后,因此你网络代码的其余部分与 OpenSSL、SChannel 和 Apple 路径完全相同,各平台之间只有 IOHandler 这一行不同。

启用原生 Android TLS

在你的 Android 构建中将 TLSOptions.IOHandler 设置为 iohAndroidTLS。无需 OpenSSL .so。

uses
  sgcWebSocket, sgcWebSocket_Types;
// ...
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohAndroidTLS;
WSClient.TLSOptions.VerifyCertificate := True;
WSClient.TLSOptions.ALPNProtocols.Add('http/1.1');  // Android 10 (API 29)+
WSClient.Host := 'your.server.com';
WSClient.Port := 443;
WSClient.Active := True;
WSClient->TLS = true;
WSClient->TLSOptions->IOHandler = iohAndroidTLS;
WSClient->TLSOptions->VerifyCertificate = true;
WSClient->TLSOptions->ALPNProtocols->Add("http/1.1");  // Android 10 (API 29)+
WSClient->Host = "your.server.com";
WSClient->Port = 443;
WSClient->Active = true;

APK 中没有 OpenSSL

TLS 栈已经存在于设备上,因此你的包保持精简,并且由操作系统负责更新。

无需打包 .so

APK 不含 libssl 或 libcrypto,因此包更小,也没有原生加密库需要维护。

系统信任存储

验证针对 Android 系统信任存储运行并进行主机名验证,公共 CA 无需额外设置。

TLS 1.3

平台协商 TLS 1.3,并在 Android 10(API 29)及更高版本上提供 ALPN 用于协议选择。

由操作系统维护

Android 拥有该 TLS 实现,因此安全修复通过系统更新到达,而不是通过你的发布周期。

版本说明

原生 Android TLS(iohAndroidTLS)需要 sgcWebSockets 的 Enterprise 版本。完整细分请参见功能矩阵

原生 Android TLS,零 OpenSSL

下载免费试用版,发布无需部署任何 OpenSSL .so 的 Android 应用。