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

在我的一个应用程序中,我使用HTTPS和自签名证书,并遵循Android开发人员培训网站( https://developer.android.com/training/articles/security-ssl.html#UnknownCa ) 。

我最近得到了以下警告,说当前的实现是不安全的:

安全警报

您的应用程序正在使用Apache HTTP客户端的X509TrustManager接口的不安全实现,导致安全漏洞。 有关详细信息,请参阅此Google帮助中心文章 ,其中包括修复漏洞的截止date。

有人可以提供更多的细节,应该在上面链接的示例代码之外更新什么?

我应该实施一个自定义的TrustManager ? 如果是这样,它应该validation什么?

Solutions Collecting From Web of "针对不安全的TrustManager的Google Play安全警报"

对我来说,问题是Mobilecore。 我已经从应用程序中删除了库,并上传了一个新版本的apk,警告已经从GPlay开发控制台消失。

尝试在代码中search“TrustManager”,如果没有find,大多数情况下是由于包含第三方库。

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

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

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

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

问题,有谁知道validation问题解决? 目前,我所访问的Play商店不会导致Google向我发出警告,但我们发布应用的合作伙伴之一已收到警告。 我想在向我们的合作伙伴提供新的APK之前validation问题已经解决。