24

私のアプリの 1 つで、自己署名証明書で HTTPS を使用し、Android 開発者トレーニング サイト ( https://developer.android.com/training/articles/security-ssl.html#UnknownCa )のサンプル コードに従いました。 .

最近、現在の実装が保護されていないという次のアラートを受け取りました。

セキュリティーアラート

あなたのアプリは、Apache HTTP クライアントで X509TrustManager インターフェースの安全でない実装を使用しているため、セキュリティ上の脆弱性が生じています。脆弱性の修正期限など、詳細については、この Google ヘルプ センターの記事を参照してください。

上記のサンプル コード以外に何を更新する必要があるかについて、誰かが詳細を提供できますか?

カスタムを実装する必要がありますTrustManagerか? もしそうなら、それは何を確認すべきですか?

4

4 に答える 4

15

コードで「TrustManager」を検索してみてください。何も見つからない場合は、ほとんどの場合、サードパーティのライブラリが含まれているためです。

私にとっては、古いバージョンの ACRA ( https://github.com/ACRA/acra ) を使用していたことが原因でした。

于 2016-02-19T02:57:35.197 に答える
4

私にとって問題は Mobilecore でした。アプリからライブラリを削除し、apk の新しいバージョンをアップロードしたところ、GPlay 開発コンソールから警告が消えました。

于 2016-02-19T10:50:39.640 に答える
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();
        }
    }

于 2016-05-12T11:29:59.233 に答える
1

また、ARCA 4.3 が私のアプリの原因である可能性があることも確認しました。

質問、問題が解決したことを確認する方法を知っている人はいますか? 現在、私がアクセスできる Play ストアでは、Google から警告が発行されることはありませんが、アプリを公開したパートナーの 1 人が警告を受け取りました。パートナーに新しい APK を提供する前に、問題が解決したことを確認したいと思います。

于 2016-02-19T16:44:28.207 に答える