使用 Android WebViewClient 启用特定的 SSL 协议

2022-09-01 16:13:21

我的应用程序用于与服务器建立 SSL 连接。服务器配置为仅接受 TLSv1.1 及更高版本的协议。WebViewClient

  1. 如何检查哪些SSL协议a)支持和b)在设备上使用Android时默认启用。WebViewClient
  2. 如何为应用程序中使用的 Android WebViewClient 实例启用特定的 SSL 协议。

在其中一个运行 Android 4.3 的测试设备上,抛出具有以下说明的回调:WebViewClientonReceivedError

“无法执行 SSL 握手”

Chrome 日志如下所示:

01-29 15:58:00.073 5486 5525 W chromium_net: external/chromium/net/http/http_stream_factory_impl_job.cc:865: [0129/155800:WARNING:http_stream_factory_impl_job.cc(865)] Falling back to SSLv3 because host is TLS intolerant: 10.209.126.125:443 01-29 15:58:00.083 5486 5525 E chromium_net: external/chromium/net/socket/ssl_client_socket_openssl.cc:792: [0129/155800:ERROR:ssl_client_socket_openssl.cc(792)] handshake failed; returned 0, SSL error code 5, net_error -107 

我的应用程序还使用 和 类来设置 SSL 连接。使用这些类时,我能够使用API来启用特定的协议。http://developer.android.com/reference/javax/net/ssl/SSLSocket.html#setEnabledProtocols(java.lang.String[])HttpClientHttpsUrlConnectionSSLSocket

我需要对 .WebViewClient


答案 1

根据文档,不可能在Android<4.3的WebView中支持TLS 1.0。对于Android 4.4,默认情况下它是禁用的。

查看此图表以了解不同浏览器中对 TLS 1.0 的支持:https://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers


答案 2

如果您的应用正在使用或愿意使用 Google Play 服务,则可以通过安装旧版手机上的 .它易于安装,只有一行(加上异常处理等)。如果您还没有,您还需要将Google Play服务添加到您的gradle文件中。 包含在包中。ProviderProviderInstaller-base

try {
    ProviderInstaller.installIfNeeded(this);
} catch (GooglePlayServicesRepairableException e) {
     // Fix it
} catch (GooglePlayServicesNotAvailableException e) {
     // Skip it
}

有关完整示例,请参阅 Google 的“更新安全提供程序以防止 SSL 攻击”。