Play商店提醒 - onReceivedSSLError

时间:2016-02-18 12:06:04

标签: ssl ssl-certificate android-security

我在Play商店中的一个应用程序最近收到了此提醒,我完全不知道应该采取什么措施来阻止此警报。请参考this

我的应用中的方案:

应用程序中涉及支付网关,但付款是通过网络浏览进行的,我几乎可以肯定此提醒可能是这些网络视图的结果。

Google的见解:

就我搜索而言,我更频繁地遇到OnReceivedSslError,甚至警报也明确指出我要正确处理这种方法。但我完全迷失了,因为我一开始并没有实施这种方法。

更深入的冲浪让我转到thisthisthis too等链接。我在所有链接中发现的常见问题是它们都是指旧版本的android。但我使用的是我的minSDK 14,这是Android 4.0及更高版本。所以我又迷路了。我认为当我们在网络视图中使用https时会出现此警报。

所以我的问题是

  1. 我是怎么突然遇到这个问题的?

    这个应用程序已经在游戏商店超过6个月,这个警报出来了!绝对不知道发生了什么!!

  2. 如何重现此问题?

    我已经尝试了很多方法来重现这个问题,我已经实现了here中给出的SSL方法:但似乎没有任何工作。

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

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

    我尝试了什么? :

    由于我对较旧的Android版本有疑问,我设计了一个带有我的minSDK的模拟器,但即便如此,我的流程也没有进入该方法。

    我怀疑:

    是否会有一个不太可靠的SSL可以触发这个问题?

    有关此问题的任何想法和见解都将非常有用。提前致谢。我只需要禁用该警报,就像那样简单。

2 个答案:

答案 0 :(得分:0)

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

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

我也有这个问题,看来Lint还没有实现这个检查。因此,重现起来非常困难。如果您想了解会发生什么,请创建一个自签名证书,使用此证书设置一个Web服务器,并将webview客户端连接到这个" untrusted"网络服务器。如果您没有处理onReceivedSSLError,您将收到错误,或者在webview中不会发生任何事情(默认情况下)。 它会影响您的付款吗?我想如果SSL证书不受信任,将会取消对url / api的请求。

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

e.g。

        @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();
                }
            });
        }

答案 1 :(得分:0)

要正确处理SSL证书验证,只要服务器提供的证书符合您的期望,就更改您的代码以调用handler.proceed(),否则调用handler.cancel()。 onReceivedSslError()应通过Alert Dialog通知用户错误。

如果删除onReceivedSslError(),那么在SSL出错的情况下它会默认调用handler.cancel()。这也可以。