9

我试图了解并解决为什么我的应用程序被拒绝我知道它与 SSL 有关,但我似乎无法找到导致它的依赖项。我正在使用下一个设置:

  1. 安卓 N (24)
  2. 织物。
  3. 混合面板。
  4. 快闪。
  5. 崩溃分析器
  6. 分析。

任何帮助,将不胜感激。


更新:这是来自警报部分

安全警报

您的应用程序的 WebViewClient.onReceivedSslError 处理程序的实现不安全。具体来说,该实现会忽略所有 SSL 证书验证错误,从而使您的应用容易受到中间人攻击。攻击者可以更改受影响的 WebView 的内容,读取传输的数据(例如登录凭据),并使用 JavaScript 在应用程序内执行代码。要正确处理 SSL 证书验证,请更改您的代码以在服务器提供的证书符合您的期望时调用 SslErrorHandler.proceed(),否则调用 SslErrorHandler.cancel()。包含受影响应用程序和类的电子邮件警报已发送到您的开发者帐户地址。请尽快解决此漏洞,并增加升级后的APK版本号。有关 SSL 错误处理程序的更多信息,请参阅开发者帮助中心中的文档。对于其他技术问题,您可以发布到https://www.stackoverflow.com/questions并使用标签“android-security”和“SslErrorHandler”。如果您使用的是负责此问题的第 3 方库,请通知第 3 方并与他们一起解决问题。要确认您已正确升级,请将更新后的版本上传到开发者控制台,并在五小时后回来查看。如果应用程序未正确升级,我们将显示警告。请注意,虽然这些特定问题可能不会影响使用 WebView SSL 的每个应用程序,但最好及时更新所有安全补丁。存在使用户面临被入侵风险的漏洞的应用程序可能会被视为违反了我们的恶意行为政策和《开发者分发协议》第 4.4 节。请确保所有发布的应用都符合开发者分发协议和开发者计划政策。如果您有任何问题或疑虑,请通过 Google Play 开发者帮助中心联系我们的支持团队。影响 APK 版本 2。

4

2 回答 2

2

您需要更新您的 webViewClient 处理程序,如下所述。如果在您的应用程序中您没有使用带有 onReceivedSslError() 的 webview,则根据 Google 的新安全策略检查您使用的 SDK 最新版本以获取更新版本。

要正确处理 SSL 证书验证,请更改您的代码以在服务器提供的证书符合您的期望时调用 SslErrorHandler.proceed(),否则调用 SslErrorHandler.cancel()。

例如,我添加了一个警告对话框以使用户已确认并且似乎 Google 不再显示警告。

    @Override
    public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    String message = "SSL Certificate error.";
        switch (error.getPrimaryError()) {
            case SslError.SSL_UNTRUSTED:
                message = "The certificate authority is not trusted.";
                break;
            case SslError.SSL_EXPIRED:
                message = "The certificate has expired.";
                break;
            case SslError.SSL_IDMISMATCH:
                message = "The certificate Hostname mismatch.";
                break;
            case SslError.SSL_NOTYETVALID:
                message = "The certificate is not yet valid.";
                break;
        }
        message += " Do you want to continue anyway?";

        builder.setTitle("SSL Certificate Error");
        builder.setMessage(message);
    builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        }
    });
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();
}

在此更改后,它将不会显示警告。

于 2016-07-15T06:29:23.293 回答
2

更新版本修复后问题是BackEndless。

于 2016-07-20T18:46:14.233 回答