3

我在 Play 商店中的一个应用最近收到了这个警报,我完全不知道应该做什么来停止这个警报。请参考这个

我的应用程序中的场景:

该应用程序中涉及支付网关,但付款是通过 webview 进行的,我几乎可以肯定此警报可能是这些 webviews 的结果。

来自谷歌的见解:

据我搜索,我遇到的OnReceivedSslError频率更高,甚至警报也清楚地表明我要正确处理该方法。但我完全迷失了,因为我一开始还没有实现那个方法。

更深入的冲浪让我找到了这样的链接这个这个也是。我在所有链接中发现的共同点是它们都指的是旧版本的 android。但我将我的 minSDK 用作 14,即 Android 4.0 及更高版本。于是我又迷路了。我认为当我们https在 webview 中使用 a 时会出现此警报。

所以我的问题是

  1. 我是怎么突然发现这个问题的?

    这个应用程序已经在 Play 商店中存在 6 个多月了,这个警报突然出现了!!!完全不知道发生了什么!!

  2. 如何重现该问题?

    我已经尝试了很多方法来重现这个问题,并且我已经实现了这里给出的 SSL 方法:但似乎没有任何效果。

  3. 此问题是否会以任何方式影响我的付款或我的应用程序?

如何重现此问题以了解更多信息以及如何停止此警报?

我试过什么?:

由于我对旧的 android 版本有疑问,我用我的 minSDK 设计了一个模拟器,但即使这样我的流程也没有进入该方法。

我的疑问:

是否有可能触发此问题的不太真实的 SSL?

关于这个问题的任何想法和见解都会很有帮助。提前致谢。我只需要禁用该警报,就这么简单。

4

2 回答 2

0

当您使用 WebViewClients 时,Google 似乎已经升级了他们的安全检查。在许多情况下 - 没有双关语 - 开发人员修复了这样的 SSL 问题:

        @Override
        public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
                    handler.proceed();
        }

我也有这个问题,而且似乎 Lint 还没有实现这个检查。所以复制起来会很困难。如果您想看看会发生什么,请创建一个自签名证书,使用此证书设置一个网络服务器,并将一个 webviewclient 连接到这个“不受信任的”网络服务器。如果你不处理 onReceivedSSLError,你会得到一个错误,或者 webview 中什么都不会发生(默认情况下)。会影响你的付款吗?我想它会,如果 SSL 证书不受信任,因为对 url/api 的请求将被取消。

上面的代码片段会忽略 SSL 错误,并提供 MITM 攻击的可能性。您是否尝试过拦截请求、提醒用户并允许他们选择继续?

例如

        @Override
        public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
            //super.onReceivedSslError(view, handler, error);
            AlertDialog.Builder builder = new AlertDialog.Builder(GroupsActivity.this);
            builder.setTitle("Invalid/Untrusted certificate");
            builder.setMessage("You're accessing a page with an untrusted or invalid certificate. Do you want to continue?");
            builder.setNegativeButton("Cancel", new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    handler.cancel();
                    Toast.makeText(GroupsActivity.this, "Request cancelled", Toast.LENGTH_LONG).show();
                }
            });

            builder.setPositiveButton("Continue", new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    handler.proceed();
                }
            });
        }
于 2016-02-29T07:03:50.077 回答
0

要正确处理 SSL 证书验证,请更改您的代码以在服务器提供的证书符合您的期望时调用 handler.proceed(),否则调用 handler.cancel()。onReceivedSslError() 应该通过警报对话框通知用户错误。

如果您删除 onReceivedSslError() ,则默认情况下它将调用 handler.cancel() 以防 SSL 错误。这也将起作用。

于 2016-07-15T05:58:02.013 回答