Play Store警报 - onReceivedSSLError实现不安全

3
我的Play商店中的一个应用最近收到了这个警报,我完全不知道应该采取什么措施来阻止这个警报。请参考这个
我的应用程序涉及一个支付网关,但是支付是通过Webview进行的,我几乎可以确定这个警报可能是那些Webview的结果。
从Google的角度来看:
就我所搜索的而言,我经常遇到OnReceivedSslError,甚至警报明确告诉我要正确处理该方法。但是我完全迷失了,因为我首先没有实现该方法。
更深入的浏览链接,如此链接此链接此链接。我在所有链接中发现的共同之处是它们都涉及较旧版本的Android。但是我使用的minSDK是14,即Android 4.0及以上。所以我又一次迷失了。我认为当我们在Webview中使用https时,会出现此警报。
因此我的问题是:
1.我为什么会突然遇到这个问题? 这个应用程序已经在Play商店中超过6个月了,但这个警报突然出现了!绝对没有任何想法发生了什么!!
2.我该如何重现这个问题? 我尝试了许多方法来重现这个问题,并按照此处所示实现了SSL方法:但是似乎没有任何作用。
3.这个问题会影响我的支付或我的应用吗?
我如何重现此问题以了解更多信息并如何停止此警报?
我的怀疑:
可能有一个不太真实的SSL触发了这个问题吗?
关于此问题的任何想法和见解都将非常有帮助。提前感谢您的帮助。我只需要禁用那个警报,就像这样简单。

很可能是你正在使用的库出了问题。你应该已经收到一封电子邮件,告诉你哪个类有问题。 - Antimony
会检查邮件并回复。 - San
2个回答

0

看起来 Google 在使用 WebViewClients 时升级了他们的安全检查。在许多情况下 - 无恶意意图 - 开发人员会像这样修复 SSL 问题:

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

我也遇到了这个问题,看起来 Lint 尚未实现此检查。因此,很难再现。如果您想查看会发生什么,请创建一个自签名证书,使用此证书设置 Web 服务器,并将 WebViewClient 连接到此“不受信任”的 Web 服务器。如果您没有处理 onReceivedSSLError,则会收到错误或默认情况下 WebView 中将什么也不会发生。

这是否会影响您的付款?我猜如果 SSL 证书不受信任,则将取消对 URL/API 的请求。

以上代码片段将忽略 SSL 错误,并提供进行中间人攻击的可能性。您尝试拦截请求、警告用户并允许他们选择继续吗?

例如:

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

0
为了正确处理SSL证书验证,请更改您的代码,每当服务器呈现的证书符合您的期望时调用handler.proceed(),否则调用handler.cancel()。
onReceivedSslError()应通过警报对话框通知用户有关错误的信息。
如果您删除onReceivedSslError(),则在SSL错误的情况下将默认调用handler.cancel()。这也可以起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接