WebViewClient返回"无法建立安全连接".在重新创建片段时

Pau*_*eld 8 android webviewclient

我们的应用程序有选项卡,其中一个片段可以包含webview客户端.用户现在报告webviewclient无法加载页面的问题.我们已经确认服务器已启动并运行,我们还发现问题发生在v4.3和所有早期版本中.我们也确认它在v5.0中运行良好; 现在我们无法测试它是否在4.4中工作(我猜这些信息只有在知道4.4和更新版本中发生的更改会导致所有早期版本中的某些内容失败时才有用).

所以实际问题是我们创建了webviewclient并将其加载到片段中,在这个场景中,所有版本的网页(通过HTTPS连接)都会完美地加载.对于v5.0,我们可以单击另一个选项卡,然后返回到带有webviewclient的选项卡; 我们可以看到正在创建的片段,一切都按预期工作,网页按预期加载.但是对于v4.3及更早版本,我们看到正在创建片段,但webviewclient会使用-11错误代码触发onReceivedError(无法建立安全连接).在调试日志中进一步查看我们得到握手错误,这是调用的日志.有趣的是,我们连接的网站可以接受TLS1.2; 我们可以看到,当我们使用Firefox访问URL并使用开发工具等时,错误也非常有趣.

04-24 14:38:52.415: W/chromium(15434): external/chromium/net/http/http_stream_factory_impl_job.cc:865: [0424/143852:WARNING:http_stream_factory_impl_job.cc(865)] Falling back to SSLv3 because host is TLS intolerant: 
04-24 14:38:52.446: V/chromium(15434): external/chromium/net/socket/ssl_client_socket_openssl.cc:310: [0424/143852:INFO:ssl_client_socket_openssl.cc(310)] ssl_ctx_ is used
04-24 14:38:52.469: E/chromium(15434): external/chromium/net/socket/ssl_client_socket_openssl.cc:899: [0424/143852:ERROR:ssl_client_socket_openssl.cc(899)] handshake failed; returned 0, SSL error code 5, net_error -107
04-24 14:38:52.469: V/chromium(15434): external/chromium/net/socket/ssl_client_socket_openssl.cc:508: [0424/143852:INFO:ssl_client_socket_openssl.cc(508)] ~SSLClientSocketOpenSSL()
04-24 14:38:52.469: I/GATE(15434): <GATE-M>DEV_ACTION_ERROR</GATE-M>
04-24 14:38:52.477: V/webkit(15434): reportError errorCode(-11) desc(Couldn't establish a secure connection.)
04-24 14:38:52.532: I/GATE(15434): <GATE-M>DEV_ACTION_COMPLETED</GATE-M>
Run Code Online (Sandbox Code Playgroud)

挖掘它看起来我们可能需要覆盖SSLProtocolFactory; 但这似乎是自签名证书等.我们正在连接到一个知名的第三方,他们的证书似乎没有任何问题.与往常一样,它可能感觉像我们早期版本的Android所缺少的东西; 或解决某些已在新版本中修复但未确定下一步要查看的内容.

Pau*_*eld 11

这似乎是Android v4.3及更早版本中的一个错误,现在谷歌不维护也不会修补.我们连接的网站正在运行TLS,但最近关闭了SSLv3.它是一家支付提供商,PCI合规性正在迫使提供商在未来一年禁用SSLv3和早期版本的TLS以保持合规性.我们还发现虽然该版Android上的Chrome能够正确地与网站进行通信,但本机Android浏览器却无法(因此重复我们在WebViewClient中看到的内容).令人沮丧的是,这意味着似乎没有一个安全的解决方案来解决这个问题.有可能覆盖SSLProviderFactory,但这似乎是一个破解坚果的大锤,打开其他潜在的安全问题.

更新:最后,我们连接的第三方也解决了这个问题.我们无法在Android方面做任何事情,但我认为这是一个bios更新,它在服务器上进行了一些排序,这意味着它开始以Android可以处理的方式进行通信(我们无法从第3个方面获得更多细节)派对他们做了什么).