And*_*ach 5 android okhttp tls1.3
I'm using OkHttp 3.12.2 on Android 9 (Pixel 2 device) and try to connect to an nginx 1.14.0 running with OpenSSL 1.1.1. The nginx is capable of TLSv1.3, I verified this with Firefox 66.0.2 on Ubuntu 18.04, Chrome 73.0 on Android 9 and ChromeOS 72.0.
However, OkHttp always negotiates TLSv1.2. I also tried to set a RESTRICTED_TLS ConnectionSpec, but it didn't help.
I did not find a specific instruction on how to get TLSv1.3 working on Android. I know that only Android 8 and 9 support TLSv1.3 out of the box; I'm fine for now with that restriction.
我从较早的TLS迁移中获得的经验是,除了更新所有涉及的组件之外,我无需执行任何操作。
use*_*768 23
如官方链接所示,从 Android 10(Api Level 29)开始,病房支持 TLSv1.3。所以为了在以前的版本中支持 TLSv1.3,我们可以集成conscrypt库。Conscrypt 安全提供程序包括用于 TLS 功能的公共 API。为此,我们必须添加依赖项,
dependencies {
implementation 'org.conscrypt:conscrypt-android:2.2.1'
}
Run Code Online (Sandbox Code Playgroud)
这里我们还需要 OkHttp 客户端,因为它支持 conscrypt。
OkHttp 使用您平台的内置 TLS 实现。在 Java 平台上,OkHttp 还支持 Conscrypt,它将 BoringSSL 与 Java 集成。如果 OkHttp 是第一个安全提供者,它将使用 Conscrypt。
添加conscrypt依赖后,在application类中我们只需要提一下,
Security.insertProviderAt(Conscrypt.newProvider(), 1);
Run Code Online (Sandbox Code Playgroud)
这有助于在较旧的 android 版本(Api 级别 <29)中提供支持和启用 TLS 1.3。
问题很可能是客户端或证书在所有情况下都可能不支持 TLS 1.3 - 然后会回退。尝试运行SSL 测试来验证(它还对移动客户端执行检查,这可能会以不同的方式进行协商)。将 OhHttp 升级到3.13或3.14(很快)也可能是一种选择;这是更改日志。即使Android应该支持它,客户端也需要配置,以及:
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(Arrays.asList(ConnectionSpec.MODERN_TLS))
.build();
Run Code Online (Sandbox Code Playgroud)
可能的值有:RESTRICTED_TLS,MODERN_TLS和 (backwards) COMPATIBLE_TLS。
| 归档时间: |
|
| 查看次数: |
1043 次 |
| 最近记录: |