我的应用程序使用 WebViewClient
与服务器建立 SSL 连接。
服务器配置为仅接受 TLSv1.1 及以上协议(protocol)。
- 在设备上使用 Android
WebViewClient
时,如何检查哪些 SSL 协议(protocol) a) 受支持和 b) 默认启用。 - 如何为我的应用程序中使用的 Android WebViewClient 实例启用特定 SSL 协议(protocol)。
在其中一台运行 Android 4.3 的测试设备上,
WebViewClient
抛出 onReceivedError
回调,描述如下:
"Failed to perform SSL handshake"
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
我的应用程序还使用 HttpClient
和 HttpsUrlConnection
类来设置 SSL 连接。在使用这些类时,我能够使用 SSLSocket
API 来启用特定协议(protocol)。
http://developer.android.com/reference/javax/net/ssl/SSLSocket.html#setEnabledProtocols(java.lang.String[])
我需要对 WebViewClient
做同样的事情。
最佳答案
根据文档,在 Android < 4.3 的 WebView 中不可能支持 TLS 1.0。对于 Android 4.4,它默认是禁用的。
查看此图表以了解不同浏览器对 TLS 1.0 的支持:https://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers
关于java - 使用 Android WebViewClient 启用特定 SSL 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28329652/