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

时间:2015-04-24 14:00:55

标签: 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>

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

1 个答案:

答案 0 :(得分:11)

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

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