在我的一个应用程序中,我使用带有自签名证书的HTTPS,并遵循了Android开发人员培训站点(https://developer.android.com/training/articles/security-ssl.html#UnknownCa(的示例代码。
我最近收到以下警报,指出当前实现不安全:
安全警报
你的应用正在使用不安全的 X509TrustManager 接口与 Apache HTTP 客户端,从而产生 安全漏洞。请参阅这篇 Google 帮助中心文章,了解 详细信息,包括修复漏洞的截止日期。
有人可以提供上面链接的示例代码之外应该更新哪些内容的更多详细信息吗?
我应该实现自定义TrustManager
吗?如果是这样,它应该验证什么?
尝试在您的代码中搜索"TrustManager",如果没有找到,大多数情况下是因为包含第三方库。
对我来说,这是因为使用了旧版本的ACRA(https://github.com/ACRA/acra(。
对我来说,问题是Mobilecore。我已经从应用程序中删除了库并上传了新版本的apk,并且警告已从GPlay开发控制台中消失。
可能会迟到,但希望它可以帮助某人,请在请求服务器之前调用此方法。如果证书不信任,您已经实现了对话框或其他内容,以便用户可以决定,这里我使用警报对话框。
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 似乎是我应用程序的罪魁祸首。
问题,有谁知道验证问题是否已解决? 目前,我有权访问的 Play 商店并未导致 Google 向我发出警告,但我们发布该应用的合作伙伴之一收到了警告。 我想在向我们的合作伙伴提供新的APK之前验证问题是否已解决。