Как исправить приложения, содержащие небезопасную реализацию TrustManager

Я пытаюсь привести свои приложения для Android в соответствие с новой политикой Android в отношении безопасных приложений в соответствии с этим требованием и инструкциями< /а>.

1) Сначала я добавил SSL и https к URL-адресам в своем приложении. 2) Затем я начал использовать класс HttpsURLConnection вместо HttpURLConnection.

Вот пример удаленного вызова, который я использую:

   public void sendFeedback(String name , String email , String password ) 
   {  
        String[] params = new String[] { "https://www.problemio.com/auth/create_profile_mobile.php", name , email , password };

        DownloadWebPageTask task = new DownloadWebPageTask();
        task.execute(params);        
   }

   public class DownloadWebPageTask extends AsyncTask<String, Void, String> 
   {       
        private boolean connectionError = false;


     @Override
     protected void onPreExecute( ) 
     {
          dialog = new Dialog(CreateProfileActivity.this);

          dialog.setContentView(R.layout.please_wait);
          dialog.setTitle("Creating Profile");

          TextView text = (TextView) dialog.findViewById(R.id.please_wait_text);
          text.setText("Please wait while your profile is created... ");
          dialog.show();
     }             

    @Override
    protected String doInBackground(String... theParams) 
    {
        String myUrl = theParams[0];
        final String name = theParams[1];
        final String email = theParams[2];
        final String password = theParams[3];

        String charset = "UTF-8";                       
        String response = null;

        try 
        {               
            String query = String.format("name=%s&email=%s&password=%s", 
                     URLEncoder.encode(name, charset), 
                     URLEncoder.encode(email, charset), 
                     URLEncoder.encode(password, charset));

            final URL url = new URL( myUrl + "?" + query );

            final HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();

            conn.setDoOutput(true); 
            conn.setRequestMethod("POST");

            conn.setDoOutput(true);

            conn.setUseCaches(false);

            conn.connect();

            final InputStream is = conn.getInputStream();
            final byte[] buffer = new byte[8196];
            int readCount;
            final StringBuilder builder = new StringBuilder();
            while ((readCount = is.read(buffer)) > -1) 
            {
                builder.append(new String(buffer, 0, readCount));
            }

            response = builder.toString();      
        } 
        catch (Exception e) 
        {
              connectionError = true;
        }

        return response;
    }

    @Override
    protected void onPostExecute(String result) 
    {       
        // Some code

            // Make an intent to go to the home screen
            Intent myIntent = new Intent(CreateProfileActivity.this, MainActivity.class);
            CreateProfileActivity.this.startActivity(myIntent);
        }
    }    
}

Но это не удалило предупреждающий знак на моей консоли разработчика. Любая идея, что я делаю неправильно и как это исправить?


person Genadinik    schedule 03.04.2016    source источник
comment
Почему у вас вообще X509TrustManager? Каков ваш сценарий, когда вы думаете, что он вам нужен? commonsware.com/blog/2016/02/22/   -  person CommonsWare    schedule 04.04.2016
comment
Это хорошо, но это не ответ на мой вопрос. Почему у вас вообще X509TrustManager? Если у вас его не было, а затем вы начали получать это сообщение из Play Store, ваша проблема, вероятно, связана с сторонняя библиотека. Если у вас был собственный X509TrustManager до того, как вы получили это сообщение... почему?   -  person CommonsWare    schedule 04.04.2016
comment
@CommonsWare У меня нет менеджера X509TrustManager.   -  person Genadinik    schedule 04.04.2016
comment
@CommonsWare Я использую методы doInBackground, которые делают удаленные вызовы на мой сервер и получают данные взамен.   -  person Genadinik    schedule 04.04.2016
comment
Я использую это для вызова своего сервера: открытый класс DownloadWebPageTask расширяет AsyncTask‹String, Void, String›   -  person Genadinik    schedule 04.04.2016
comment
У меня нет X509TrustManager — тогда ваша проблема связана с какой-то сторонней библиотекой. Вам нужно будет определить, что это за библиотека, и посмотреть, есть ли какая-то новая версия, которая устраняет эту проблему.   -  person CommonsWare    schedule 04.04.2016
comment
@CommonsWare Я изменил свой первоначальный вопрос, чтобы лучше объяснить мою ситуацию. Вы знаете, что я могу сделать в моей нынешней ситуации? Спасибо!   -  person Genadinik    schedule 07.04.2016
comment
Как я уже заметил, ваша проблема связана с какой-то сторонней библиотекой. Вам нужно будет определить, что это за библиотека, и посмотреть, есть ли какая-то новая версия, которая устраняет эту проблему. Или просто обновите все свои сторонние библиотеки до их последних версий и посмотрите, исчезнет ли проблема.   -  person CommonsWare    schedule 07.04.2016
comment
@CommonsWare На самом деле я не использую сторонние библиотеки. Это простое приложение. Единственное, что я делаю, что, как мне кажется, может быть проблематичным, - это вызов удаленного сервера. Вы не думаете, что это проблема вызова удаленного сервера?   -  person Genadinik    schedule 07.04.2016
comment
На самом деле я не использую сторонние библиотеки — тогда я не понимаю, как Google может жаловаться. Конкретная вещь, которую ищет Google, — это пользовательский X509TrustManager с неработающей реализацией, такой как в этот вопрос. Либо у вас есть тот, который вы набрали сами, либо у вас есть один из какой-то библиотеки, которую вы добавляете через dependencies, либо сканер Google сломан.   -  person CommonsWare    schedule 07.04.2016
comment
@CommonsWare, как всегда, ты гений. Я достал старую банку, связанную со шквалами и акрами, и она избавилась от предупреждения. Если вы хотите добавить это как ответ, я отмечу его как закрытый.   -  person Genadinik    schedule 10.04.2016


Ответы (1)


Предполагая, что сканер Google не сломан, X509TrustManager, на который он жалуется, может появиться в одном из двух мест.

Это может быть ваш собственный исходный код. Обычно вы помните, что делали это, потому что где-то ввели implements X509TrustManager в классе и переопределили кучу неприглядных методов. Быстрый поиск по исходному коду должен определить, так ли это.

Если нет, то из какой-то библиотеки. Мы надеемся, что многие большинство библиотек исправят это. Однако это может быть очищено только в более новых выпусках библиотеки, чем вы используете в настоящее время, либо потому, что у вас есть старая версия, указанная в ваших зависимостях, либо вы используете локальный JAR или что-то в этом роде. Плохая новость заключается в том, что отследить виновника здесь может быть непросто, хотя это будет ограничено библиотеками, которым нужен доступ в Интернет (например, recyclerview-v7 не будет проблемой). Хорошей новостью является то, что решить проблему можно так же просто, как обновить библиотеку или удалить ее, если она не нужна из прошлых реализаций вашего приложения, которое вы больше не используете.

Пока я не могу говорить о Flurry, эта проблема существовала в старой версии ACRA. В последние месяцы в ACRA было внесено множество других исправлений, поэтому я бы порекомендовал вам в любом случае перейти на текущую версию.

person CommonsWare    schedule 10.04.2016