谷歌应用开发者控制台拒绝了我的应用更新。

9
我正在尝试理解并修复我的应用程序被拒绝的原因,我知道这与SSL有关,但似乎找不到是哪个依赖项导致了这个问题。 我正在使用以下设置: Android N(24) Fabric。 MixPanel。 Quickblox。 Crashlytics 分析。 任何帮助将不胜感激。
更新: 这是来自警报部分的内容。

安全警报

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


你是否收到了“您的应用程序正在使用不安全的X509TrustManager实现[...]”消息?如果是,我会发布一个修复程序。如果没有,请指出您收到的消息作为您的应用程序被拒绝的原因。 - thomaspsk
通常情况下,您会希望逐步进行操作,通过删除依赖项,然后逐个添加它们,以确保捕获问题的根源。 - Eenvincible
1
看看这个链接:https://dev59.com/IVoV5IYBdhLWcg3wmPtH - StarsSky
看到了这个答案,由于它在第三方库的某个地方,我真的无能为力... 我知道我需要删除每个库并查看哪一个导致了问题,但我还没有想到这一步,而且我认为可能有一个简单的解决方案:( - Itzik Samara
如果您在自己的代码中没有使用WebViewClient,那么这个问题一定来自于您的某个依赖项。首先确保您正在使用这些依赖项的最新版本。也许这个问题已经在比您使用的版本更新的版本中得到了修复。 - CommonsWare
2个回答

2
问题出在 BackEndless 上,更新它后,问题得到了解决。

3
你能否详细解释一下? - Abdul Aleem

2
您需要按照下面的说明更新您的webViewClient处理程序。如果在应用程序中您没有使用带有onReceivedSslError()的webview,则请检查您使用了最新版本的SDK,以根据Google的新安全策略获得更新的版本。
为了正确处理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();
}

经过这些更改后,将不会显示警告。


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