如何让 Retrofit/OkHttp 仅在所有手机上支持 TLSv1.2 (Android >= 5)

Mos*_*atz 5 ssl android okhttp tls1.2 retrofit2

我正在使用改造进行 REST API 调用,并且选择仅支持 Android 5.0 及更高版本。

由于这些 Android 版本支持 TLSv1.2,因此我将服务器设置为仅使用 TLSv1.2。当我在 Nexus 5x(Android 版本 7.1 和 8.0)和 Nexus 5(Android 版本 6.0)上进行测试时,一切都按预期运行。但是,当我在 Samsung Galaxy S6 Edge 上进行测试时,除非启用 TLSv1.1,否则该应用程序无法连接到服务器。

我知道 S6 Edge 支持 TLSv1.2,因为当我使用javax.net.ssl.HttpsURLConnectionTLS 版本手动设置为 1.2(使用SSLContext.getInstance("TLSv1.2")等)建立 HTTPS 连接时,它会按预期工作。

我查看了 OkHttp 代码(Retrofit 实际使用它来进行 API 调用),但我找不到它在哪里选择要使用的版本。

为什么只有 Samsung 设备不默认在 Retrofit/OkHttp 中使用 TLSv1.2?我如何强制它这样做?


注意:这个问题并不是询问如何在较旧的 Android 版本中启用 TLSv1.2 支持,该问题已在 StackOverflow 上多次得到解答。只是问为什么默认情况下此功能在某些 Android 6.0 手机上有效,而在其他手机上无效。