针对不安全的TrustManager的Google Play安全警报

时间:2016-02-17 19:27:57

标签: android security ssl android-security trustmanager

在我的某个应用中,我使用带有自签名证书的HTTPS,并按照Android开发人员培训网站(https://developer.android.com/training/articles/security-ssl.html#UnknownCa)中的示例代码进行操作。

我最近收到以下警告,说当前的实施不安全:

  

安全提醒

     

您的应用正在使用不安全的实施   X509TrustManager与Apache HTTP客户端的接口,产生了一个   安全漏洞。请参阅this Google Help Center article了解   详细信息,包括修复漏洞的截止日期。

有人可以提供更多详细信息,说明除了上面链接的示例代码之外应该更新的内容吗?

我应该实施自定义TrustManager吗?如果是这样,它应该验证什么?

4 个答案:

答案 0 :(得分:14)

尝试在您的代码中搜索“TrustManager”,如果没有找到,大多数情况都是因为包含第三方库。

对我来说,这是因为使用了旧版本的ACRA(https://github.com/ACRA/acra)。

答案 1 :(得分:3)

对我来说问题是Mobilecore。我已从应用中删除了该库并上传了新版本的apk,警告已从GPlay Dev控制台中消失。

答案 2 :(得分:3)

可能会迟到,但希望它可以帮助某人,在请求服务器之前调用此方法。如果证书不信任,你可以实现对话或用户可以决定的东西,这里我使用警告对话框。

public static void trustSSLCertificate(final Activity mActivity, final DownloadPortalTask task){
        try {
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });

            SSLContext context = SSLContext.getInstance("TLS");
            context.init(null, new X509TrustManager[]{new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    try {
                        chain[0].checkValidity();
                    } catch (final Exception e) {

                        mActivity.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                                AlertDialog alertDialog = builder.create();
                                alertDialog.setCancelable(false);
                                String message = "There a problem with the security certificate for this web site.";
                                message += "\nDo you want to continue anyway?";
                                alertDialog.setTitle("SSL Certificate Error");
                                alertDialog.setMessage(message);
                                alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        acceptSSL = true;
                                        return;

                                    }
                                });

                                alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        acceptSSL = true;
                                        task.onInterruptedDownload();
                                    }
                                });
                                alertDialog.show();

                            }

                        });

                        while( !acceptSSL){
                            try{
                                Thread.sleep(1000);
                            } catch( InterruptedException er) { }
                        }

                    }
                }
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
            }}, new SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
        } catch (Exception e) { // should never happen
            e.printStackTrace();
        }
    }

答案 3 :(得分:1)

我还发现ARCA 4.3似乎可能是我的应用程序的罪魁祸首。

问题,是否有人知道验证问题是否已解决?目前,我有权访问的Play商店并未导致Google向我发出警告,但我们发布该应用的合作伙伴之一已收到警告。在向合作伙伴提供新的APK之前,我想验证问题已得到解决。