【问题标题】:Play Store Alert - Unsafe Implementation of onReceivedSSLErrorPlay 商店警报 - onReceivedSSLError 的不安全实现
【发布时间】:2016-02-18 12:06:03
【问题描述】:

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

我的应用中的场景:

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

来自 Google 的见解:

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

更深入的浏览将我引向thisthisthis too 等链接。我在所有链接中发现的共同点是它们都指的是旧版本的 android。但我将我的 minSDK 用作 14,即 Android 4.0 及更高版本。于是我又迷路了。我认为当我们在 web 视图中使用 https 时会出现此警报。

所以我的问题是

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

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

  2. 如何重现该问题?

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

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

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

我尝试了什么? :

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

我的疑问:

是否存在可能引发此问题的非正版 SSL?

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

【问题讨论】:

  • 这可能是您正在使用的库。你应该收到一封电子邮件,告诉你哪个班级有问题。
  • 将检查电子邮件并回复。

标签: ssl ssl-certificate android-security


【解决方案1】:

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

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

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

上面的 sn-p 将忽略 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();
                }
            });
        }

【讨论】:

    【解决方案2】:

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

    如果您删除 onReceivedSslError(),那么它会在 SSL 错误的情况下默认调用 handler.cancel()。这也将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      相关资源
      最近更新 更多