android - 如何在 Android 8/9 上为 OkHttp 3.12.x 启用 TLSv1.3?

标签 android okhttp tls1.3

我在 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/

相关文章:

android - 类型不匹配 : inferred type is HomeViewModel! 但 ViewModel!预计

android代码来检测文件夹的内容是否有任何变化

c - 如何让 OpenSSL C 服务器只支持 TLS 1.3?

java - SSLContext.getInstance ("TLS") 漏洞

Android DataBinding—— View 标签在 View 上不正确 :null

android - ActivityThread.handleBindApplication 中的 NullPointerException

java - 从多个 REST 端点获取 JSON 数据的正确方法

android - OkHttp 如何监听超时?

java - 使用 okhttp3 检查和恢复缓存文件

ssl - 只有 TLS_AES_128_GCM_SHA256 密码适用于 TLS 1.3 的 psk 连接吗?