我在 Android 9(Pixel 2 设备)上使用 OkHttp 3.12.2,并尝试连接到使用 OpenSSL 1.1.1 运行的 nginx 1.14.0。 nginx 支持 TLSv1.3,我使用 Ubuntu 18.04 上的 Firefox 66.0.2、Android 9 上的 Chrome 73.0 和 ChromeOS 72.0 验证了这一点。
但是,OkHttp 始终协商 TLSv1.2。我还尝试设置 RESTRICTED_TLS ConnectionSpec,但没有帮助。
我没有找到有关如何在 Android 上运行 TLSv1.3 的具体说明。我知道只有 Android 8 和 9 开箱即用地支持 TLSv1.3;我现在对这个限制没问题。
我从早期 TLS 迁移中获得的经验是,除了更新所有涉及的组件之外,我无需执行任何操作。
最佳答案
如官方所示link , Android 10(Api 级别 29)起支持 TLSv1.3。因此,为了在以前的版本中支持 TLSv1.3,我们可以集成 conscrypt图书馆。 Conscrypt 安全提供程序包含用于 TLS 功能的公共(public) API。为此,我们必须添加依赖项,
dependencies {
implementation 'org.conscrypt:conscrypt-android:2.2.1'
}
这里我们还需要 OkHttp 客户端,因为它支持 conscrypt。
如 OkHttp 中所述,
OkHttp uses your platform’s built-in TLS implementation. On Java platforms OkHttp also supports Conscrypt, which integrates BoringSSL with Java. OkHttp will use Conscrypt if it is the first security provider.
添加 conscrypt 依赖项后,在应用程序类中我们只需提及,
Security.insertProviderAt(Conscrypt.newProvider(), 1);
这有助于在旧版 Android 版本(Api 级别 <29)中提供支持并启用 TLS 1.3。
关于android - 如何在 Android 8/9 上为 OkHttp 3.12.x 启用 TLSv1.3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539513/