私のアプリの1つで、自己署名証明書でHTTPSを使用しており、Android開発者トレーニングサイト( https://developer.Android.com /training/articles/security-ssl.html#UnknownCa )。
最近、次の警告が表示されました。現在の実装は保護されていません。
セキュリティ警告
アプリがApache HTTPクライアントでX509TrustManagerインターフェイスの安全でない実装を使用しているため、セキュリティ上の脆弱性が生じています。脆弱性の修正期限など、詳細については このGoogleヘルプセンターの記事 を参照してください。
上記のリンクされたサンプルコード以外に何を更新する必要があるかについて誰かが詳細を提供できますか?
カスタムTrustManager
を実装する必要がありますか?もしそうなら、それは何を確認すべきですか?
私にとっての問題はMobilecoreでした。アプリからライブラリを削除してapkの新しいバージョンをアップロードしましたが、GPlay Dev Consoleから警告が消えました。
コードで「TrustManager」を検索してみてください。見つからない場合は、ほとんどの場合、サードパーティのライブラリが含まれていることが原因です。
私にとっては、古いバージョンの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がアプリの原因である可能性があることも確認しました。
質問、誰かが問題が解決したことを確認することを知っていますか?現在、私がアクセスできるPlayストアは、Googleに警告を発していませんが、アプリを公開したパートナーの1人が警告を受け取っています。パートナーに新しいAPKを提供する前に、問題が解決したことを確認したいと思います。