android - असुरक्षित ट्रस्टमैनेजर के लिए Google Play सुरक्षा अलर्ट




security ssl (3)

मेरे ऐप्स में से एक में मैं एक स्व-हस्ताक्षरित प्रमाणपत्र के साथ HTTPS का उपयोग कर रहा हूं और एंड्रॉइड डेवलपर प्रशिक्षण साइट ( https://developer.android.com/training/articles/security-ssl.html#UnknownCa ) से नमूना कोड का पालन कर रहा हूं। ।

मुझे हाल ही में निम्नलिखित चेतावनी मिली है कि वर्तमान कार्यान्वयन सुरक्षित नहीं है:

सुरक्षा चेतावनी

आपका ऐप X509TrustManager इंटरफ़ेस के अपाचे HTTP क्लाइंट के असुरक्षित कार्यान्वयन का उपयोग कर रहा है, जिसके परिणामस्वरूप सुरक्षा भेद्यता है। भेद्यता को ठीक करने के लिए समय सीमा सहित विवरण के लिए कृपया यह Google सहायता केंद्र लेख देखें।

क्या कोई ऊपर से जुड़े नमूना कोड से परे अपडेट किए जाने के बारे में अधिक जानकारी प्रदान कर सकता है?

क्या मुझे कस्टम TrustManager लागू करना चाहिए? यदि हां, तो इसे क्या सत्यापित करना चाहिए?


अपने कोड में "TrustManager" की खोज करने का प्रयास करें, यदि कोई नहीं पाया जाता है, तो अधिकांश मामलों में यह तृतीय पक्ष पुस्तकालयों के कारण होता है।

मेरे लिए यह एसीआरए ( 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();
        }
    }


मैंने यह भी पहचाना है कि एआरसीए 4.3 संभावित रूप से मेरे ऐप के लिए अपराधी प्रतीत होता है।

प्रश्न, क्या कोई यह सत्यापित करने के लिए जानता है कि समस्या हल हो गई है? वर्तमान में, मेरे पास जिस स्टोर स्टोर की पहुंच है, वह मुझे चेतावनी जारी करने का कारण नहीं बना रहा है, लेकिन ऐप को प्रकाशित करने वाले हमारे भागीदारों में से एक ने चेतावनी प्राप्त की है। मैं यह सत्यापित करना चाहता हूं कि हमारे साथी को एक नए एपीके के साथ प्रदान करने से पहले समस्या हल हो गई है।





trustmanager